Commit 13ee3056 by Albert St. Aubin

update session cookie with the course id

parent 1bd30cff
...@@ -49,14 +49,17 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase): ...@@ -49,14 +49,17 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
course_min_price=100, course_min_price=100,
days_till_verification_deadline=14, days_till_verification_deadline=14,
verification_status=None, verification_status=None,
sku=None sku=None,
create_user=True
): ):
"""Set up the course and user for this test.""" """Set up the course and user for this test."""
now = datetime.now(utc) now = datetime.now(utc)
if create_user:
self.user = UserFactory.create(username='mrrobot', password='test') # pylint: disable=attribute-defined-outside-init
self.course = CourseFactory.create( # pylint: disable=attribute-defined-outside-init self.course = CourseFactory.create( # pylint: disable=attribute-defined-outside-init
start=now + timedelta(days=days_till_start) start=now + timedelta(days=days_till_start)
) )
self.user = UserFactory.create(username='mrrobot', password='test') # pylint: disable=attribute-defined-outside-init
if days_till_end is not None: if days_till_end is not None:
self.course.end = now + timedelta(days=days_till_end) self.course.end = now + timedelta(days=days_till_end)
...@@ -280,7 +283,12 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase): ...@@ -280,7 +283,12 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
# Tests Verified Upgrade Deadline Date Block # Tests Verified Upgrade Deadline Date Block
def check_upgrade_banner(self, banner_expected=True, include_url_parameter=True): def check_upgrade_banner(
self,
banner_expected=True,
include_url_parameter=True,
expected_cookie_value=None
):
""" """
Helper method to check for the presence of the Upgrade Banner Helper method to check for the presence of the Upgrade Banner
""" """
...@@ -288,11 +296,17 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase): ...@@ -288,11 +296,17 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
if include_url_parameter: if include_url_parameter:
url += '?upgrade=true' url += '?upgrade=true'
resp = self.client.get(url) resp = self.client.get(url)
upgrade_cookie_name = 'show_upgrade_notification'
expected_banner_text = "Give yourself an additional incentive to complete" expected_banner_text = "Give yourself an additional incentive to complete"
if banner_expected: if banner_expected:
self.assertIn(expected_banner_text, resp.content) self.assertIn(expected_banner_text, resp.content)
self.assertIn(str(self.course.id), self.client.cookies[upgrade_cookie_name].value)
else: else:
self.assertNotIn(expected_banner_text, resp.content) self.assertNotIn(expected_banner_text, resp.content)
if upgrade_cookie_name in self.client.cookies:
self.assertNotIn(str(self.course.id), self.client.cookies[upgrade_cookie_name].value)
if expected_cookie_value is not None:
self.assertIn(str(expected_cookie_value), self.client.cookies[upgrade_cookie_name].value)
@freeze_time('2015-01-02') @freeze_time('2015-01-02')
def test_verified_upgrade_deadline_date(self): def test_verified_upgrade_deadline_date(self):
...@@ -335,6 +349,19 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase): ...@@ -335,6 +349,19 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
# the URL parameter in order to see the notification. # the URL parameter in order to see the notification.
self.check_upgrade_banner(include_url_parameter=False) self.check_upgrade_banner(include_url_parameter=False)
# Store the current course_id for testing
old_course_id = self.course.id
# Change to another course
self.setup_course_and_user(days_till_upgrade_deadline=1,
user_enrollment_mode=CourseMode.AUDIT,
create_user=False)
# Banner should not be present in the newly created course
self.check_upgrade_banner(include_url_parameter=False,
banner_expected=False,
expected_cookie_value=old_course_id)
# Unfortunately (according to django doc), it is not possible to test expiration of the cookie. # Unfortunately (according to django doc), it is not possible to test expiration of the cookie.
def test_ecommerce_checkout_redirect(self): def test_ecommerce_checkout_redirect(self):
......
...@@ -354,13 +354,16 @@ def course_info(request, course_id): ...@@ -354,13 +354,16 @@ def course_info(request, course_id):
if request.GET.get('upgrade', 'false') == 'true': if request.GET.get('upgrade', 'false') == 'true':
store_upgrade_cookie = True store_upgrade_cookie = True
show_upgrade_notification = True show_upgrade_notification = True
elif upgrade_cookie_name in request.COOKIES and bool(request.COOKIES[upgrade_cookie_name]): elif upgrade_cookie_name in request.COOKIES and course_id in request.COOKIES[upgrade_cookie_name]:
show_upgrade_notification = True show_upgrade_notification = True
if show_upgrade_notification: if show_upgrade_notification:
upgrade_data = VerifiedUpgradeDeadlineDate(course, user) upgrade_data = VerifiedUpgradeDeadlineDate(course, user)
if upgrade_data.is_enabled: if upgrade_data.is_enabled:
upgrade_link = upgrade_data.link upgrade_link = upgrade_data.link
else:
# The upgrade is not enabled so the cookie does not need to be stored
store_upgrade_cookie = False
context = { context = {
'request': request, 'request': request,
...@@ -393,13 +396,21 @@ def course_info(request, course_id): ...@@ -393,13 +396,21 @@ def course_info(request, course_id):
response = render_to_response('courseware/info.html', context) response = render_to_response('courseware/info.html', context)
if store_upgrade_cookie: if store_upgrade_cookie:
response.set_cookie( if upgrade_cookie_name in request.COOKIES and str(course_id) not in request.COOKIES[upgrade_cookie_name]:
upgrade_cookie_name, cookie_value = '%s,%s' % (course_id, request.COOKIES[upgrade_cookie_name])
True, elif upgrade_cookie_name in request.COOKIES and str(course_id) in request.COOKIES[upgrade_cookie_name]:
max_age=10 * 24 * 60 * 60, # set for 10 days cookie_value = request.COOKIES[upgrade_cookie_name]
domain=settings.SESSION_COOKIE_DOMAIN, else:
httponly=True # no use case for accessing from JavaScript cookie_value = course_id
)
if cookie_value is not None:
response.set_cookie(
upgrade_cookie_name,
cookie_value,
max_age=10 * 24 * 60 * 60, # set for 10 days
domain=settings.SESSION_COOKIE_DOMAIN,
httponly=True # no use case for accessing from JavaScript
)
return response return response
......
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