Commit 489a3ee7 by Chris Dodge

add a GET endpoint to /api/groups/{groupid}/courses to get the list of courses…

add a GET endpoint to /api/groups/{groupid}/courses to get the list of courses associated with the group (program)
parent e1e473bb
...@@ -328,28 +328,37 @@ def group_groups_detail(request, group_id, related_group_id): ...@@ -328,28 +328,37 @@ def group_groups_detail(request, group_id, related_group_id):
return Response({}, status=response_status) return Response({}, status=response_status)
@api_view(['POST']) @api_view(['GET', 'POST'])
@permission_classes((ApiKeyHeaderPermission,)) @permission_classes((ApiKeyHeaderPermission,))
def group_courses_list(request, group_id): def group_courses_list(request, group_id):
""" """
GET returns all courses that has a relationship to the group
POST creates a new group-course relationship in the system POST creates a new group-course relationship in the system
""" """
response_data = {} response_data = {}
group_id = group_id
course_id = request.DATA['course_id']
base_uri = _generate_base_uri(request)
response_data['uri'] = '{}/{}'.format(base_uri, course_id)
store = modulestore()
try: try:
existing_group = Group.objects.get(id=group_id) existing_group = Group.objects.get(id=group_id)
except ObjectDoesNotExist: except ObjectDoesNotExist:
existing_group = None return Response({}, status.HTTP_404_NOT_FOUND)
try:
if request.method == 'GET':
members = CourseGroupRelationship.objects.filter(group=existing_group)
response_data['courses'] = []
for member in members:
response_data['courses'].append(member.course_id)
response_status = status.HTTP_200_OK
else:
course_id = request.DATA['course_id']
base_uri = _generate_base_uri(request)
response_data['uri'] = '{}/{}'.format(base_uri, course_id)
store = modulestore()
existing_course = store.get_course(course_id) existing_course = store.get_course(course_id)
except ValueError: if not existing_course:
existing_course = None return Response({}, status.HTTP_404_NOT_FOUND)
if existing_group and existing_course:
try: try:
existing_relationship = CourseGroupRelationship.objects.get(course_id=course_id, group=existing_group) existing_relationship = CourseGroupRelationship.objects.get(course_id=course_id, group=existing_group)
except ObjectDoesNotExist: except ObjectDoesNotExist:
...@@ -363,8 +372,7 @@ def group_courses_list(request, group_id): ...@@ -363,8 +372,7 @@ def group_courses_list(request, group_id):
else: else:
response_data['message'] = "Relationship already exists." response_data['message'] = "Relationship already exists."
response_status = status.HTTP_409_CONFLICT response_status = status.HTTP_409_CONFLICT
else:
response_status = status.HTTP_404_NOT_FOUND
return Response(response_data, status=response_status) return Response(response_data, status=response_status)
......
...@@ -570,6 +570,12 @@ class GroupsApiTests(TestCase): ...@@ -570,6 +570,12 @@ class GroupsApiTests(TestCase):
self.assertEqual(response.data['group_id'], str(group_id)) self.assertEqual(response.data['group_id'], str(group_id))
self.assertEqual(response.data['course_id'], self.test_course_id) self.assertEqual(response.data['course_id'], self.test_course_id)
# then re-query to check membership
response = self.do_get(test_uri)
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data['courses']), 1)
self.assertEqual(response.data['courses'][0], self.test_course_id)
def test_group_courses_list_post_duplicate(self): def test_group_courses_list_post_duplicate(self):
data = {'name': self.test_group_name} data = {'name': self.test_group_name}
response = self.do_post(self.base_groups_uri, data) response = self.do_post(self.base_groups_uri, data)
......
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