mattdrayer/course-mode-bulk-sku: Add new CourseMode field
* mattdrayer: Add bulk checkout link to course views * asadiqbal08: MAYN-225 replace the "Verify Now" button by the "Go to Dashboard" button in case of themed sites. * mattdrayer: Add bulk_sku check in courseware.views
This commit is contained in:
@@ -84,11 +84,13 @@ class BasketsViewTests(EnrollmentEventTestMixin, UserMixin, ModuleStoreTestCase)
|
||||
# TODO Verify this is the best method to create CourseMode objects.
|
||||
# TODO Find/create constants for the modes.
|
||||
for mode in [CourseMode.HONOR, CourseMode.VERIFIED, CourseMode.AUDIT]:
|
||||
sku_string = uuid4().hex.decode('ascii')
|
||||
CourseModeFactory.create(
|
||||
course_id=self.course.id,
|
||||
mode_slug=mode,
|
||||
mode_display_name=mode,
|
||||
sku=uuid4().hex.decode('ascii')
|
||||
sku=sku_string,
|
||||
bulk_sku='BULK-{}'.format(sku_string)
|
||||
)
|
||||
|
||||
# Ignore events fired from UserFactory creation
|
||||
@@ -268,8 +270,9 @@ class BasketsViewTests(EnrollmentEventTestMixin, UserMixin, ModuleStoreTestCase)
|
||||
|
||||
CourseMode.objects.filter(course_id=self.course.id).delete()
|
||||
mode = CourseMode.NO_ID_PROFESSIONAL_MODE
|
||||
sku_string = uuid4().hex.decode('ascii')
|
||||
CourseModeFactory.create(course_id=self.course.id, mode_slug=mode, mode_display_name=mode,
|
||||
sku=uuid4().hex.decode('ascii'))
|
||||
sku=sku_string, bulk_sku='BULK-{}'.format(sku_string))
|
||||
|
||||
with mock_create_basket(expect_called=False):
|
||||
response = self._post_to_view()
|
||||
|
||||
@@ -87,6 +87,7 @@ class Course(object):
|
||||
merged_mode.min_price = posted_mode.min_price
|
||||
merged_mode.currency = posted_mode.currency
|
||||
merged_mode.sku = posted_mode.sku
|
||||
merged_mode.bulk_sku = posted_mode.bulk_sku
|
||||
merged_mode.expiration_datetime = posted_mode.expiration_datetime
|
||||
merged_mode.save()
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ class CourseModeSerializer(serializers.ModelSerializer):
|
||||
|
||||
class Meta(object):
|
||||
model = CourseMode
|
||||
fields = ('name', 'currency', 'price', 'sku', 'expires')
|
||||
fields = ('name', 'currency', 'price', 'sku', 'bulk_sku', 'expires')
|
||||
|
||||
|
||||
def validate_course_id(course_id):
|
||||
|
||||
@@ -37,8 +37,14 @@ class CourseApiViewTestMixin(object):
|
||||
def setUp(self):
|
||||
super(CourseApiViewTestMixin, self).setUp()
|
||||
self.course = CourseFactory.create()
|
||||
self.course_mode = CourseMode.objects.create(course_id=self.course.id, mode_slug=u'verified', min_price=100,
|
||||
currency=u'USD', sku=u'ABC123')
|
||||
self.course_mode = CourseMode.objects.create(
|
||||
course_id=self.course.id,
|
||||
mode_slug=u'verified',
|
||||
min_price=100,
|
||||
currency=u'USD',
|
||||
sku=u'ABC123',
|
||||
bulk_sku=u'BULK-ABC123'
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def _serialize_datetime(cls, dt): # pylint: disable=invalid-name
|
||||
@@ -58,6 +64,7 @@ class CourseApiViewTestMixin(object):
|
||||
u'currency': course_mode.currency.lower(),
|
||||
u'price': course_mode.min_price,
|
||||
u'sku': course_mode.sku,
|
||||
u'bulk_sku': course_mode.bulk_sku,
|
||||
u'expires': cls._serialize_datetime(course_mode.expiration_datetime),
|
||||
}
|
||||
|
||||
@@ -147,6 +154,7 @@ class CourseRetrieveUpdateViewTests(CourseApiViewTestMixin, ModuleStoreTestCase)
|
||||
min_price=200,
|
||||
currency=u'USD',
|
||||
sku=u'ABC123',
|
||||
bulk_sku=u'BULK-ABC123',
|
||||
expiration_datetime=mode_expiration
|
||||
)
|
||||
expected = self._serialize_course(self.course, [expected_course_mode], verification_deadline)
|
||||
@@ -217,6 +225,7 @@ class CourseRetrieveUpdateViewTests(CourseApiViewTestMixin, ModuleStoreTestCase)
|
||||
min_price=200,
|
||||
currency=u'USD',
|
||||
sku=u'ABC123',
|
||||
bulk_sku=u'BULK-ABC123',
|
||||
expiration_datetime=None
|
||||
)
|
||||
updated_data = self._serialize_course(self.course, [verified_mode], None)
|
||||
@@ -251,7 +260,13 @@ class CourseRetrieveUpdateViewTests(CourseApiViewTestMixin, ModuleStoreTestCase)
|
||||
""" Verify that data submitted via PUT overwrites/deletes modes that are
|
||||
not included in the body of the request. """
|
||||
course_id = unicode(self.course.id)
|
||||
expected_course_mode = CourseMode(mode_slug=u'credit', min_price=500, currency=u'USD', sku=u'ABC123')
|
||||
expected_course_mode = CourseMode(
|
||||
mode_slug=u'credit',
|
||||
min_price=500,
|
||||
currency=u'USD',
|
||||
sku=u'ABC123',
|
||||
bulk_sku=u'BULK-ABC123'
|
||||
)
|
||||
expected = self._serialize_course(self.course, [expected_course_mode])
|
||||
path = reverse('commerce_api:v1:courses:retrieve_update', args=[course_id])
|
||||
response = self.client.put(path, json.dumps(expected), content_type=JSON_CONTENT_TYPE)
|
||||
@@ -276,6 +291,7 @@ class CourseRetrieveUpdateViewTests(CourseApiViewTestMixin, ModuleStoreTestCase)
|
||||
min_price=500,
|
||||
currency=u'USD',
|
||||
sku=u'ABC123',
|
||||
bulk_sku=u'BULK-ABC123',
|
||||
expiration_datetime=expiration_datetime
|
||||
)
|
||||
)
|
||||
@@ -290,8 +306,22 @@ class CourseRetrieveUpdateViewTests(CourseApiViewTestMixin, ModuleStoreTestCase)
|
||||
def assert_can_create_course(self, **request_kwargs):
|
||||
""" Verify a course can be created by the view. """
|
||||
course = CourseFactory.create()
|
||||
expected_modes = [CourseMode(mode_slug=u'verified', min_price=150, currency=u'USD', sku=u'ABC123'),
|
||||
CourseMode(mode_slug=u'honor', min_price=0, currency=u'USD', sku=u'DEADBEEF')]
|
||||
expected_modes = [
|
||||
CourseMode(
|
||||
mode_slug=u'verified',
|
||||
min_price=150,
|
||||
currency=u'USD',
|
||||
sku=u'ABC123',
|
||||
bulk_sku=u'BULK-ABC123'
|
||||
),
|
||||
CourseMode(
|
||||
mode_slug=u'honor',
|
||||
min_price=0,
|
||||
currency=u'USD',
|
||||
sku=u'DEADBEEF',
|
||||
bulk_sku=u'BULK-DEADBEEF'
|
||||
)
|
||||
]
|
||||
expected = self._serialize_course(course, expected_modes)
|
||||
path = reverse('commerce_api:v1:courses:retrieve_update', args=[unicode(course.id)])
|
||||
|
||||
@@ -331,7 +361,8 @@ class CourseRetrieveUpdateViewTests(CourseApiViewTestMixin, ModuleStoreTestCase)
|
||||
CourseMode(
|
||||
mode_slug=CourseMode.DEFAULT_MODE_SLUG,
|
||||
min_price=150, currency=u'USD',
|
||||
sku=u'ABC123'
|
||||
sku=u'ABC123',
|
||||
bulk_sku=u'BULK-ABC123'
|
||||
)
|
||||
]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user