101 lines
3.7 KiB
Python
101 lines
3.7 KiB
Python
import ddt
|
|
import unittest
|
|
from django.test import TestCase
|
|
from django.conf import settings
|
|
from django.core.urlresolvers import reverse
|
|
from mock import patch, Mock
|
|
|
|
from course_modes.tests.factories import CourseModeFactory
|
|
from student.tests.factories import CourseEnrollmentFactory, UserFactory
|
|
from opaque_keys.edx.locations import SlashSeparatedCourseKey
|
|
|
|
|
|
@ddt.ddt
|
|
class CourseModeViewTest(TestCase):
|
|
|
|
def setUp(self):
|
|
self.course_id = SlashSeparatedCourseKey('org', 'course', 'run')
|
|
|
|
for mode in ('audit', 'verified', 'honor'):
|
|
CourseModeFactory(mode_slug=mode, course_id=self.course_id)
|
|
|
|
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
|
|
@ddt.data(
|
|
# is_active?, enrollment_mode, upgrade?, redirect?
|
|
(True, 'verified', True, True), # User is already verified
|
|
(True, 'verified', False, True), # User is already verified
|
|
(True, 'honor', True, False), # User isn't trying to upgrade
|
|
(True, 'honor', False, True), # User is trying to upgrade
|
|
(True, 'audit', True, False), # User isn't trying to upgrade
|
|
(True, 'audit', False, True), # User is trying to upgrade
|
|
(False, 'verified', True, False), # User isn't active
|
|
(False, 'verified', False, False), # User isn't active
|
|
(False, 'honor', True, False), # User isn't active
|
|
(False, 'honor', False, False), # User isn't active
|
|
(False, 'audit', True, False), # User isn't active
|
|
(False, 'audit', False, False), # User isn't active
|
|
)
|
|
@ddt.unpack
|
|
@patch('course_modes.views.modulestore', Mock())
|
|
def test_reregister_redirect(self, is_active, enrollment_mode, upgrade, redirect):
|
|
enrollment = CourseEnrollmentFactory(
|
|
is_active=is_active,
|
|
mode=enrollment_mode,
|
|
course_id=self.course_id
|
|
)
|
|
|
|
self.client.login(
|
|
username=enrollment.user.username,
|
|
password='test'
|
|
)
|
|
|
|
if upgrade:
|
|
get_params = {'upgrade': True}
|
|
else:
|
|
get_params = {}
|
|
|
|
response = self.client.get(
|
|
reverse('course_modes_choose', args=[self.course_id.to_deprecated_string()]),
|
|
get_params,
|
|
follow=False,
|
|
)
|
|
|
|
if redirect:
|
|
self.assertEquals(response.status_code, 302)
|
|
self.assertTrue(response['Location'].endswith(reverse('dashboard')))
|
|
else:
|
|
self.assertEquals(response.status_code, 200)
|
|
# TODO: Fix it so that response.templates works w/ mako templates, and then assert
|
|
# that the right template rendered
|
|
|
|
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
|
|
@ddt.data(
|
|
'',
|
|
'1,,2',
|
|
'1, ,2',
|
|
'1, 2, 3'
|
|
)
|
|
@patch('course_modes.views.modulestore', Mock())
|
|
def test_suggested_prices(self, price_list):
|
|
course_id = SlashSeparatedCourseKey('org', 'course', 'price_course')
|
|
user = UserFactory()
|
|
|
|
for mode in ('audit', 'honor'):
|
|
CourseModeFactory(mode_slug=mode, course_id=course_id)
|
|
|
|
CourseModeFactory(mode_slug='verified', course_id=course_id, suggested_prices=price_list)
|
|
|
|
self.client.login(
|
|
username=user.username,
|
|
password='test'
|
|
)
|
|
|
|
response = self.client.get(
|
|
reverse('course_modes_choose', args=[self.course_id.to_deprecated_string()]),
|
|
follow=False,
|
|
)
|
|
|
|
self.assertEquals(response.status_code, 200)
|
|
# TODO: Fix it so that response.templates works w/ mako templates, and then assert
|
|
# that the right template rendered
|