100% test coverage for mailusers.
This commit is contained in:
@@ -57,13 +57,10 @@ class Command(BaseCommand):
|
||||
emailed = json.loads(account.emailed_courses)
|
||||
certificates = GeneratedCertificate.objects.filter(user=user)
|
||||
certificates = certificates.filter(status='downloadable')
|
||||
print 'HUH?', certificates
|
||||
certificates = [cert for cert in certificates
|
||||
if cert.course_id not in emailed]
|
||||
print 'DUH?', certificates
|
||||
if not certificates:
|
||||
continue
|
||||
print 'WTF?', emailed
|
||||
if grandfather:
|
||||
self.send_grandfather_email(user, certificates)
|
||||
emailed.extend([cert.course_id for cert in certificates])
|
||||
@@ -86,19 +83,18 @@ class Command(BaseCommand):
|
||||
course.org, # Partner's name
|
||||
course.number, # Certificate's name
|
||||
'gf' if grandfather else 'T'])
|
||||
query = {
|
||||
'pfCertificationName': certificate.name,
|
||||
'pfAuthorityName': self.api.config['COMPANY_NAME'],
|
||||
'pfAuthorityId': self.api.config['COMPANY_ID'],
|
||||
'pfCertificationUrl': certificate.download_url,
|
||||
'pfLicenseNo': certificate.course_id,
|
||||
'pfCertStartDate': course.start.strftime('%Y%mI'),
|
||||
'pfCertFuture': certificate.created_date.strftime('%Y%m'),
|
||||
'_mSplash': '1',
|
||||
'trk': tracking_code,
|
||||
'startTask': 'CERTIFICATION_name',
|
||||
'force': 'true',
|
||||
}
|
||||
query = [
|
||||
('pfCertificationName', certificate.name),
|
||||
('pfAuthorityName', self.api.config['COMPANY_NAME']),
|
||||
('pfAuthorityId', self.api.config['COMPANY_ID']),
|
||||
('pfCertificationUrl', certificate.download_url),
|
||||
('pfLicenseNo', certificate.course_id),
|
||||
('pfCertStartDate', course.start.strftime('%Y%mI')),
|
||||
('pfCertFuture', certificate.created_date.strftime('%Y%m')),
|
||||
('_mSplash', '1'),
|
||||
('trk', tracking_code),
|
||||
('startTask', 'CERTIFICATION_NAME'),
|
||||
('force', 'true'),]
|
||||
return 'http://www.linkedin.com/profile/guided?' + urllib.urlencode(query)
|
||||
|
||||
def send_grandfather_email(self, user, certificates):
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
"""
|
||||
Test email scripts.
|
||||
"""
|
||||
import datetime
|
||||
import json
|
||||
import mock
|
||||
|
||||
from certificates.models import GeneratedCertificate
|
||||
from django.contrib.auth.models import User
|
||||
from django.core import mail
|
||||
from django.test import TestCase
|
||||
|
||||
from student.models import UserProfile
|
||||
@@ -22,7 +24,8 @@ class MailusersTests(TestCase):
|
||||
|
||||
def setUp(self):
|
||||
courses = {
|
||||
'TEST1': mock.Mock(org='TestX', number='1'),
|
||||
'TEST1': mock.Mock(org='TestX', number='1',
|
||||
start=datetime.datetime(2010, 5, 12, 2, 42)),
|
||||
'TEST2': mock.Mock(org='TestX', number='2'),
|
||||
'TEST3': mock.Mock(org='TestX', number='3'),
|
||||
}
|
||||
@@ -32,19 +35,22 @@ class MailusersTests(TestCase):
|
||||
patcher.start()
|
||||
self.addCleanup(patcher.stop)
|
||||
|
||||
self.fred = fred = User(username='fred')
|
||||
self.fred = fred = User(username='fred', email='fred@bedrock.gov')
|
||||
fred.save()
|
||||
UserProfile(user=fred, name='Fred Flintstone').save()
|
||||
LinkedIn(user=fred, has_linkedin_account=True).save()
|
||||
self.barney = barney = User(username='barney')
|
||||
self.barney = barney = User(
|
||||
username='barney', email='barney@bedrock.gov')
|
||||
barney.save()
|
||||
LinkedIn(user=barney, has_linkedin_account=True).save()
|
||||
UserProfile(user=barney, name='Barney Rubble').save()
|
||||
|
||||
cert1 = GeneratedCertificate(
|
||||
self.cert1 = cert1 = GeneratedCertificate(
|
||||
status='downloadable',
|
||||
user=fred,
|
||||
course_id='TEST1')
|
||||
course_id='TEST1',
|
||||
name='TestX/Intro101',
|
||||
download_url='http://test.foo/test')
|
||||
cert1.save()
|
||||
cert2 = GeneratedCertificate(
|
||||
status='downloadable',
|
||||
@@ -67,6 +73,28 @@ class MailusersTests(TestCase):
|
||||
json.loads(self.fred.linkedin.emailed_courses), ['TEST1', 'TEST2'])
|
||||
self.assertEqual(
|
||||
json.loads(self.barney.linkedin.emailed_courses), ['TEST3'])
|
||||
self.assertEqual(len(mail.outbox), 3)
|
||||
self.assertEqual(mail.outbox[0].from_email, 'The Team <team@test.foo>')
|
||||
self.assertEqual(
|
||||
mail.outbox[0].to, ['Fred Flintstone <fred@bedrock.gov>'])
|
||||
self.assertEqual(
|
||||
mail.outbox[1].to, ['Fred Flintstone <fred@bedrock.gov>'])
|
||||
self.assertEqual(
|
||||
mail.outbox[2].to, ['Barney Rubble <barney@bedrock.gov>'])
|
||||
|
||||
@mock.patch.dict('django.conf.settings.LINKEDIN_API',
|
||||
{'EMAIL_WHITELIST': ['barney@bedrock.gov']})
|
||||
def test_mail_users_with_whitelist(self):
|
||||
"""
|
||||
Test emailing users.
|
||||
"""
|
||||
fut = mailusers.Command().handle
|
||||
fut()
|
||||
self.assertEqual(
|
||||
json.loads(self.barney.linkedin.emailed_courses), ['TEST3'])
|
||||
self.assertEqual(len(mail.outbox), 1)
|
||||
self.assertEqual(
|
||||
mail.outbox[0].to, ['Barney Rubble <barney@bedrock.gov>'])
|
||||
|
||||
def test_mail_users_grandfather(self):
|
||||
"""
|
||||
@@ -78,6 +106,11 @@ class MailusersTests(TestCase):
|
||||
json.loads(self.fred.linkedin.emailed_courses), ['TEST1', 'TEST2'])
|
||||
self.assertEqual(
|
||||
json.loads(self.barney.linkedin.emailed_courses), ['TEST3'])
|
||||
self.assertEqual(len(mail.outbox), 2)
|
||||
self.assertEqual(
|
||||
mail.outbox[0].to, ['Fred Flintstone <fred@bedrock.gov>'])
|
||||
self.assertEqual(
|
||||
mail.outbox[1].to, ['Barney Rubble <barney@bedrock.gov>'])
|
||||
|
||||
def test_mail_users_only_new_courses(self):
|
||||
"""
|
||||
@@ -93,3 +126,40 @@ class MailusersTests(TestCase):
|
||||
json.loads(fred.linkedin.emailed_courses), ['TEST1', 'TEST2'])
|
||||
self.assertEqual(
|
||||
json.loads(self.barney.linkedin.emailed_courses), ['TEST3'])
|
||||
self.assertEqual(len(mail.outbox), 2)
|
||||
self.assertEqual(
|
||||
mail.outbox[0].to, ['Fred Flintstone <fred@bedrock.gov>'])
|
||||
self.assertEqual(
|
||||
mail.outbox[1].to, ['Barney Rubble <barney@bedrock.gov>'])
|
||||
|
||||
def test_mail_users_barney_has_no_new_courses(self):
|
||||
"""
|
||||
Test emailing users, making sure they are only emailed about new
|
||||
certificates.
|
||||
"""
|
||||
self.barney.linkedin.emailed_courses = json.dumps(['TEST3'])
|
||||
self.barney.linkedin.save()
|
||||
fut = mailusers.Command().handle
|
||||
fut()
|
||||
fred = User.objects.get(username='fred')
|
||||
self.assertEqual(
|
||||
json.loads(fred.linkedin.emailed_courses), ['TEST1', 'TEST2'])
|
||||
self.assertEqual(
|
||||
json.loads(self.barney.linkedin.emailed_courses), ['TEST3'])
|
||||
self.assertEqual(len(mail.outbox), 2)
|
||||
self.assertEqual(
|
||||
mail.outbox[0].to, ['Fred Flintstone <fred@bedrock.gov>'])
|
||||
self.assertEqual(
|
||||
mail.outbox[1].to, ['Fred Flintstone <fred@bedrock.gov>'])
|
||||
|
||||
def test_certificate_url(self):
|
||||
self.cert1.created_date = datetime.datetime(2010, 8, 15, 0, 0)
|
||||
self.cert1.save()
|
||||
fut = mailusers.Command().certificate_url
|
||||
self.assertEqual(fut(self.cert1),
|
||||
'http://www.linkedin.com/profile/guided?'
|
||||
'pfCertificationName=TestX%2FIntro101&pfAuthorityName=edX&'
|
||||
'pfAuthorityId=0000000&'
|
||||
'pfCertificationUrl=http%3A%2F%2Ftest.foo%2Ftest&pfLicenseNo=TEST1&'
|
||||
'pfCertStartDate=201005I&pfCertFuture=201008&_mSplash=1&'
|
||||
'trk=eml-prof-TestX-1-T&startTask=CERTIFICATION_NAME&force=true')
|
||||
|
||||
Reference in New Issue
Block a user