Commit 59970d3f by Matt Drayer Committed by Jonathan Piacenti

mattdrayer/api-workgroup-content-id: Added content_id field

parent 5878b1fc
...@@ -106,3 +106,4 @@ class WorkgroupPeerReview(TimeStampedModel): ...@@ -106,3 +106,4 @@ class WorkgroupPeerReview(TimeStampedModel):
reviewer = models.CharField(max_length=255) # AnonymousUserId reviewer = models.CharField(max_length=255) # AnonymousUserId
question = models.CharField(max_length=255) question = models.CharField(max_length=255)
answer = models.CharField(max_length=255) answer = models.CharField(max_length=255)
content_id = models.CharField(max_length=255, null=True, blank=True)
...@@ -137,7 +137,7 @@ class WorkgroupPeerReviewSerializer(serializers.HyperlinkedModelSerializer): ...@@ -137,7 +137,7 @@ class WorkgroupPeerReviewSerializer(serializers.HyperlinkedModelSerializer):
model = WorkgroupPeerReview model = WorkgroupPeerReview
fields = ( fields = (
'id', 'url', 'created', 'modified', 'question', 'answer', 'id', 'url', 'created', 'modified', 'question', 'answer',
'workgroup', 'user', 'reviewer' 'workgroup', 'user', 'reviewer', 'content_id'
) )
......
...@@ -6,6 +6,7 @@ Run these tests @ Devstack: ...@@ -6,6 +6,7 @@ Run these tests @ Devstack:
""" """
import json import json
import uuid import uuid
from urllib import urlencode
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.cache import cache from django.core.cache import cache
...@@ -54,7 +55,7 @@ class PeerReviewsApiTests(ModuleStoreTestCase): ...@@ -54,7 +55,7 @@ class PeerReviewsApiTests(ModuleStoreTestCase):
self.test_course_id = unicode(self.course.id) self.test_course_id = unicode(self.course.id)
self.test_bogus_course_id = 'foo/bar/baz' self.test_bogus_course_id = 'foo/bar/baz'
self.test_course_content_id = "i4x://blah" self.test_course_content_id = unicode(self.chapter.scope_ids.usage_id)
self.test_bogus_course_content_id = "14x://foo/bar/baz" self.test_bogus_course_content_id = "14x://foo/bar/baz"
self.test_question = "Does the question data come from the XBlock definition?" self.test_question = "Does the question data come from the XBlock definition?"
...@@ -124,6 +125,7 @@ class PeerReviewsApiTests(ModuleStoreTestCase): ...@@ -124,6 +125,7 @@ class PeerReviewsApiTests(ModuleStoreTestCase):
'reviewer': self.anonymous_user_id, 'reviewer': self.anonymous_user_id,
'question': self.test_question, 'question': self.test_question,
'answer': self.test_answer, 'answer': self.test_answer,
'content_id': self.test_course_content_id
} }
response = self.do_post(self.test_peer_reviews_uri, data) response = self.do_post(self.test_peer_reviews_uri, data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
...@@ -140,6 +142,7 @@ class PeerReviewsApiTests(ModuleStoreTestCase): ...@@ -140,6 +142,7 @@ class PeerReviewsApiTests(ModuleStoreTestCase):
self.assertEqual(response.data['question'], self.test_question) self.assertEqual(response.data['question'], self.test_question)
self.assertEqual(response.data['answer'], self.test_answer) self.assertEqual(response.data['answer'], self.test_answer)
self.assertEqual(response.data['workgroup'], self.test_workgroup.id) self.assertEqual(response.data['workgroup'], self.test_workgroup.id)
self.assertEqual(response.data['content_id'], self.test_course_content_id)
self.assertIsNotNone(response.data['created']) self.assertIsNotNone(response.data['created'])
self.assertIsNotNone(response.data['modified']) self.assertIsNotNone(response.data['modified'])
...@@ -153,6 +156,32 @@ class PeerReviewsApiTests(ModuleStoreTestCase): ...@@ -153,6 +156,32 @@ class PeerReviewsApiTests(ModuleStoreTestCase):
response = self.do_post(self.test_peer_reviews_uri, data) response = self.do_post(self.test_peer_reviews_uri, data)
self.assertEqual(response.status_code, 400) self.assertEqual(response.status_code, 400)
def test_peer_reviews_list_get(self):
data = {
'workgroup': self.test_workgroup.id,
'user': self.test_peer_user.id,
'reviewer': self.anonymous_user_id,
'question': self.test_question,
'answer': self.test_answer,
'content_id': self.test_course_content_id
}
response = self.do_post(self.test_peer_reviews_uri, data)
self.assertEqual(response.status_code, 201)
data = {
'workgroup': self.test_workgroup.id,
'user': self.test_peer_user.id,
'reviewer': self.anonymous_user_id,
'question': self.test_question,
'answer': self.test_answer,
'content_id': self.test_course_content_id
}
response = self.do_post(self.test_peer_reviews_uri, data)
self.assertEqual(response.status_code, 201)
response = self.do_get(self.test_peer_reviews_uri)
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data), 2)
def test_peer_reviews_detail_get(self): def test_peer_reviews_detail_get(self):
data = { data = {
'workgroup': self.test_workgroup.id, 'workgroup': self.test_workgroup.id,
...@@ -160,6 +189,7 @@ class PeerReviewsApiTests(ModuleStoreTestCase): ...@@ -160,6 +189,7 @@ class PeerReviewsApiTests(ModuleStoreTestCase):
'reviewer': self.anonymous_user_id, 'reviewer': self.anonymous_user_id,
'question': self.test_question, 'question': self.test_question,
'answer': self.test_answer, 'answer': self.test_answer,
'content_id': self.test_course_content_id,
} }
response = self.do_post(self.test_peer_reviews_uri, data) response = self.do_post(self.test_peer_reviews_uri, data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
...@@ -173,10 +203,12 @@ class PeerReviewsApiTests(ModuleStoreTestCase): ...@@ -173,10 +203,12 @@ class PeerReviewsApiTests(ModuleStoreTestCase):
) )
self.assertEqual(response.data['url'], confirm_uri) self.assertEqual(response.data['url'], confirm_uri)
self.assertGreater(response.data['id'], 0) self.assertGreater(response.data['id'], 0)
self.assertEqual(response.data['workgroup'], self.test_workgroup.id)
self.assertEqual(response.data['user'], self.test_peer_user.id) self.assertEqual(response.data['user'], self.test_peer_user.id)
self.assertEqual(response.data['reviewer'], self.anonymous_user_id) self.assertEqual(response.data['reviewer'], self.anonymous_user_id)
self.assertEqual(response.data['question'], self.test_question) self.assertEqual(response.data['question'], self.test_question)
self.assertEqual(response.data['answer'], self.test_answer) self.assertEqual(response.data['answer'], self.test_answer)
self.assertEqual(response.data['content_id'], self.test_course_content_id)
self.assertIsNotNone(response.data['created']) self.assertIsNotNone(response.data['created'])
self.assertIsNotNone(response.data['modified']) self.assertIsNotNone(response.data['modified'])
......
...@@ -6,6 +6,7 @@ Run these tests @ Devstack: ...@@ -6,6 +6,7 @@ Run these tests @ Devstack:
""" """
import json import json
import uuid import uuid
from urllib import urlencode
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.cache import cache from django.core.cache import cache
...@@ -54,9 +55,8 @@ class SubmissionReviewsApiTests(ModuleStoreTestCase): ...@@ -54,9 +55,8 @@ class SubmissionReviewsApiTests(ModuleStoreTestCase):
self.test_course_id = unicode(self.course.id) self.test_course_id = unicode(self.course.id)
self.test_bogus_course_id = 'foo/bar/baz' self.test_bogus_course_id = 'foo/bar/baz'
self.test_course_content_id = "i4x://blah" self.test_course_content_id = unicode(self.chapter.scope_ids.usage_id)
self.test_bogus_course_content_id = "14x://foo/bar/baz" self.test_bogus_course_content_id = "14x://foo/bar/baz"
self.test_question = "Does the question data come from the XBlock definition?" self.test_question = "Does the question data come from the XBlock definition?"
self.test_answer = "It sure does! And so does the answer data!" self.test_answer = "It sure does! And so does the answer data!"
...@@ -145,6 +145,30 @@ class SubmissionReviewsApiTests(ModuleStoreTestCase): ...@@ -145,6 +145,30 @@ class SubmissionReviewsApiTests(ModuleStoreTestCase):
self.assertIsNotNone(response.data['created']) self.assertIsNotNone(response.data['created'])
self.assertIsNotNone(response.data['modified']) self.assertIsNotNone(response.data['modified'])
def test_submission_reviews_list_get(self):
data = {
'submission': self.test_submission.id,
'reviewer': self.anonymous_user_id,
'question': self.test_question,
'answer': self.test_answer,
'content_id': self.test_course_content_id,
}
response = self.do_post(self.test_submission_reviews_uri, data)
self.assertEqual(response.status_code, 201)
data = {
'submission': self.test_submission.id,
'reviewer': self.anonymous_user_id,
'question': self.test_question,
'answer': self.test_answer,
'content_id': self.test_course_content_id,
}
response = self.do_post(self.test_submission_reviews_uri, data)
self.assertEqual(response.status_code, 201)
response = self.do_get(self.test_submission_reviews_uri)
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data), 2)
def test_submission_reviews_detail_get(self): def test_submission_reviews_detail_get(self):
data = { data = {
'submission': self.test_submission.id, 'submission': self.test_submission.id,
......
...@@ -6,6 +6,7 @@ Run these tests @ Devstack: ...@@ -6,6 +6,7 @@ Run these tests @ Devstack:
""" """
import json import json
import uuid import uuid
from urllib import urlencode
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.cache import cache from django.core.cache import cache
...@@ -55,7 +56,7 @@ class WorkgroupReviewsApiTests(ModuleStoreTestCase): ...@@ -55,7 +56,7 @@ class WorkgroupReviewsApiTests(ModuleStoreTestCase):
self.test_course_id = unicode(self.course.id) self.test_course_id = unicode(self.course.id)
self.test_bogus_course_id = 'foo/bar/baz' self.test_bogus_course_id = 'foo/bar/baz'
self.test_course_content_id = "i4x://blah" self.test_course_content_id = unicode(self.chapter.scope_ids.usage_id)
self.test_bogus_course_content_id = "14x://foo/bar/baz" self.test_bogus_course_content_id = "14x://foo/bar/baz"
self.test_question = "Does the question data come from the XBlock definition?" self.test_question = "Does the question data come from the XBlock definition?"
...@@ -145,6 +146,30 @@ class WorkgroupReviewsApiTests(ModuleStoreTestCase): ...@@ -145,6 +146,30 @@ class WorkgroupReviewsApiTests(ModuleStoreTestCase):
self.assertIsNotNone(response.data['created']) self.assertIsNotNone(response.data['created'])
self.assertIsNotNone(response.data['modified']) self.assertIsNotNone(response.data['modified'])
def test_workgroup_reviews_list_get(self):
data = {
'workgroup': self.test_workgroup.id,
'reviewer': self.anonymous_user_id,
'question': self.test_question,
'answer': self.test_answer,
'content_id': self.test_course_content_id,
}
response = self.do_post(self.test_workgroup_reviews_uri, data)
self.assertEqual(response.status_code, 201)
data = {
'workgroup': self.test_workgroup.id,
'reviewer': self.anonymous_user_id,
'question': self.test_question,
'answer': self.test_answer,
'content_id': self.test_course_content_id,
}
response = self.do_post(self.test_workgroup_reviews_uri, data)
self.assertEqual(response.status_code, 201)
response = self.do_get(self.test_workgroup_reviews_uri)
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data), 2)
def test_workgroup_reviews_detail_get(self): def test_workgroup_reviews_detail_get(self):
data = { data = {
'workgroup': self.test_workgroup.id, 'workgroup': self.test_workgroup.id,
......
...@@ -7,6 +7,7 @@ Run these tests @ Devstack: ...@@ -7,6 +7,7 @@ Run these tests @ Devstack:
from datetime import datetime from datetime import datetime
import json import json
import uuid import uuid
from urllib import urlencode
from django.contrib.auth.models import Group, User from django.contrib.auth.models import Group, User
from django.core.cache import cache from django.core.cache import cache
...@@ -385,18 +386,41 @@ class WorkgroupsApiTests(ModuleStoreTestCase): ...@@ -385,18 +386,41 @@ class WorkgroupsApiTests(ModuleStoreTestCase):
'user': self.test_user.id, 'user': self.test_user.id,
'reviewer': self.test_user.username, 'reviewer': self.test_user.username,
'question': 'Test question?', 'question': 'Test question?',
'answer': 'Test answer!' 'answer': 'Test answer!',
'content_id': self.test_course_content_id
} }
response = self.do_post(self.test_peer_reviews_uri, pr_data) response = self.do_post(self.test_peer_reviews_uri, pr_data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
pr_id = response.data['id'] pr1_id = response.data['id']
pr_data = {
'workgroup': workgroup_id,
'user': self.test_user.id,
'reviewer': self.test_user.username,
'question': 'Test question2',
'answer': 'Test answer2',
'content_id': self.test_course_id
}
response = self.do_post(self.test_peer_reviews_uri, pr_data)
self.assertEqual(response.status_code, 201)
pr2_id = response.data['id']
test_uri = '{}{}/'.format(self.test_workgroups_uri, workgroup_id) test_uri = '{}{}/'.format(self.test_workgroups_uri, workgroup_id)
peer_reviews_uri = '{}peer_reviews/'.format(test_uri) peer_reviews_uri = '{}peer_reviews/'.format(test_uri)
response = self.do_get(peer_reviews_uri) response = self.do_get(peer_reviews_uri)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.data[0]['id'], pr_id) self.assertEqual(len(response.data), 2)
self.assertEqual(response.data[0]['id'], pr1_id)
self.assertEqual(response.data[0]['reviewer'], self.test_user.username)
content_id = {"content_id": self.test_course_content_id}
test_uri = '{}{}/peer_reviews/?{}'.format(self.test_workgroups_uri, workgroup_id, urlencode(content_id))
response = self.do_get(test_uri)
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data), 1)
self.assertEqual(response.data[0]['id'], pr1_id)
self.assertEqual(response.data[0]['reviewer'], self.test_user.username) self.assertEqual(response.data[0]['reviewer'], self.test_user.username)
def test_workgroups_workgroup_reviews_get(self): def test_workgroups_workgroup_reviews_get(self):
data = { data = {
'name': self.test_workgroup_name, 'name': self.test_workgroup_name,
...@@ -409,16 +433,36 @@ class WorkgroupsApiTests(ModuleStoreTestCase): ...@@ -409,16 +433,36 @@ class WorkgroupsApiTests(ModuleStoreTestCase):
'workgroup': workgroup_id, 'workgroup': workgroup_id,
'reviewer': self.test_user.username, 'reviewer': self.test_user.username,
'question': 'Test question?', 'question': 'Test question?',
'answer': 'Test answer!' 'answer': 'Test answer!',
'content_id': self.test_course_content_id
} }
response = self.do_post(self.test_workgroup_reviews_uri, wr_data) response = self.do_post(self.test_workgroup_reviews_uri, wr_data)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
wr_id = response.data['id'] wr1_id = response.data['id']
wr_data = {
'workgroup': workgroup_id,
'reviewer': self.test_user.username,
'question': 'Test question?',
'answer': 'Test answer!',
'content_id': self.test_course_id
}
response = self.do_post(self.test_workgroup_reviews_uri, wr_data)
self.assertEqual(response.status_code, 201)
test_uri = '{}{}/'.format(self.test_workgroups_uri, workgroup_id) test_uri = '{}{}/'.format(self.test_workgroups_uri, workgroup_id)
workgroup_reviews_uri = '{}workgroup_reviews/'.format(test_uri) workgroup_reviews_uri = '{}workgroup_reviews/'.format(test_uri)
response = self.do_get(workgroup_reviews_uri) response = self.do_get(workgroup_reviews_uri)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.data[0]['id'], wr_id) self.assertEqual(len(response.data), 2)
self.assertEqual(response.data[0]['id'], wr1_id)
self.assertEqual(response.data[0]['reviewer'], self.test_user.username)
content_id = {"content_id": self.test_course_content_id}
test_uri = '{}{}/workgroup_reviews/?{}'.format(self.test_workgroups_uri, workgroup_id, urlencode(content_id))
response = self.do_get(test_uri)
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data), 1)
self.assertEqual(response.data[0]['id'], wr1_id)
self.assertEqual(response.data[0]['reviewer'], self.test_user.username) self.assertEqual(response.data[0]['reviewer'], self.test_user.username)
def test_workgroups_submissions_get(self): def test_workgroups_submissions_get(self):
......
...@@ -179,6 +179,9 @@ class WorkgroupsViewSet(viewsets.ModelViewSet): ...@@ -179,6 +179,9 @@ class WorkgroupsViewSet(viewsets.ModelViewSet):
View Peer Reviews for a specific Workgroup View Peer Reviews for a specific Workgroup
""" """
peer_reviews = WorkgroupPeerReview.objects.filter(workgroup=pk) peer_reviews = WorkgroupPeerReview.objects.filter(workgroup=pk)
content_id = self.request.QUERY_PARAMS.get('content_id', None)
if content_id is not None:
peer_reviews = peer_reviews.filter(content_id=content_id)
response_data = [] response_data = []
if peer_reviews: if peer_reviews:
for peer_review in peer_reviews: for peer_review in peer_reviews:
...@@ -192,6 +195,10 @@ class WorkgroupsViewSet(viewsets.ModelViewSet): ...@@ -192,6 +195,10 @@ class WorkgroupsViewSet(viewsets.ModelViewSet):
View Workgroup Reviews for a specific Workgroup View Workgroup Reviews for a specific Workgroup
""" """
workgroup_reviews = WorkgroupReview.objects.filter(workgroup=pk) workgroup_reviews = WorkgroupReview.objects.filter(workgroup=pk)
content_id = self.request.QUERY_PARAMS.get('content_id', None)
if content_id is not None:
workgroup_reviews = workgroup_reviews.filter(content_id=content_id)
response_data = [] response_data = []
if workgroup_reviews: if workgroup_reviews:
for workgroup_review in workgroup_reviews: for workgroup_review in workgroup_reviews:
......
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