Commit 0a5c25c6 by Chris Rossi Committed by Diana Huang

100% test coverage for mailusers.

parent fd1d98f7
...@@ -57,13 +57,10 @@ class Command(BaseCommand): ...@@ -57,13 +57,10 @@ class Command(BaseCommand):
emailed = json.loads(account.emailed_courses) emailed = json.loads(account.emailed_courses)
certificates = GeneratedCertificate.objects.filter(user=user) certificates = GeneratedCertificate.objects.filter(user=user)
certificates = certificates.filter(status='downloadable') certificates = certificates.filter(status='downloadable')
print 'HUH?', certificates
certificates = [cert for cert in certificates certificates = [cert for cert in certificates
if cert.course_id not in emailed] if cert.course_id not in emailed]
print 'DUH?', certificates
if not certificates: if not certificates:
continue continue
print 'WTF?', emailed
if grandfather: if grandfather:
self.send_grandfather_email(user, certificates) self.send_grandfather_email(user, certificates)
emailed.extend([cert.course_id for cert in certificates]) emailed.extend([cert.course_id for cert in certificates])
...@@ -86,19 +83,18 @@ class Command(BaseCommand): ...@@ -86,19 +83,18 @@ class Command(BaseCommand):
course.org, # Partner's name course.org, # Partner's name
course.number, # Certificate's name course.number, # Certificate's name
'gf' if grandfather else 'T']) 'gf' if grandfather else 'T'])
query = { query = [
'pfCertificationName': certificate.name, ('pfCertificationName', certificate.name),
'pfAuthorityName': self.api.config['COMPANY_NAME'], ('pfAuthorityName', self.api.config['COMPANY_NAME']),
'pfAuthorityId': self.api.config['COMPANY_ID'], ('pfAuthorityId', self.api.config['COMPANY_ID']),
'pfCertificationUrl': certificate.download_url, ('pfCertificationUrl', certificate.download_url),
'pfLicenseNo': certificate.course_id, ('pfLicenseNo', certificate.course_id),
'pfCertStartDate': course.start.strftime('%Y%mI'), ('pfCertStartDate', course.start.strftime('%Y%mI')),
'pfCertFuture': certificate.created_date.strftime('%Y%m'), ('pfCertFuture', certificate.created_date.strftime('%Y%m')),
'_mSplash': '1', ('_mSplash', '1'),
'trk': tracking_code, ('trk', tracking_code),
'startTask': 'CERTIFICATION_name', ('startTask', 'CERTIFICATION_NAME'),
'force': 'true', ('force', 'true'),]
}
return 'http://www.linkedin.com/profile/guided?' + urllib.urlencode(query) return 'http://www.linkedin.com/profile/guided?' + urllib.urlencode(query)
def send_grandfather_email(self, user, certificates): def send_grandfather_email(self, user, certificates):
......
""" """
Test email scripts. Test email scripts.
""" """
import datetime
import json import json
import mock import mock
from certificates.models import GeneratedCertificate from certificates.models import GeneratedCertificate
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core import mail
from django.test import TestCase from django.test import TestCase
from student.models import UserProfile from student.models import UserProfile
...@@ -22,7 +24,8 @@ class MailusersTests(TestCase): ...@@ -22,7 +24,8 @@ class MailusersTests(TestCase):
def setUp(self): def setUp(self):
courses = { 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'), 'TEST2': mock.Mock(org='TestX', number='2'),
'TEST3': mock.Mock(org='TestX', number='3'), 'TEST3': mock.Mock(org='TestX', number='3'),
} }
...@@ -32,19 +35,22 @@ class MailusersTests(TestCase): ...@@ -32,19 +35,22 @@ class MailusersTests(TestCase):
patcher.start() patcher.start()
self.addCleanup(patcher.stop) self.addCleanup(patcher.stop)
self.fred = fred = User(username='fred') self.fred = fred = User(username='fred', email='fred@bedrock.gov')
fred.save() fred.save()
UserProfile(user=fred, name='Fred Flintstone').save() UserProfile(user=fred, name='Fred Flintstone').save()
LinkedIn(user=fred, has_linkedin_account=True).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() barney.save()
LinkedIn(user=barney, has_linkedin_account=True).save() LinkedIn(user=barney, has_linkedin_account=True).save()
UserProfile(user=barney, name='Barney Rubble').save() UserProfile(user=barney, name='Barney Rubble').save()
cert1 = GeneratedCertificate( self.cert1 = cert1 = GeneratedCertificate(
status='downloadable', status='downloadable',
user=fred, user=fred,
course_id='TEST1') course_id='TEST1',
name='TestX/Intro101',
download_url='http://test.foo/test')
cert1.save() cert1.save()
cert2 = GeneratedCertificate( cert2 = GeneratedCertificate(
status='downloadable', status='downloadable',
...@@ -67,6 +73,28 @@ class MailusersTests(TestCase): ...@@ -67,6 +73,28 @@ class MailusersTests(TestCase):
json.loads(self.fred.linkedin.emailed_courses), ['TEST1', 'TEST2']) json.loads(self.fred.linkedin.emailed_courses), ['TEST1', 'TEST2'])
self.assertEqual( self.assertEqual(
json.loads(self.barney.linkedin.emailed_courses), ['TEST3']) 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): def test_mail_users_grandfather(self):
""" """
...@@ -78,6 +106,11 @@ class MailusersTests(TestCase): ...@@ -78,6 +106,11 @@ class MailusersTests(TestCase):
json.loads(self.fred.linkedin.emailed_courses), ['TEST1', 'TEST2']) json.loads(self.fred.linkedin.emailed_courses), ['TEST1', 'TEST2'])
self.assertEqual( self.assertEqual(
json.loads(self.barney.linkedin.emailed_courses), ['TEST3']) 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): def test_mail_users_only_new_courses(self):
""" """
...@@ -93,3 +126,40 @@ class MailusersTests(TestCase): ...@@ -93,3 +126,40 @@ class MailusersTests(TestCase):
json.loads(fred.linkedin.emailed_courses), ['TEST1', 'TEST2']) json.loads(fred.linkedin.emailed_courses), ['TEST1', 'TEST2'])
self.assertEqual( self.assertEqual(
json.loads(self.barney.linkedin.emailed_courses), ['TEST3']) 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')
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment