100% test coverage for mailusers.

This commit is contained in:
Chris Rossi
2013-12-20 09:56:30 -05:00
committed by Diana Huang
parent fd1d98f7de
commit 0a5c25c6ea
2 changed files with 87 additions and 21 deletions

View File

@@ -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):

View File

@@ -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')