Commit abeba3b2 by Matt Drayer Committed by Jonathan Piacenti

mattdrayer/api-users-courses-batch: Submit multiple content positions together

parent 29a82ecc
...@@ -790,31 +790,25 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -790,31 +790,25 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
position_data = { position_data = {
'position': { 'positions': [
'parent_content_id': unicode(course.id), {
'child_content_id': str(chapter3.location) 'parent_content_id': unicode(course.id),
} 'child_content_id': str(chapter3.location)
} },
response = self.do_post(test_uri, data=position_data) {
self.assertEqual(response.data['position'], unicode(chapter3.scope_ids.usage_id)) 'parent_content_id': unicode(chapter3.scope_ids.usage_id),
'child_content_id': str(sequential2.location)
position_data = { },
'position': { {
'parent_content_id': unicode(chapter3.scope_ids.usage_id), 'parent_content_id': unicode(sequential2.scope_ids.usage_id),
'child_content_id': str(sequential2.location) 'child_content_id': str(vertical3.location)
} }
]
} }
response = self.do_post(test_uri, data=position_data) response = self.do_post(test_uri, data=position_data)
self.assertEqual(response.data['position'], unicode(sequential2.scope_ids.usage_id)) self.assertEqual(response.data['positions'][0], unicode(chapter3.scope_ids.usage_id))
self.assertEqual(response.data['positions'][1], unicode(sequential2.scope_ids.usage_id))
position_data = { self.assertEqual(response.data['positions'][2], unicode(vertical3.scope_ids.usage_id))
'position': {
'parent_content_id': unicode(sequential2.scope_ids.usage_id),
'child_content_id': str(vertical3.location)
}
}
response = self.do_post(test_uri, data=position_data)
self.assertEqual(response.data['position'], unicode(vertical3.scope_ids.usage_id))
response = self.do_get(response.data['uri']) response = self.do_get(response.data['uri'])
self.assertEqual(response.data['position_tree']['chapter']['id'], unicode(chapter3.scope_ids.usage_id)) self.assertEqual(response.data['position_tree']['chapter']['id'], unicode(chapter3.scope_ids.usage_id))
...@@ -839,11 +833,13 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -839,11 +833,13 @@ class UsersApiTests(ModuleStoreTestCase):
course_id = 'asd/fa/9sd8fasdf' course_id = 'asd/fa/9sd8fasdf'
test_uri = '{}/{}/courses/{}'.format(self.users_base_uri, user_id, course_id) test_uri = '{}/{}/courses/{}'.format(self.users_base_uri, user_id, course_id)
position_data = { position_data = {
'position': { 'positions': [
'parent_content_id': course_id, {
'child_content_id': str(chapter1.location) 'parent_content_id': course_id,
'child_content_id': str(chapter1.location)
} }
]
} }
response = self.do_post(test_uri, data=position_data) response = self.do_post(test_uri, data=position_data)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
...@@ -869,14 +865,16 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -869,14 +865,16 @@ class UsersApiTests(ModuleStoreTestCase):
test_uri = test_uri + '/' + str(course.id) test_uri = test_uri + '/' + str(course.id)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
position_data = { position_data = {
'position': { 'positions': [
'parent_content_id': str(course.location), {
'child_content_id': str(chapter1.location) 'parent_content_id': str(course.location),
'child_content_id': str(chapter1.location)
} }
]
} }
response = self.do_post(test_uri, data=position_data) response = self.do_post(test_uri, data=position_data)
self.assertEqual(response.data['position'], unicode(chapter1.scope_ids.usage_id)) self.assertEqual(response.data['positions'][0], unicode(chapter1.scope_ids.usage_id))
def test_user_courses_detail_post_position_invalid_course(self): def test_user_courses_detail_post_position_invalid_course(self):
test_uri = '{}/{}/courses'.format(self.users_base_uri, self.user.id) test_uri = '{}/{}/courses'.format(self.users_base_uri, self.user.id)
...@@ -885,10 +883,12 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -885,10 +883,12 @@ class UsersApiTests(ModuleStoreTestCase):
test_uri = test_uri + '/' + unicode(self.course.id) test_uri = test_uri + '/' + unicode(self.course.id)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
position_data = { position_data = {
'position': { 'positions': [
'parent_content_id': self.test_bogus_course_id, {
'child_content_id': self.test_bogus_content_id 'parent_content_id': self.test_bogus_course_id,
} 'child_content_id': self.test_bogus_content_id
}
]
} }
response = self.do_post(test_uri, data=position_data) response = self.do_post(test_uri, data=position_data)
self.assertEqual(response.status_code, 400) self.assertEqual(response.status_code, 400)
...@@ -920,14 +920,16 @@ class UsersApiTests(ModuleStoreTestCase): ...@@ -920,14 +920,16 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.data['course_id'], unicode(course.id)) self.assertEqual(response.data['course_id'], unicode(course.id))
self.assertEqual(response.data['user_id'], user_id) self.assertEqual(response.data['user_id'], user_id)
position_data = { position_data = {
'position': { 'positions': [
'parent_content_id': unicode(course.id), {
'child_content_id': unicode(chapter1.scope_ids.usage_id) 'parent_content_id': unicode(course.id),
'child_content_id': unicode(chapter1.scope_ids.usage_id)
} }
]
} }
response = self.do_post(confirm_uri, data=position_data) response = self.do_post(confirm_uri, data=position_data)
self.assertEqual(response.data['position'], unicode(chapter1.scope_ids.usage_id)) self.assertEqual(response.data['positions'][0], unicode(chapter1.scope_ids.usage_id))
response = self.do_get(confirm_uri) response = self.do_get(confirm_uri)
self.assertGreater(response.data['position'], 0) # Position in the GET response is an integer! self.assertGreater(response.data['position'], 0) # Position in the GET response is an integer!
self.assertEqual(response.data['position_tree']['chapter']['id'], unicode(chapter1.scope_ids.usage_id)) self.assertEqual(response.data['position_tree']['chapter']['id'], unicode(chapter1.scope_ids.usage_id))
......
...@@ -808,17 +808,19 @@ class UsersCoursesDetail(SecureAPIView): ...@@ -808,17 +808,19 @@ class UsersCoursesDetail(SecureAPIView):
return Response({}, status=status.HTTP_404_NOT_FOUND) return Response({}, status=status.HTTP_404_NOT_FOUND)
response_data['user_id'] = user.id response_data['user_id'] = user.id
response_data['course_id'] = course_id response_data['course_id'] = course_id
if request.DATA['position']:
content_position = _save_content_position(
request,
user,
course_key,
request.DATA['position']
)
if not content_position:
return Response(response_data, status=status.HTTP_400_BAD_REQUEST)
response_data['position'] = content_position
if request.DATA['positions']:
response_data['positions'] = []
for position in request.DATA['positions']:
content_position = _save_content_position(
request,
user,
course_key,
position
)
if not content_position:
return Response(response_data, status=status.HTTP_400_BAD_REQUEST)
response_data['positions'].append(content_position)
return Response(response_data, status=status.HTTP_200_OK) return Response(response_data, status=status.HTTP_200_OK)
def get(self, request, user_id, course_id): def get(self, request, user_id, course_id):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment