Commit 0a5c25c6 by Chris Rossi Committed by Diana Huang

100% test coverage for mailusers.

parent fd1d98f7
......@@ -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):
......
"""
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')
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