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:
Matt Drayer
2016-04-29 15:24:40 -04:00
parent e57777d3fb
commit a9b7e4c63d
21 changed files with 154 additions and 44 deletions

View File

@@ -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()

View File

@@ -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()

View File

@@ -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):

View File

@@ -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'
)
]