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):
self.assertEqual(response.status_code, 201)
position_data = {
'position': {
'positions': [
{
'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))
position_data = {
'position': {
},
{
'parent_content_id': unicode(chapter3.scope_ids.usage_id),
'child_content_id': str(sequential2.location)
}
}
response = self.do_post(test_uri, data=position_data)
self.assertEqual(response.data['position'], unicode(sequential2.scope_ids.usage_id))
position_data = {
'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))
self.assertEqual(response.data['positions'][0], unicode(chapter3.scope_ids.usage_id))
self.assertEqual(response.data['positions'][1], unicode(sequential2.scope_ids.usage_id))
self.assertEqual(response.data['positions'][2], unicode(vertical3.scope_ids.usage_id))
response = self.do_get(response.data['uri'])
self.assertEqual(response.data['position_tree']['chapter']['id'], unicode(chapter3.scope_ids.usage_id))
......@@ -839,11 +833,13 @@ class UsersApiTests(ModuleStoreTestCase):
course_id = 'asd/fa/9sd8fasdf'
test_uri = '{}/{}/courses/{}'.format(self.users_base_uri, user_id, course_id)
position_data = {
'position': {
'positions': [
{
'parent_content_id': course_id,
'child_content_id': str(chapter1.location)
}
]
}
response = self.do_post(test_uri, data=position_data)
self.assertEqual(response.status_code, 404)
......@@ -869,14 +865,16 @@ class UsersApiTests(ModuleStoreTestCase):
test_uri = test_uri + '/' + str(course.id)
self.assertEqual(response.status_code, 201)
position_data = {
'position': {
'positions': [
{
'parent_content_id': str(course.location),
'child_content_id': str(chapter1.location)
}
]
}
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):
test_uri = '{}/{}/courses'.format(self.users_base_uri, self.user.id)
......@@ -885,10 +883,12 @@ class UsersApiTests(ModuleStoreTestCase):
test_uri = test_uri + '/' + unicode(self.course.id)
self.assertEqual(response.status_code, 201)
position_data = {
'position': {
'positions': [
{
'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)
self.assertEqual(response.status_code, 400)
......@@ -920,14 +920,16 @@ class UsersApiTests(ModuleStoreTestCase):
self.assertEqual(response.data['course_id'], unicode(course.id))
self.assertEqual(response.data['user_id'], user_id)
position_data = {
'position': {
'positions': [
{
'parent_content_id': unicode(course.id),
'child_content_id': unicode(chapter1.scope_ids.usage_id)
}
]
}
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)
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))
......
......@@ -808,17 +808,19 @@ class UsersCoursesDetail(SecureAPIView):
return Response({}, status=status.HTTP_404_NOT_FOUND)
response_data['user_id'] = user.id
response_data['course_id'] = course_id
if request.DATA['position']:
if request.DATA['positions']:
response_data['positions'] = []
for position in request.DATA['positions']:
content_position = _save_content_position(
request,
user,
course_key,
request.DATA['position']
position
)
if not content_position:
return Response(response_data, status=status.HTTP_400_BAD_REQUEST)
response_data['position'] = content_position
response_data['positions'].append(content_position)
return Response(response_data, status=status.HTTP_200_OK)
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