From 3b9cd02beaba21c38f2e58cc92e18248eb4fa509 Mon Sep 17 00:00:00 2001 From: Julia Hansbrough Date: Fri, 6 Dec 2013 19:19:58 +0000 Subject: [PATCH] response to cr --- lms/djangoapps/shoppingcart/models.py | 1 - .../shoppingcart/tests/test_models.py | 15 +----- .../shoppingcart/tests/test_views.py | 54 ++++++++++++++++++- lms/djangoapps/shoppingcart/views.py | 4 +- lms/templates/dashboard.html | 6 +-- 5 files changed, 58 insertions(+), 22 deletions(-) diff --git a/lms/djangoapps/shoppingcart/models.py b/lms/djangoapps/shoppingcart/models.py index 164debe0b8..7647b2c487 100644 --- a/lms/djangoapps/shoppingcart/models.py +++ b/lms/djangoapps/shoppingcart/models.py @@ -212,7 +212,6 @@ class OrderItem(models.Model): refund_requested_time = models.DateTimeField(null=True) # general purpose field, not user-visible. Used for reporting report_comments = models.TextField(default="") - refund_requested_time = models.DateTimeField(null=True) @property def line_cost(self): diff --git a/lms/djangoapps/shoppingcart/tests/test_models.py b/lms/djangoapps/shoppingcart/tests/test_models.py index f4ec422463..5a52ca0680 100644 --- a/lms/djangoapps/shoppingcart/tests/test_models.py +++ b/lms/djangoapps/shoppingcart/tests/test_models.py @@ -434,7 +434,7 @@ class CertificateItemTest(ModuleStoreTestCase): self.mock_get_current_request.return_value = sentinel.request def test_existing_enrollment(self): - enrollment = CourseEnrollment.enroll(self.user, self.course_id) + CourseEnrollment.enroll(self.user, self.course_id) cart = Order.get_cart_for_user(user=self.user) CertificateItem.add_to_order(cart, self.course_id, self.cost, 'verified') # verify that we are still enrolled @@ -444,19 +444,6 @@ class CertificateItemTest(ModuleStoreTestCase): enrollment = CourseEnrollment.objects.get(user=self.user, course_id=self.course_id) self.assertEquals(enrollment.mode, u'verified') - def assert_upgrade_event_was_emitted(self, user, course_id): - """ Helper function; checks that a particular was called only once """ - self.mock_server_track.assert_called_once_with( - sentinel.request, - 'edx.course.enrollment.upgrade.succeeded', - { - 'course_id': course_id, - 'user_id': user.pk, - 'mode': 'honor' - } - ) - self.mock_server_track.reset_mock() - def test_single_item_template(self): cart = Order.get_cart_for_user(user=self.user) cert_item = CertificateItem.add_to_order(cart, self.course_id, self.cost, 'verified') diff --git a/lms/djangoapps/shoppingcart/tests/test_views.py b/lms/djangoapps/shoppingcart/tests/test_views.py index 816353ed90..b1daa14a8b 100644 --- a/lms/djangoapps/shoppingcart/tests/test_views.py +++ b/lms/djangoapps/shoppingcart/tests/test_views.py @@ -20,7 +20,7 @@ from student.models import CourseEnrollment from course_modes.models import CourseMode from edxmako.shortcuts import render_to_response from shoppingcart.processors import render_purchase_form_html -from mock import patch, Mock +from mock import patch, Mock, sentinel def mock_render_purchase_form_html(*args, **kwargs): @@ -39,6 +39,8 @@ postpay_mock = Mock() @override_settings(MODULESTORE=TEST_DATA_MONGO_MODULESTORE) class ShoppingCartViewsTests(ModuleStoreTestCase): def setUp(self): + patcher = patch('student.models.server_track') + self.mock_server_track = patcher.start() self.user = UserFactory.create() self.user.set_password('password') self.user.save() @@ -203,6 +205,56 @@ class ShoppingCartViewsTests(ModuleStoreTestCase): self.assertIn(cert_item, context['order_items']) self.assertFalse(context['any_refunds']) + @patch('shoppingcart.views.render_to_response', render_mock) + def test_show_receipt_success_with_upgrade(self): + + reg_item = PaidCourseRegistration.add_to_order(self.cart, self.course_id) + cert_item = CertificateItem.add_to_order(self.cart, self.verified_course_id, self.cost, 'honor') + self.cart.purchase(first='FirstNameTesting123', street1='StreetTesting123') + + self.login_user() + + # When we come from the upgrade flow, we'll have a session variable showing that + s = self.client.session + s['attempting_upgrade'] = True + s.save() + + self.mock_server_track.reset_mock() + resp = self.client.get(reverse('shoppingcart.views.show_receipt', args=[self.cart.id])) + + # Once they've upgraded, they're no longer *attempting* to upgrade + attempting_upgrade = self.client.session.get('attempting_upgrade', False) + self.assertFalse(attempting_upgrade) + + self.assertEqual(resp.status_code, 200) + self.assertIn('FirstNameTesting123', resp.content) + self.assertIn('80.00', resp.content) + + + ((template, context), _) = render_mock.call_args + + # When we come from the upgrade flow, we get these context variables + + + self.assertEqual(template, 'shoppingcart/receipt.html') + self.assertEqual(context['order'], self.cart) + self.assertIn(reg_item, context['order_items']) + self.assertIn(cert_item, context['order_items']) + self.assertFalse(context['any_refunds']) + + course_enrollment = CourseEnrollment.get_or_create_enrollment(self.user, self.course_id) + course_enrollment.emit_event('edx.course.enrollment.upgrade.succeeded') + self.mock_server_track.assert_any_call( + None, + 'edx.course.enrollment.upgrade.succeeded', + { + 'user_id': course_enrollment.user.id, + 'course_id': course_enrollment.course_id, + 'mode': course_enrollment.mode + } + ) + self.mock_server_track.reset_mock() + @patch('shoppingcart.views.render_to_response', render_mock) def test_show_receipt_success_refund(self): reg_item = PaidCourseRegistration.add_to_order(self.cart, self.course_id) diff --git a/lms/djangoapps/shoppingcart/views.py b/lms/djangoapps/shoppingcart/views.py index 5145525085..22bccbf28c 100644 --- a/lms/djangoapps/shoppingcart/views.py +++ b/lms/djangoapps/shoppingcart/views.py @@ -102,7 +102,6 @@ def show_receipt(request, ordernum): Displays a receipt for a particular order. 404 if order is not yet purchased or request.user != order.user """ - try: order = Order.objects.get(id=ordernum) except Order.DoesNotExist: @@ -128,9 +127,10 @@ def show_receipt(request, ordernum): receipt_template = order_items[0].single_item_receipt_template context.update(order_items[0].single_item_receipt_context) + # Only orders where order_items.count() == 1 might be attempting to upgrade attempting_upgrade = request.session.get('attempting_upgrade', False) if attempting_upgrade: - course_enrollment = CourseEnrollment.get_or_create_enrollment(request.user, context['course_id']) + course_enrollment = CourseEnrollment.get_or_create_enrollment(request.user, order_items[0].course_id) course_enrollment.emit_event(EVENT_NAME_USER_UPGRADED) request.session['attempting_upgrade'] = False diff --git a/lms/templates/dashboard.html b/lms/templates/dashboard.html index de132187f7..d46b7b8be8 100644 --- a/lms/templates/dashboard.html +++ b/lms/templates/dashboard.html @@ -29,13 +29,11 @@ Logger.log('edx.course.enrollment.upgrade.clicked', [user, course], null); % if waffle.flag_is_active(request, 'alternate_upsell_copy'): analytics.track("Clicked on Alternate Upsell Copy", { - course: course, - user: user + course: course }); % else: analytics.track("Clicked on Regular Upsell Copy", { - course: course, - user: user + course: course }); % endif });