From 98ba4b779c1edd443e868f186c19294590f7a07f Mon Sep 17 00:00:00 2001 From: wajeeha-khalid Date: Fri, 15 Jul 2016 16:16:04 +0500 Subject: [PATCH] MA-2076: add due date to course block API --- .../course_api/blocks/tests/test_views.py | 13 ++++++++++--- .../course_api/blocks/transformers/__init__.py | 1 + .../course_api/blocks/transformers/blocks_api.py | 2 +- lms/djangoapps/course_api/blocks/views.py | 4 +++- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/lms/djangoapps/course_api/blocks/tests/test_views.py b/lms/djangoapps/course_api/blocks/tests/test_views.py index 19d8c05727..f8d2e2bf16 100644 --- a/lms/djangoapps/course_api/blocks/tests/test_views.py +++ b/lms/djangoapps/course_api/blocks/tests/test_views.py @@ -1,6 +1,7 @@ """ Tests for Blocks Views """ +from datetime import datetime from django.core.urlresolvers import reverse from string import join @@ -20,7 +21,7 @@ class TestBlocksView(SharedModuleStoreTestCase): """ Test class for BlocksView """ - requested_fields = ['graded', 'format', 'student_view_multi_device', 'children', 'not_a_field'] + requested_fields = ['graded', 'format', 'student_view_multi_device', 'children', 'not_a_field', 'due'] BLOCK_TYPES_WITH_STUDENT_VIEW_DATA = ['video', 'discussion'] @classmethod @@ -28,8 +29,13 @@ class TestBlocksView(SharedModuleStoreTestCase): super(TestBlocksView, cls).setUpClass() # create a toy course - cls.course_key = ToyCourseFactory.create().id + cls.course = ToyCourseFactory.create( + modulestore=cls.store, + due=datetime(3013, 9, 18, 11, 30, 00), + ) + cls.course_key = cls.course.id cls.course_usage_key = cls.store.make_course_usage_key(cls.course_key) + cls.non_orphaned_block_usage_keys = set( unicode(item.location) for item in cls.store.get_items(cls.course_key) @@ -40,7 +46,7 @@ class TestBlocksView(SharedModuleStoreTestCase): def setUp(self): super(TestBlocksView, self).setUp() - # create a user, enrolled in the toy course + # create and enroll user in the toy course self.user = UserFactory.create() self.client.login(username=self.user.username, password='test') CourseEnrollmentFactory.create(user=self.user, course_id=self.course_key) @@ -103,6 +109,7 @@ class TestBlocksView(SharedModuleStoreTestCase): self.assert_in_iff('children', block_data, xblock.has_children) self.assert_in_iff('graded', block_data, xblock.graded is not None) self.assert_in_iff('format', block_data, xblock.format is not None) + self.assert_in_iff('due', block_data, xblock.due is not None) self.assert_true_iff(block_data['student_view_multi_device'], block_data['type'] == 'html') self.assertNotIn('not_a_field', block_data) diff --git a/lms/djangoapps/course_api/blocks/transformers/__init__.py b/lms/djangoapps/course_api/blocks/transformers/__init__.py index c4f28bc791..7e0408ed12 100644 --- a/lms/djangoapps/course_api/blocks/transformers/__init__.py +++ b/lms/djangoapps/course_api/blocks/transformers/__init__.py @@ -38,6 +38,7 @@ SUPPORTED_FIELDS = [ SupportedFieldType('display_name', default_value=''), SupportedFieldType('graded'), SupportedFieldType('format'), + SupportedFieldType('due'), # 'student_view_data' SupportedFieldType(StudentViewTransformer.STUDENT_VIEW_DATA, StudentViewTransformer), # 'student_view_multi_device' diff --git a/lms/djangoapps/course_api/blocks/transformers/blocks_api.py b/lms/djangoapps/course_api/blocks/transformers/blocks_api.py index 799c3618c1..f70b147898 100644 --- a/lms/djangoapps/course_api/blocks/transformers/blocks_api.py +++ b/lms/djangoapps/course_api/blocks/transformers/blocks_api.py @@ -43,7 +43,7 @@ class BlocksAPITransformer(BlockStructureTransformer): transform method. """ # collect basic xblock fields - block_structure.request_xblock_fields('graded', 'format', 'display_name', 'category') + block_structure.request_xblock_fields('graded', 'format', 'display_name', 'category', 'due') # collect data from containing transformers StudentViewTransformer.collect(block_structure) diff --git a/lms/djangoapps/course_api/blocks/views.py b/lms/djangoapps/course_api/blocks/views.py index e8572322aa..60cb122bba 100644 --- a/lms/djangoapps/course_api/blocks/views.py +++ b/lms/djangoapps/course_api/blocks/views.py @@ -30,7 +30,7 @@ class BlocksView(DeveloperErrorViewMixin, ListAPIView): GET /api/courses/v1/blocks//? username=anjali &depth=all - &requested_fields=graded,format,student_view_multi_device,lti_url + &requested_fields=graded,format,student_view_multi_device,lti_url,due &block_counts=video &student_view_data=video &block_types_filter=problem,html @@ -170,6 +170,8 @@ class BlocksView(DeveloperErrorViewMixin, ListAPIView): * lti_url: The block URL for an LTI consumer. Returned only if the "ENABLE_LTI_PROVIDER" Django settign is set to "True". + * due: The due date of the block. Returned only if "due" is included + in the "requested_fields" parameter. """ def list(self, request, usage_key_string): # pylint: disable=arguments-differ