From abe330ccf08e6ad951f289b5b79c94e0c6109e19 Mon Sep 17 00:00:00 2001 From: Michael Frey Date: Fri, 4 Mar 2016 13:58:12 -0500 Subject: [PATCH] Redirect to otto checkout for prof ed courses if enabled --- .../course_modes/tests/test_views.py | 20 +++++++++++++++++++ common/djangoapps/course_modes/views.py | 20 +++++++++---------- lms/djangoapps/commerce/tests/test_utils.py | 13 ++++++++---- 3 files changed, 39 insertions(+), 14 deletions(-) diff --git a/common/djangoapps/course_modes/tests/test_views.py b/common/djangoapps/course_modes/tests/test_views.py index 23f1f5dcc8..da8d1b995d 100644 --- a/common/djangoapps/course_modes/tests/test_views.py +++ b/common/djangoapps/course_modes/tests/test_views.py @@ -13,6 +13,7 @@ from xmodule.modulestore.tests.factories import CourseFactory from course_modes.tests.factories import CourseModeFactory from student.tests.factories import CourseEnrollmentFactory, UserFactory from student.models import CourseEnrollment +import lms.djangoapps.commerce.tests.test_utils as ecomm_test_utils from course_modes.models import CourseMode, Mode from openedx.core.djangoapps.theming.test_util import with_is_edx_domain @@ -82,6 +83,25 @@ class CourseModeViewTest(UrlResetMixin, ModuleStoreTestCase): start_flow_url = reverse('verify_student_start_flow', args=[unicode(self.course.id)]) self.assertRedirects(response, start_flow_url) + def test_no_id_redirect_otto(self): + # Create the course modes + prof_course = CourseFactory.create() + CourseModeFactory(mode_slug=CourseMode.NO_ID_PROFESSIONAL_MODE, course_id=prof_course.id, + min_price=100, sku='TEST') + ecomm_test_utils.update_commerce_config(enabled=True) + # Enroll the user in the test course + CourseEnrollmentFactory( + is_active=False, + mode=CourseMode.NO_ID_PROFESSIONAL_MODE, + course_id=prof_course.id, + user=self.user + ) + # Configure whether we're upgrading or not + url = reverse('course_modes_choose', args=[unicode(prof_course.id)]) + response = self.client.get(url) + self.assertRedirects(response, 'http://testserver/test_basket/?sku=TEST', fetch_redirect_response=False) + ecomm_test_utils.update_commerce_config(enabled=False) + def test_no_enrollment(self): # Create the course modes for mode in ('audit', 'honor', 'verified'): diff --git a/common/djangoapps/course_modes/views.py b/common/djangoapps/course_modes/views.py index d40bb7d41c..ae009d52a6 100644 --- a/common/djangoapps/course_modes/views.py +++ b/common/djangoapps/course_modes/views.py @@ -80,18 +80,19 @@ class ChooseModeView(View): enrollment_mode, is_active = CourseEnrollment.enrollment_mode_for_user(request.user, course_key) modes = CourseMode.modes_for_course_dict(course_key) + ecommerce_service = EcommerceService() - # We assume that, if 'professional' is one of the modes, it is the *only* mode. - # If we offer more modes alongside 'professional' in the future, this will need to route - # to the usual "choose your track" page same is true for no-id-professional mode. + # We assume that, if 'professional' is one of the modes, it should be the *only* mode. + # If there are both modes, default to non-id-professional. has_enrolled_professional = (CourseMode.is_professional_slug(enrollment_mode) and is_active) if CourseMode.has_professional_mode(modes) and not has_enrolled_professional: - return redirect( - reverse( - 'verify_student_start_flow', - kwargs={'course_id': unicode(course_key)} - ) - ) + redirect_url = reverse('verify_student_start_flow', kwargs={'course_id': unicode(course_key)}) + if ecommerce_service.is_enabled(request): + professional_mode = modes.get(CourseMode.NO_ID_PROFESSIONAL_MODE) or modes.get(CourseMode.PROFESSIONAL) + if professional_mode.sku: + redirect_url = ecommerce_service.checkout_page_url(professional_mode.sku) + + return redirect(redirect_url) # If there isn't a verified mode available, then there's nothing # to do on this page. The user has almost certainly been auto-registered @@ -150,7 +151,6 @@ class ChooseModeView(View): context["verified_description"] = verified_mode.description if verified_mode.sku: - ecommerce_service = EcommerceService() context["use_ecommerce_payment_flow"] = ecommerce_service.is_enabled(request) context["ecommerce_payment_page"] = ecommerce_service.payment_page_url() context["sku"] = verified_mode.sku diff --git a/lms/djangoapps/commerce/tests/test_utils.py b/lms/djangoapps/commerce/tests/test_utils.py index 8f343014c6..2e631f46e4 100644 --- a/lms/djangoapps/commerce/tests/test_utils.py +++ b/lms/djangoapps/commerce/tests/test_utils.py @@ -9,6 +9,14 @@ from django.test.client import RequestFactory from student.tests.factories import UserFactory +def update_commerce_config(enabled=False, checkout_page='/test_basket/'): + """ Enable / Disable CommerceConfiguration model """ + CommerceConfiguration.objects.create( + checkout_on_ecommerce_service=enabled, + single_course_checkout_page=checkout_page + ) + + class AuditLogTests(TestCase): """Tests of the commerce audit logging helper.""" @patch('commerce.utils.log') @@ -31,10 +39,7 @@ class EcommerceServiceTests(TestCase): self.user = UserFactory.create() self.request = self.request_factory.get("foo") self.request.user = self.user - CommerceConfiguration.objects.create( - checkout_on_ecommerce_service=True, - single_course_checkout_page='/test_basket/' - ) + update_commerce_config(enabled=True) super(EcommerceServiceTests, self).setUp() def test_is_enabled(self):