Add tests, make them pass.
This commit is contained in:
@@ -13,7 +13,7 @@ from mock import patch, Mock
|
||||
from nose.plugins.skip import SkipTest
|
||||
|
||||
from .models import User, UserProfile, CourseEnrollment, replicate_user, USER_FIELDS_TO_COPY
|
||||
import .views
|
||||
from .views import process_survey_link, _cert_info, unique_id_for_user
|
||||
|
||||
COURSE_1 = 'edX/toy/2012_Fall'
|
||||
COURSE_2 = 'edx/full/6.002_Spring_2012'
|
||||
@@ -204,17 +204,85 @@ class CourseEndingTest(TestCase):
|
||||
|
||||
def test_process_survey_link(self):
|
||||
username = "fred"
|
||||
id = sha1(username)
|
||||
user = Mock(username=username)
|
||||
id = unique_id_for_user(user)
|
||||
link1 = "http://www.mysurvey.com"
|
||||
self.assertEqual(process_survey_link(link1), link1)
|
||||
self.assertEqual(process_survey_link(link1, user), link1)
|
||||
|
||||
link2 = "http://www.mysurvey.com?unique={UNIQUE_ID}"
|
||||
link2_expected = "http://www.mysurvey.com?unique={UNIQUE_ID}".format(UNIQUE_ID=id)
|
||||
self.assertEqual(views.process_survey_link(link2), link2_expected)
|
||||
self.assertEqual(process_survey_link(link2, user), link2_expected)
|
||||
|
||||
def test_cert_info(self):
|
||||
user = Mock(username="fred")
|
||||
survey_url = "http://a_survey.com"
|
||||
course = Mock(end_of_course_survey_url=survey_url)
|
||||
cert_status = None
|
||||
|
||||
self.assertEqual(views._cert_info(user, course, None), {'status': 'processing'})
|
||||
self.assertEqual(_cert_info(user, course, None),
|
||||
{'status': 'processing',
|
||||
'show_disabled_download_button': False,
|
||||
'show_download_url': False,
|
||||
'show_survey_button': False,})
|
||||
|
||||
cert_status = {'status': 'unavailable'}
|
||||
self.assertEqual(_cert_info(user, course, cert_status),
|
||||
{'status': 'processing',
|
||||
'show_disabled_download_button': False,
|
||||
'show_download_url': False,
|
||||
'show_survey_button': False})
|
||||
|
||||
cert_status = {'status': 'generating', 'grade': '67'}
|
||||
self.assertEqual(_cert_info(user, course, cert_status),
|
||||
{'status': 'generating',
|
||||
'show_disabled_download_button': True,
|
||||
'show_download_url': False,
|
||||
'show_survey_button': True,
|
||||
'survey_url': survey_url,
|
||||
'grade': '67'
|
||||
})
|
||||
|
||||
cert_status = {'status': 'regenerating', 'grade': '67'}
|
||||
self.assertEqual(_cert_info(user, course, cert_status),
|
||||
{'status': 'generating',
|
||||
'show_disabled_download_button': True,
|
||||
'show_download_url': False,
|
||||
'show_survey_button': True,
|
||||
'survey_url': survey_url,
|
||||
'grade': '67'
|
||||
})
|
||||
|
||||
download_url = 'http://s3.edx/cert'
|
||||
cert_status = {'status': 'downloadable', 'grade': '67',
|
||||
'download_url': download_url}
|
||||
self.assertEqual(_cert_info(user, course, cert_status),
|
||||
{'status': 'ready',
|
||||
'show_disabled_download_button': False,
|
||||
'show_download_url': True,
|
||||
'download_url': download_url,
|
||||
'show_survey_button': True,
|
||||
'survey_url': survey_url,
|
||||
'grade': '67'
|
||||
})
|
||||
|
||||
cert_status = {'status': 'notpassing', 'grade': '67',
|
||||
'download_url': download_url}
|
||||
self.assertEqual(_cert_info(user, course, cert_status),
|
||||
{'status': 'notpassing',
|
||||
'show_disabled_download_button': False,
|
||||
'show_download_url': False,
|
||||
'show_survey_button': True,
|
||||
'survey_url': survey_url,
|
||||
'grade': '67'
|
||||
})
|
||||
|
||||
# Test a course that doesn't have a survey specified
|
||||
course2 = Mock(end_of_course_survey_url=None)
|
||||
cert_status = {'status': 'notpassing', 'grade': '67',
|
||||
'download_url': download_url}
|
||||
self.assertEqual(_cert_info(user, course2, cert_status),
|
||||
{'status': 'notpassing',
|
||||
'show_disabled_download_button': False,
|
||||
'show_download_url': False,
|
||||
'show_survey_button': False,
|
||||
'grade': '67'
|
||||
})
|
||||
|
||||
@@ -129,6 +129,9 @@ def press(request):
|
||||
return render_to_response('static_templates/press.html', {'articles': articles})
|
||||
|
||||
|
||||
def unique_id_for_user(user):
|
||||
return sha1(user.username).hexdigest()
|
||||
|
||||
def process_survey_link(survey_link, user):
|
||||
"""
|
||||
If {UNIQUE_ID} appears in the link, replace it with a unique id for the user.
|
||||
@@ -136,8 +139,7 @@ def process_survey_link(survey_link, user):
|
||||
"""
|
||||
to_replace = '{UNIQUE_ID}'
|
||||
if to_replace in survey_link:
|
||||
unique_id = sha1(user.username)
|
||||
return survey_link.replace(to_replace, unique_id)
|
||||
return survey_link.replace(to_replace, unique_id_for_user(user))
|
||||
|
||||
return survey_link
|
||||
|
||||
@@ -150,6 +152,7 @@ def cert_info(user, course):
|
||||
'status': one of 'generating', 'ready', 'notpassing', 'processing'
|
||||
'show_download_url': bool
|
||||
'download_url': url, only present if show_download_url is True
|
||||
'show_disabled_download_button': bool -- true if state is 'generating'
|
||||
'show_survey_button': bool
|
||||
'survey_url': url, only if show_survey_button is True
|
||||
'grade': if status is not 'processing'
|
||||
@@ -165,7 +168,10 @@ def _cert_info(user, course, cert_status):
|
||||
"""
|
||||
default_status = 'processing'
|
||||
if cert_status is None:
|
||||
return {'status': default_status}
|
||||
return {'status': default_status,
|
||||
'show_disabled_download_button': False,
|
||||
'show_download_url': False,
|
||||
'show_survey_button': False}
|
||||
|
||||
# simplify the status for the template using this lookup table
|
||||
template_state = {
|
||||
@@ -178,9 +184,10 @@ def _cert_info(user, course, cert_status):
|
||||
status = template_state.get(cert_status['status'], default_status)
|
||||
|
||||
d = {'status': status,
|
||||
'show_download_url': status in ('generating', 'ready'),}
|
||||
'show_download_url': status == 'ready',
|
||||
'show_disabled_download_button': status == 'generating',}
|
||||
|
||||
if (status in ('generating', 'ready', 'not-available') and
|
||||
if (status in ('generating', 'ready', 'notpassing') and
|
||||
course.end_of_course_survey_url is not None):
|
||||
d.update({
|
||||
'show_survey_button': True,
|
||||
@@ -188,10 +195,10 @@ def _cert_info(user, course, cert_status):
|
||||
else:
|
||||
d['show_survey_button'] = False
|
||||
|
||||
if template_state == 'ready':
|
||||
if status == 'ready':
|
||||
d['download_url'] = cert_status['download_url']
|
||||
|
||||
if template_state in 'generating', 'ready', 'notpassing':
|
||||
if status in ('generating', 'ready', 'notpassing'):
|
||||
d['grade'] = cert_status['grade']
|
||||
|
||||
return d
|
||||
|
||||
@@ -75,7 +75,9 @@ def certificate_status_for_student(student, course_id):
|
||||
This returns a dictionary with a key for status, and other information.
|
||||
The status is one of the following:
|
||||
|
||||
unavailable - A student is not eligible for a certificate.
|
||||
unavailable - No entry for this student--if they are actually in
|
||||
the course, they probably have not been graded for
|
||||
certificate generation yet.
|
||||
generating - A request has been made to generate a certificate,
|
||||
but it has not been generated yet.
|
||||
regenerating - A request has been made to regenerate a certificate,
|
||||
@@ -90,7 +92,7 @@ def certificate_status_for_student(student, course_id):
|
||||
"download_url".
|
||||
|
||||
If the student has been graded, the dictionary also contains their
|
||||
grade for the course.
|
||||
grade for the course with the key "grade".
|
||||
'''
|
||||
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user