Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
efec1fff
Commit
efec1fff
authored
Jun 04, 2014
by
Matt Drayer
Committed by
Jonathan Piacenti
Aug 20, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mattdrayer/api-projectreviews: Added new ProjectReview entity/views
parent
42ab8e11
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
535 additions
and
204 deletions
+535
-204
lms/djangoapps/api_manager/system/tests.py
+2
-0
lms/djangoapps/api_manager/system/views.py
+1
-0
lms/djangoapps/api_manager/urls.py
+4
-3
lms/djangoapps/projects/migrations/0001_initial.py
+0
-0
lms/djangoapps/projects/models.py
+38
-23
lms/djangoapps/projects/serializers.py
+57
-25
lms/djangoapps/projects/tests/test_peer_reviews.py
+18
-23
lms/djangoapps/projects/tests/test_projects.py
+26
-40
lms/djangoapps/projects/tests/test_submission_reviews.py
+16
-15
lms/djangoapps/projects/tests/test_workgroup_reviews.py
+179
-0
lms/djangoapps/projects/tests/test_workgroup_submissions.py
+10
-26
lms/djangoapps/projects/tests/test_workgroups.py
+86
-0
lms/djangoapps/projects/views.py
+98
-49
No files found.
lms/djangoapps/api_manager/system/tests.py
View file @
efec1fff
...
@@ -76,3 +76,5 @@ class SystemApiTests(TestCase):
...
@@ -76,3 +76,5 @@ class SystemApiTests(TestCase):
self
.
assertGreater
(
len
(
response
.
data
[
'name'
]),
0
)
self
.
assertGreater
(
len
(
response
.
data
[
'name'
]),
0
)
self
.
assertIsNotNone
(
response
.
data
[
'description'
])
self
.
assertIsNotNone
(
response
.
data
[
'description'
])
self
.
assertGreater
(
len
(
response
.
data
[
'description'
]),
0
)
self
.
assertGreater
(
len
(
response
.
data
[
'description'
]),
0
)
self
.
assertIsNotNone
(
response
.
data
[
'resources'
])
lms/djangoapps/api_manager/system/views.py
View file @
efec1fff
...
@@ -51,6 +51,7 @@ class ApiDetail(SecureAPIView):
...
@@ -51,6 +51,7 @@ class ApiDetail(SecureAPIView):
response_data
[
'resources'
]
=
[]
response_data
[
'resources'
]
=
[]
response_data
[
'resources'
]
.
append
({
'uri'
:
base_uri
+
'courses'
})
response_data
[
'resources'
]
.
append
({
'uri'
:
base_uri
+
'courses'
})
response_data
[
'resources'
]
.
append
({
'uri'
:
base_uri
+
'groups'
})
response_data
[
'resources'
]
.
append
({
'uri'
:
base_uri
+
'groups'
})
response_data
[
'resources'
]
.
append
({
'uri'
:
base_uri
+
'projects'
})
response_data
[
'resources'
]
.
append
({
'uri'
:
base_uri
+
'sessions'
})
response_data
[
'resources'
]
.
append
({
'uri'
:
base_uri
+
'sessions'
})
response_data
[
'resources'
]
.
append
({
'uri'
:
base_uri
+
'system'
})
response_data
[
'resources'
]
.
append
({
'uri'
:
base_uri
+
'system'
})
response_data
[
'resources'
]
.
append
({
'uri'
:
base_uri
+
'users'
})
response_data
[
'resources'
]
.
append
({
'uri'
:
base_uri
+
'users'
})
...
...
lms/djangoapps/api_manager/urls.py
View file @
efec1fff
...
@@ -32,9 +32,10 @@ router.register(r'organizations', OrganizationsViewSet)
...
@@ -32,9 +32,10 @@ router.register(r'organizations', OrganizationsViewSet)
# Project-related ViewSets
# Project-related ViewSets
router
.
register
(
r'projects'
,
project_views
.
ProjectsViewSet
)
router
.
register
(
r'projects'
,
project_views
.
ProjectsViewSet
)
router
.
register
(
r'workgroups'
,
project_views
.
WorkgroupsViewSet
)
router
.
register
(
r'workgroups'
,
project_views
.
WorkgroupsViewSet
)
router
.
register
(
r'submissions'
,
project_views
.
SubmissionsViewSet
)
router
.
register
(
r'submissions'
,
project_views
.
WorkgroupSubmissionsViewSet
)
router
.
register
(
r'submission_reviews'
,
project_views
.
SubmissionReviewsViewSet
)
router
.
register
(
r'workgroup_reviews'
,
project_views
.
WorkgroupReviewsViewSet
)
router
.
register
(
r'peer_reviews'
,
project_views
.
PeerReviewsViewSet
)
router
.
register
(
r'submission_reviews'
,
project_views
.
WorkgroupSubmissionReviewsViewSet
)
router
.
register
(
r'peer_reviews'
,
project_views
.
WorkgroupPeerReviewsViewSet
)
router
.
register
(
r'groups'
,
project_views
.
GroupViewSet
)
router
.
register
(
r'groups'
,
project_views
.
GroupViewSet
)
router
.
register
(
r'users'
,
project_views
.
UserViewSet
)
router
.
register
(
r'users'
,
project_views
.
UserViewSet
)
urlpatterns
+=
router
.
urls
urlpatterns
+=
router
.
urls
lms/djangoapps/projects/migrations/0001_initial.py
View file @
efec1fff
This diff is collapsed.
Click to expand it.
lms/djangoapps/projects/models.py
View file @
efec1fff
...
@@ -2,18 +2,9 @@
...
@@ -2,18 +2,9 @@
from
django.contrib.auth.models
import
Group
,
User
from
django.contrib.auth.models
import
Group
,
User
from
django.db
import
models
from
django.db
import
models
from
model_utils.models
import
TimeStampedModel
class
Workgroup
(
TimeStampedModel
):
from
model_utils.models
import
TimeStampedModel
"""
from
student.models
import
AnonymousUserId
Model representing the Workgroup concept. Workgroups are an
intersection of Users and CourseContent, although they can also be
related to other Groups.
"""
name
=
models
.
CharField
(
max_length
=
255
,
null
=
True
,
blank
=
True
)
users
=
models
.
ManyToManyField
(
User
,
related_name
=
"workgroups"
)
groups
=
models
.
ManyToManyField
(
Group
,
related_name
=
"workgroups"
)
class
Project
(
TimeStampedModel
):
class
Project
(
TimeStampedModel
):
...
@@ -23,47 +14,71 @@ class Project(TimeStampedModel):
...
@@ -23,47 +14,71 @@ class Project(TimeStampedModel):
"""
"""
course_id
=
models
.
CharField
(
max_length
=
255
)
course_id
=
models
.
CharField
(
max_length
=
255
)
content_id
=
models
.
CharField
(
max_length
=
255
)
content_id
=
models
.
CharField
(
max_length
=
255
)
workgroups
=
models
.
ManyToManyField
(
Workgroup
,
related_name
=
"projects"
)
class
Meta
:
class
Meta
:
""" Meta class for defining additional model characteristics """
""" Meta class for defining additional model characteristics """
unique_together
=
(
"course_id"
,
"content_id"
)
unique_together
=
(
"course_id"
,
"content_id"
)
class
Submission
(
TimeStampedModel
):
class
Workgroup
(
TimeStampedModel
):
"""
Model representing the Workgroup concept. Workgroups are an
intersection of Users and CourseContent, although they can also be
related to other Groups.
"""
name
=
models
.
CharField
(
max_length
=
255
,
null
=
True
,
blank
=
True
)
project
=
models
.
ForeignKey
(
Project
,
related_name
=
"workgroups"
)
users
=
models
.
ManyToManyField
(
User
,
related_name
=
"workgroups"
,
blank
=
True
,
null
=
True
)
groups
=
models
.
ManyToManyField
(
Group
,
related_name
=
"workgroups"
,
blank
=
True
,
null
=
True
)
class
WorkgroupReview
(
TimeStampedModel
):
"""
Model representing the Workgroup Review concept. A Workgroup Review is
a single question/answer combination for a particular Workgroup in the
context of a specific Project, as defined in the Group Project XBlock
schema. There can be more than one Project Review entry for a given Project.
"""
workgroup
=
models
.
ForeignKey
(
Workgroup
,
related_name
=
"workgroup_reviews"
)
reviewer
=
models
.
CharField
(
max_length
=
255
)
# AnonymousUserId
question
=
models
.
CharField
(
max_length
=
255
)
answer
=
models
.
CharField
(
max_length
=
255
)
class
WorkgroupSubmission
(
TimeStampedModel
):
"""
"""
Model representing the Submission concept. A Submission is a project artifact
Model representing the Submission concept. A Submission is a project artifact
created by the Users in a Workgroup. The document fields are defined by the
created by the Users in a Workgroup. The document fields are defined by the
'Group Project' XBlock and data for a specific instance is persisted here
'Group Project' XBlock and data for a specific instance is persisted here
"""
"""
user
=
models
.
ForeignKey
(
User
)
workgroup
=
models
.
ForeignKey
(
Workgroup
,
related_name
=
"submissions"
)
workgroup
=
models
.
ForeignKey
(
Workgroup
,
related_name
=
"submissions"
)
project
=
models
.
ForeignKey
(
Project
,
related_name
=
"project
s"
)
user
=
models
.
ForeignKey
(
User
,
related_name
=
"submission
s"
)
document_id
=
models
.
CharField
(
max_length
=
255
)
document_id
=
models
.
CharField
(
max_length
=
255
)
document_url
=
models
.
CharField
(
max_length
=
255
)
document_url
=
models
.
CharField
(
max_length
=
255
)
document_mime_type
=
models
.
CharField
(
max_length
=
255
)
document_mime_type
=
models
.
CharField
(
max_length
=
255
)
class
SubmissionReview
(
TimeStampedModel
):
class
Workgroup
SubmissionReview
(
TimeStampedModel
):
"""
"""
Model representing the Submission Review concept. A Submission Review is
Model representing the Submission Review concept. A Submission Review is
essentially a single question/answer combination for a particular Submission,
essentially a single question/answer combination for a particular Submission,
defined in the Group Project XBlock schema. There can be more than one
defined in the Group Project XBlock schema. There can be more than one
Submission Review for a given Submission.
Submission Review
entry
for a given Submission.
"""
"""
submission
=
models
.
ForeignKey
(
Submission
,
related_name
=
"submission_
reviews"
)
submission
=
models
.
ForeignKey
(
WorkgroupSubmission
,
related_name
=
"
reviews"
)
reviewer
=
models
.
ForeignKey
(
User
,
related_name
=
"submission_reviews"
)
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
)
class
PeerReview
(
TimeStampedModel
):
class
Workgroup
PeerReview
(
TimeStampedModel
):
"""
"""
Model representing the Peer Review concept. A Peer Review is a record of a
Model representing the Peer Review concept. A Peer Review is a record of a
specific question/answer defined in the Group Project XBlock schema. There
specific question/answer defined in the Group Project XBlock schema. There
can be more than one Peer Review for a given User.
can be more than one Peer Review
entry
for a given User.
"""
"""
user
=
models
.
ForeignKey
(
User
,
related_name
=
"peer_reviewees"
)
workgroup
=
models
.
ForeignKey
(
Workgroup
,
related_name
=
"peer_reviews"
)
reviewer
=
models
.
ForeignKey
(
User
,
related_name
=
"peer_reviewers"
)
user
=
models
.
ForeignKey
(
User
,
related_name
=
"workgroup_peer_reviewees"
)
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
)
lms/djangoapps/projects/serializers.py
View file @
efec1fff
...
@@ -5,8 +5,8 @@ from django.core.exceptions import ObjectDoesNotExist
...
@@ -5,8 +5,8 @@ from django.core.exceptions import ObjectDoesNotExist
from
rest_framework
import
serializers
from
rest_framework
import
serializers
from
.models
import
Workgroup
,
Project
,
Submission
from
.models
import
Project
,
Workgroup
,
Workgroup
Submission
from
.models
import
SubmissionReview
,
PeerReview
from
.models
import
WorkgroupReview
,
WorkgroupSubmissionReview
,
Workgroup
PeerReview
class
UserSerializer
(
serializers
.
HyperlinkedModelSerializer
):
class
UserSerializer
(
serializers
.
HyperlinkedModelSerializer
):
...
@@ -40,56 +40,88 @@ class GroupSerializer(serializers.HyperlinkedModelSerializer):
...
@@ -40,56 +40,88 @@ class GroupSerializer(serializers.HyperlinkedModelSerializer):
fields
=
(
'id'
,
'url'
,
'name'
)
fields
=
(
'id'
,
'url'
,
'name'
)
class
Workgroup
Serializer
(
serializers
.
HyperlinkedModelSerializer
):
class
Project
Serializer
(
serializers
.
HyperlinkedModelSerializer
):
""" Serializer for model interactions """
""" Serializer for model interactions """
groups
=
GroupSerializer
(
many
=
True
,
required
=
False
)
workgroups
=
serializers
.
PrimaryKeyRelatedField
(
many
=
True
,
required
=
False
)
users
=
UserSerializer
(
many
=
True
,
required
=
False
)
class
Meta
:
class
Meta
:
""" Meta class for defining additional serializer characteristics """
""" Meta class for defining additional serializer characteristics """
model
=
Workgroup
model
=
Project
fields
=
(
'id'
,
'url'
,
'created'
,
'modified'
,
'name'
,
'groups'
,
'users'
)
fields
=
(
'id'
,
'url'
,
'created'
,
'modified'
,
'course_id'
,
'content_id'
,
'workgroups'
)
class
Project
Serializer
(
serializers
.
HyperlinkedModelSerializer
):
class
WorkgroupSubmission
Serializer
(
serializers
.
HyperlinkedModelSerializer
):
""" Serializer for model interactions """
""" Serializer for model interactions """
workgroups
=
WorkgroupSerializer
(
many
=
True
,
required
=
False
)
user
=
serializers
.
PrimaryKeyRelatedField
(
required
=
True
)
workgroup
=
serializers
.
PrimaryKeyRelatedField
(
required
=
True
)
reviews
=
serializers
.
PrimaryKeyRelatedField
(
many
=
True
,
required
=
False
)
class
Meta
:
class
Meta
:
""" Meta class for defining additional serializer characteristics """
""" Meta class for defining additional serializer characteristics """
model
=
Project
model
=
WorkgroupSubmission
fields
=
(
'id'
,
'url'
,
'created'
,
'modified'
,
'course_id'
,
'content_id'
,
'workgroups'
)
fields
=
(
'id'
,
'url'
,
'created'
,
'modified'
,
'document_id'
,
'document_url'
,
'document_mime_type'
,
'user'
,
'workgroup'
,
'reviews'
)
class
Submission
Serializer
(
serializers
.
HyperlinkedModelSerializer
):
class
WorkgroupReview
Serializer
(
serializers
.
HyperlinkedModelSerializer
):
""" Serializer for model interactions """
""" Serializer for model interactions """
user
=
serializers
.
PrimaryKeyRelatedField
(
required
=
True
)
project
=
serializers
.
PrimaryKeyRelatedField
(
required
=
True
)
workgroup
=
serializers
.
PrimaryKeyRelatedField
(
required
=
True
)
workgroup
=
serializers
.
PrimaryKeyRelatedField
(
required
=
True
)
class
Meta
:
class
Meta
:
""" Meta class for defining additional serializer characteristics """
""" Meta class for defining additional serializer characteristics """
model
=
Submission
model
=
WorkgroupReview
fields
=
(
'id'
,
'url'
,
'created'
,
'modified'
,
'user'
,
'project'
,
'workgroup'
,
'document_id'
,
'document_url'
,
'document_mime_type'
)
fields
=
(
'id'
,
'url'
,
'created'
,
'modified'
,
'question'
,
'answer'
,
'workgroup'
,
'reviewer'
)
class
SubmissionReviewSerializer
(
serializers
.
HyperlinkedModelSerializer
):
class
Workgroup
SubmissionReviewSerializer
(
serializers
.
HyperlinkedModelSerializer
):
""" Serializer for model interactions """
""" Serializer for model interactions """
submission
=
serializers
.
PrimaryKeyRelatedField
(
required
=
True
)
submission
=
serializers
.
PrimaryKeyRelatedField
(
required
=
True
,
queryset
=
WorkgroupSubmission
.
objects
.
all
())
reviewer
=
serializers
.
PrimaryKeyRelatedField
(
required
=
True
)
class
Meta
:
class
Meta
:
""" Meta class for defining additional serializer characteristics """
""" Meta class for defining additional serializer characteristics """
model
=
SubmissionReview
model
=
WorkgroupSubmissionReview
fields
=
(
'id'
,
'url'
,
'created'
,
'modified'
,
'submission'
,
'reviewer'
,
'question'
,
'answer'
)
fields
=
(
'id'
,
'url'
,
'created'
,
'modified'
,
'question'
,
'answer'
,
'submission'
,
'reviewer'
)
class
PeerReviewSerializer
(
serializers
.
HyperlinkedModelSerializer
):
class
Workgroup
PeerReviewSerializer
(
serializers
.
HyperlinkedModelSerializer
):
""" Serializer for model interactions """
""" Serializer for model interactions """
workgroup
=
serializers
.
PrimaryKeyRelatedField
(
required
=
True
)
user
=
serializers
.
PrimaryKeyRelatedField
(
required
=
True
)
user
=
serializers
.
PrimaryKeyRelatedField
(
required
=
True
)
reviewer
=
serializers
.
PrimaryKeyRelatedField
(
required
=
True
)
class
Meta
:
class
Meta
:
""" Meta class for defining additional serializer characteristics """
""" Meta class for defining additional serializer characteristics """
model
=
PeerReview
model
=
WorkgroupPeerReview
fields
=
(
'id'
,
'url'
,
'created'
,
'modified'
,
'user'
,
'reviewer'
,
'question'
,
'answer'
)
fields
=
(
'id'
,
'url'
,
'created'
,
'modified'
,
'question'
,
'answer'
,
'workgroup'
,
'user'
,
'reviewer'
)
class
WorkgroupSerializer
(
serializers
.
HyperlinkedModelSerializer
):
""" Serializer for model interactions """
project
=
serializers
.
PrimaryKeyRelatedField
(
required
=
True
)
groups
=
GroupSerializer
(
many
=
True
,
required
=
False
)
users
=
UserSerializer
(
many
=
True
,
required
=
False
)
submissions
=
serializers
.
PrimaryKeyRelatedField
(
many
=
True
,
required
=
False
)
workgroup_reviews
=
serializers
.
PrimaryKeyRelatedField
(
many
=
True
,
required
=
False
)
peer_reviews
=
serializers
.
PrimaryKeyRelatedField
(
many
=
True
,
required
=
False
)
class
Meta
:
""" Meta class for defining additional serializer characteristics """
model
=
Workgroup
fields
=
(
'id'
,
'url'
,
'created'
,
'modified'
,
'name'
,
'project'
,
'groups'
,
'users'
,
'submissions'
,
'workgroup_reviews'
,
'peer_reviews'
)
lms/djangoapps/projects/tests/test_peer_reviews.py
View file @
efec1fff
...
@@ -13,6 +13,7 @@ from django.test import TestCase, Client
...
@@ -13,6 +13,7 @@ from django.test import TestCase, Client
from
django.test.utils
import
override_settings
from
django.test.utils
import
override_settings
from
projects.models
import
Project
,
Workgroup
from
projects.models
import
Project
,
Workgroup
from
student.models
import
anonymous_id_for_user
TEST_API_KEY
=
str
(
uuid
.
uuid4
())
TEST_API_KEY
=
str
(
uuid
.
uuid4
())
...
@@ -58,21 +59,20 @@ class PeerReviewsApiTests(TestCase):
...
@@ -58,21 +59,20 @@ class PeerReviewsApiTests(TestCase):
username
=
"reviewer"
,
username
=
"reviewer"
,
is_active
=
True
is_active
=
True
)
)
self
.
anonymous_user_id
=
anonymous_id_for_user
(
self
.
test_reviewer_user
,
self
.
test_course_id
)
self
.
test_project
=
Project
.
objects
.
create
(
course_id
=
self
.
test_course_id
,
content_id
=
self
.
test_course_content_id
,
)
self
.
test_workgroup
=
Workgroup
.
objects
.
create
(
self
.
test_workgroup
=
Workgroup
.
objects
.
create
(
name
=
"Test Workgroup"
,
name
=
"Test Workgroup"
,
project
=
self
.
test_project
,
)
)
self
.
test_workgroup
.
users
.
add
(
self
.
test_peer_user
)
self
.
test_workgroup
.
users
.
add
(
self
.
test_peer_user
)
self
.
test_workgroup
.
users
.
add
(
self
.
test_reviewer_user
)
self
.
test_workgroup
.
save
()
self
.
test_workgroup
.
save
()
self
.
test_project
=
Project
.
objects
.
create
(
course_id
=
self
.
test_course_id
,
content_id
=
self
.
test_course_content_id
,
)
self
.
test_project
.
workgroups
.
add
(
self
.
test_workgroup
)
self
.
test_project
.
save
()
self
.
client
=
SecureClient
()
self
.
client
=
SecureClient
()
cache
.
clear
()
cache
.
clear
()
...
@@ -107,8 +107,9 @@ class PeerReviewsApiTests(TestCase):
...
@@ -107,8 +107,9 @@ class PeerReviewsApiTests(TestCase):
def
test_peer_reviews_list_post
(
self
):
def
test_peer_reviews_list_post
(
self
):
data
=
{
data
=
{
'workgroup'
:
self
.
test_workgroup
.
id
,
'user'
:
self
.
test_peer_user
.
id
,
'user'
:
self
.
test_peer_user
.
id
,
'reviewer'
:
self
.
test_reviewer_user
.
id
,
'reviewer'
:
self
.
anonymous_user_
id
,
'question'
:
self
.
test_question
,
'question'
:
self
.
test_question
,
'answer'
:
self
.
test_answer
,
'answer'
:
self
.
test_answer
,
}
}
...
@@ -123,25 +124,17 @@ class PeerReviewsApiTests(TestCase):
...
@@ -123,25 +124,17 @@ class PeerReviewsApiTests(TestCase):
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
[
'user'
],
self
.
test_peer_user
.
id
)
self
.
assertEqual
(
response
.
data
[
'user'
],
self
.
test_peer_user
.
id
)
self
.
assertEqual
(
response
.
data
[
'reviewer'
],
self
.
test_reviewer_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
[
'workgroup'
],
self
.
test_workgroup
.
id
)
self
.
assertIsNotNone
(
response
.
data
[
'created'
])
self
.
assertIsNotNone
(
response
.
data
[
'created'
])
self
.
assertIsNotNone
(
response
.
data
[
'modified'
])
self
.
assertIsNotNone
(
response
.
data
[
'modified'
])
def
test_peer_reviews_list_post_invalid_relationships
(
self
):
def
test_peer_reviews_list_post_invalid_relationships
(
self
):
data
=
{
data
=
{
'user'
:
123456
,
'user'
:
123456
,
'reviewer'
:
self
.
test_reviewer_user
.
id
,
'reviewer'
:
self
.
anonymous_user_id
,
'question'
:
self
.
test_question
,
'answer'
:
self
.
test_answer
,
}
response
=
self
.
do_post
(
self
.
test_peer_reviews_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
400
)
data
=
{
'user'
:
self
.
test_peer_user
.
id
,
'reviewer'
:
123456
,
'question'
:
self
.
test_question
,
'question'
:
self
.
test_question
,
'answer'
:
self
.
test_answer
,
'answer'
:
self
.
test_answer
,
}
}
...
@@ -150,8 +143,9 @@ class PeerReviewsApiTests(TestCase):
...
@@ -150,8 +143,9 @@ class PeerReviewsApiTests(TestCase):
def
test_peer_reviews_detail_get
(
self
):
def
test_peer_reviews_detail_get
(
self
):
data
=
{
data
=
{
'workgroup'
:
self
.
test_workgroup
.
id
,
'user'
:
self
.
test_peer_user
.
id
,
'user'
:
self
.
test_peer_user
.
id
,
'reviewer'
:
self
.
test_reviewer_user
.
id
,
'reviewer'
:
self
.
anonymous_user_
id
,
'question'
:
self
.
test_question
,
'question'
:
self
.
test_question
,
'answer'
:
self
.
test_answer
,
'answer'
:
self
.
test_answer
,
}
}
...
@@ -168,7 +162,7 @@ class PeerReviewsApiTests(TestCase):
...
@@ -168,7 +162,7 @@ class PeerReviewsApiTests(TestCase):
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
[
'user'
],
self
.
test_peer_user
.
id
)
self
.
assertEqual
(
response
.
data
[
'user'
],
self
.
test_peer_user
.
id
)
self
.
assertEqual
(
response
.
data
[
'reviewer'
],
self
.
test_reviewer_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
.
assertIsNotNone
(
response
.
data
[
'created'
])
self
.
assertIsNotNone
(
response
.
data
[
'created'
])
...
@@ -181,8 +175,9 @@ class PeerReviewsApiTests(TestCase):
...
@@ -181,8 +175,9 @@ class PeerReviewsApiTests(TestCase):
def
test_peer_reviews_detail_delete
(
self
):
def
test_peer_reviews_detail_delete
(
self
):
data
=
{
data
=
{
'workgroup'
:
self
.
test_workgroup
.
id
,
'user'
:
self
.
test_peer_user
.
id
,
'user'
:
self
.
test_peer_user
.
id
,
'reviewer'
:
self
.
test_reviewer_user
.
id
,
'reviewer'
:
self
.
anonymous_user_
id
,
'question'
:
self
.
test_question
,
'question'
:
self
.
test_question
,
'answer'
:
self
.
test_answer
,
'answer'
:
self
.
test_answer
,
}
}
...
...
lms/djangoapps/projects/tests/test_projects.py
View file @
efec1fff
...
@@ -7,11 +7,12 @@ Run these tests @ Devstack:
...
@@ -7,11 +7,12 @@ Run these tests @ Devstack:
import
json
import
json
import
uuid
import
uuid
from
django.contrib.auth.models
import
User
from
django.core.cache
import
cache
from
django.core.cache
import
cache
from
django.test
import
TestCase
,
Client
from
django.test
import
TestCase
,
Client
from
django.test.utils
import
override_settings
from
django.test.utils
import
override_settings
from
projects.models
import
Workgroup
from
projects.models
import
Project
,
Workgroup
TEST_API_KEY
=
str
(
uuid
.
uuid4
())
TEST_API_KEY
=
str
(
uuid
.
uuid4
())
...
@@ -41,9 +42,23 @@ class ProjectsApiTests(TestCase):
...
@@ -41,9 +42,23 @@ class ProjectsApiTests(TestCase):
self
.
test_course_content_id
=
"i4x://blah"
self
.
test_course_content_id
=
"i4x://blah"
self
.
test_bogus_course_content_id
=
"14x://foo/bar/baz"
self
.
test_bogus_course_content_id
=
"14x://foo/bar/baz"
self
.
test_user
=
User
.
objects
.
create
(
email
=
"test@edx.org"
,
username
=
"testing"
,
is_active
=
True
)
self
.
test_project
=
Project
.
objects
.
create
(
course_id
=
self
.
test_course_id
,
content_id
=
self
.
test_course_content_id
,
)
self
.
test_workgroup
=
Workgroup
.
objects
.
create
(
self
.
test_workgroup
=
Workgroup
.
objects
.
create
(
name
=
"Test Workgroup"
,
name
=
"Test Workgroup"
,
project
=
self
.
test_project
,
)
)
self
.
test_workgroup
.
users
.
add
(
self
.
test_user
)
self
.
test_workgroup
.
save
()
self
.
client
=
SecureClient
()
self
.
client
=
SecureClient
()
cache
.
clear
()
cache
.
clear
()
...
@@ -78,10 +93,11 @@ class ProjectsApiTests(TestCase):
...
@@ -78,10 +93,11 @@ class ProjectsApiTests(TestCase):
return
response
return
response
def
test_projects_list_post
(
self
):
def
test_projects_list_post
(
self
):
test_course_content_id
=
"i4x://blahblah1234"
data
=
{
data
=
{
'name'
:
self
.
test_project_name
,
'name'
:
self
.
test_project_name
,
'course_id'
:
self
.
test_course_id
,
'course_id'
:
self
.
test_course_id
,
'content_id'
:
self
.
test_course_content_id
'content_id'
:
test_course_content_id
}
}
response
=
self
.
do_post
(
self
.
test_projects_uri
,
data
)
response
=
self
.
do_post
(
self
.
test_projects_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
self
.
assertEqual
(
response
.
status_code
,
201
)
...
@@ -94,20 +110,13 @@ class ProjectsApiTests(TestCase):
...
@@ -94,20 +110,13 @@ class ProjectsApiTests(TestCase):
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
[
'course_id'
],
self
.
test_course_id
)
self
.
assertEqual
(
response
.
data
[
'course_id'
],
self
.
test_course_id
)
self
.
assertEqual
(
response
.
data
[
'content_id'
],
self
.
test_course_content_id
)
self
.
assertEqual
(
response
.
data
[
'content_id'
],
test_course_content_id
)
self
.
assertIsNotNone
(
response
.
data
[
'workgroups'
])
self
.
assertIsNotNone
(
response
.
data
[
'workgroups'
])
self
.
assertIsNotNone
(
response
.
data
[
'created'
])
self
.
assertIsNotNone
(
response
.
data
[
'created'
])
self
.
assertIsNotNone
(
response
.
data
[
'modified'
])
self
.
assertIsNotNone
(
response
.
data
[
'modified'
])
def
test_projects_detail_get
(
self
):
def
test_projects_detail_get
(
self
):
data
=
{
test_uri
=
'{}{}/'
.
format
(
self
.
test_projects_uri
,
self
.
test_project
.
id
)
'name'
:
self
.
test_project_name
,
'course_id'
:
self
.
test_course_id
,
'content_id'
:
self
.
test_course_content_id
}
response
=
self
.
do_post
(
self
.
test_projects_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
test_uri
=
'{}{}/'
.
format
(
self
.
test_projects_uri
,
str
(
response
.
data
[
'id'
]))
response
=
self
.
do_get
(
test_uri
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
status_code
,
200
)
confirm_uri
=
self
.
test_server_prefix
+
test_uri
confirm_uri
=
self
.
test_server_prefix
+
test_uri
...
@@ -120,36 +129,20 @@ class ProjectsApiTests(TestCase):
...
@@ -120,36 +129,20 @@ class ProjectsApiTests(TestCase):
self
.
assertIsNotNone
(
response
.
data
[
'modified'
])
self
.
assertIsNotNone
(
response
.
data
[
'modified'
])
def
test_projects_workgroups_post
(
self
):
def
test_projects_workgroups_post
(
self
):
data
=
{
test_uri
=
'{}{}/workgroups/'
.
format
(
self
.
test_projects_uri
,
self
.
test_project
.
id
)
'name'
:
self
.
test_project_name
,
'course_id'
:
self
.
test_course_id
,
'content_id'
:
self
.
test_course_content_id
}
response
=
self
.
do_post
(
self
.
test_projects_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
test_uri
=
'{}{}/'
.
format
(
self
.
test_projects_uri
,
str
(
response
.
data
[
'id'
]))
workgroups_uri
=
'{}workgroups/'
.
format
(
test_uri
)
data
=
{
"id"
:
self
.
test_workgroup
.
id
}
data
=
{
"id"
:
self
.
test_workgroup
.
id
}
response
=
self
.
do_post
(
workgroups
_uri
,
data
)
response
=
self
.
do_post
(
test
_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
self
.
assertEqual
(
response
.
status_code
,
201
)
response
=
self
.
do_get
(
test_uri
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
data
[
'workgroups'
][
0
][
'id'
],
self
.
test_workgroup
.
id
)
self
.
assertEqual
(
response
.
data
[
0
][
'id'
],
self
.
test_workgroup
.
id
)
def
test_projects_workgroups_post_invalid_workgroup
(
self
):
def
test_projects_workgroups_post_invalid_workgroup
(
self
):
data
=
{
test_uri
=
'{}{}/workgroups/'
.
format
(
self
.
test_projects_uri
,
self
.
test_project
.
id
)
'name'
:
self
.
test_project_name
,
'course_id'
:
self
.
test_course_id
,
'content_id'
:
self
.
test_course_content_id
}
response
=
self
.
do_post
(
self
.
test_projects_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
test_uri
=
'{}{}/'
.
format
(
self
.
test_projects_uri
,
str
(
response
.
data
[
'id'
]))
workgroups_uri
=
'{}workgroups/'
.
format
(
test_uri
)
data
=
{
data
=
{
'id'
:
123456
,
'id'
:
123456
,
}
}
response
=
self
.
do_post
(
workgroups
_uri
,
data
)
response
=
self
.
do_post
(
test
_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
400
)
self
.
assertEqual
(
response
.
status_code
,
400
)
def
test_projects_detail_get_undefined
(
self
):
def
test_projects_detail_get_undefined
(
self
):
...
@@ -158,14 +151,7 @@ class ProjectsApiTests(TestCase):
...
@@ -158,14 +151,7 @@ class ProjectsApiTests(TestCase):
self
.
assertEqual
(
response
.
status_code
,
404
)
self
.
assertEqual
(
response
.
status_code
,
404
)
def
test_projects_detail_delete
(
self
):
def
test_projects_detail_delete
(
self
):
data
=
{
test_uri
=
'{}{}/'
.
format
(
self
.
test_projects_uri
,
self
.
test_project
.
id
)
'name'
:
self
.
test_project_name
,
'course_id'
:
self
.
test_course_id
,
'content_id'
:
self
.
test_course_content_id
}
response
=
self
.
do_post
(
self
.
test_projects_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
test_uri
=
'{}{}/'
.
format
(
self
.
test_projects_uri
,
str
(
response
.
data
[
'id'
]))
response
=
self
.
do_get
(
test_uri
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
status_code
,
200
)
response
=
self
.
do_delete
(
test_uri
)
response
=
self
.
do_delete
(
test_uri
)
...
...
lms/djangoapps/projects/tests/test_submission_reviews.py
View file @
efec1fff
...
@@ -12,7 +12,8 @@ from django.core.cache import cache
...
@@ -12,7 +12,8 @@ from django.core.cache import cache
from
django.test
import
TestCase
,
Client
from
django.test
import
TestCase
,
Client
from
django.test.utils
import
override_settings
from
django.test.utils
import
override_settings
from
projects.models
import
Project
,
Workgroup
,
Submission
from
projects.models
import
Project
,
Workgroup
,
WorkgroupSubmission
from
student.models
import
anonymous_id_for_user
TEST_API_KEY
=
str
(
uuid
.
uuid4
())
TEST_API_KEY
=
str
(
uuid
.
uuid4
())
...
@@ -52,24 +53,23 @@ class SubmissionReviewsApiTests(TestCase):
...
@@ -52,24 +53,23 @@ class SubmissionReviewsApiTests(TestCase):
username
=
"testing"
,
username
=
"testing"
,
is_active
=
True
is_active
=
True
)
)
self
.
anonymous_user_id
=
anonymous_id_for_user
(
self
.
test_user
,
self
.
test_course_id
)
self
.
test_project
=
Project
.
objects
.
create
(
course_id
=
self
.
test_course_id
,
content_id
=
self
.
test_course_content_id
,
)
self
.
test_workgroup
=
Workgroup
.
objects
.
create
(
self
.
test_workgroup
=
Workgroup
.
objects
.
create
(
name
=
"Test Workgroup"
,
name
=
"Test Workgroup"
,
project
=
self
.
test_project
,
)
)
self
.
test_workgroup
.
users
.
add
(
self
.
test_user
)
self
.
test_workgroup
.
users
.
add
(
self
.
test_user
)
self
.
test_workgroup
.
save
()
self
.
test_workgroup
.
save
()
self
.
test_project
=
Project
.
objects
.
create
(
self
.
test_submission
=
WorkgroupSubmission
.
objects
.
create
(
course_id
=
self
.
test_course_id
,
content_id
=
self
.
test_course_content_id
,
)
self
.
test_project
.
workgroups
.
add
(
self
.
test_workgroup
)
self
.
test_project
.
save
()
self
.
test_submission
=
Submission
.
objects
.
create
(
user
=
self
.
test_user
,
user
=
self
.
test_user
,
workgroup
=
self
.
test_workgroup
,
workgroup
=
self
.
test_workgroup
,
project
=
self
.
test_project
,
document_id
=
"Document12345.pdf"
,
document_id
=
"Document12345.pdf"
,
document_url
=
"http://test-s3.amazonaws.com/bucketname"
,
document_url
=
"http://test-s3.amazonaws.com/bucketname"
,
document_mime_type
=
"application/pdf"
document_mime_type
=
"application/pdf"
...
@@ -110,7 +110,7 @@ class SubmissionReviewsApiTests(TestCase):
...
@@ -110,7 +110,7 @@ class SubmissionReviewsApiTests(TestCase):
def
test_submission_reviews_list_post
(
self
):
def
test_submission_reviews_list_post
(
self
):
data
=
{
data
=
{
'submission'
:
self
.
test_submission
.
id
,
'submission'
:
self
.
test_submission
.
id
,
'reviewer'
:
self
.
test_user
.
id
,
'reviewer'
:
self
.
anonymous_user_
id
,
'question'
:
self
.
test_question
,
'question'
:
self
.
test_question
,
'answer'
:
self
.
test_answer
,
'answer'
:
self
.
test_answer
,
}
}
...
@@ -124,7 +124,7 @@ class SubmissionReviewsApiTests(TestCase):
...
@@ -124,7 +124,7 @@ class SubmissionReviewsApiTests(TestCase):
)
)
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
[
'reviewer'
],
self
.
test_user
.
id
)
self
.
assertEqual
(
response
.
data
[
'reviewer'
],
self
.
anonymous_user_
id
)
self
.
assertEqual
(
response
.
data
[
'submission'
],
self
.
test_submission
.
id
)
self
.
assertEqual
(
response
.
data
[
'submission'
],
self
.
test_submission
.
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
)
...
@@ -134,7 +134,7 @@ class SubmissionReviewsApiTests(TestCase):
...
@@ -134,7 +134,7 @@ class SubmissionReviewsApiTests(TestCase):
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
,
'reviewer'
:
self
.
test_user
.
id
,
'reviewer'
:
self
.
anonymous_user_
id
,
'question'
:
self
.
test_question
,
'question'
:
self
.
test_question
,
'answer'
:
self
.
test_answer
,
'answer'
:
self
.
test_answer
,
}
}
...
@@ -150,7 +150,7 @@ class SubmissionReviewsApiTests(TestCase):
...
@@ -150,7 +150,7 @@ class SubmissionReviewsApiTests(TestCase):
)
)
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
[
'reviewer'
],
self
.
test_user
.
id
)
self
.
assertEqual
(
response
.
data
[
'reviewer'
],
self
.
anonymous_user_
id
)
self
.
assertEqual
(
response
.
data
[
'submission'
],
self
.
test_submission
.
id
)
self
.
assertEqual
(
response
.
data
[
'submission'
],
self
.
test_submission
.
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
)
...
@@ -165,11 +165,12 @@ class SubmissionReviewsApiTests(TestCase):
...
@@ -165,11 +165,12 @@ class SubmissionReviewsApiTests(TestCase):
def
test_submission_reviews_detail_delete
(
self
):
def
test_submission_reviews_detail_delete
(
self
):
data
=
{
data
=
{
'submission'
:
self
.
test_submission
.
id
,
'submission'
:
self
.
test_submission
.
id
,
'reviewer'
:
self
.
test_user
.
id
,
'reviewer'
:
self
.
anonymous_user_
id
,
'question'
:
self
.
test_question
,
'question'
:
self
.
test_question
,
'answer'
:
self
.
test_answer
,
'answer'
:
self
.
test_answer
,
}
}
response
=
self
.
do_post
(
self
.
test_submission_reviews_uri
,
data
)
response
=
self
.
do_post
(
self
.
test_submission_reviews_uri
,
data
)
print
response
.
data
self
.
assertEqual
(
response
.
status_code
,
201
)
self
.
assertEqual
(
response
.
status_code
,
201
)
test_uri
=
'{}{}/'
.
format
(
self
.
test_submission_reviews_uri
,
str
(
response
.
data
[
'id'
]))
test_uri
=
'{}{}/'
.
format
(
self
.
test_submission_reviews_uri
,
str
(
response
.
data
[
'id'
]))
response
=
self
.
do_get
(
test_uri
)
response
=
self
.
do_get
(
test_uri
)
...
...
lms/djangoapps/projects/tests/test_workgroup_reviews.py
0 → 100644
View file @
efec1fff
# pylint: disable=E1103
"""
Run these tests @ Devstack:
rake fasttest_lms[common/djangoapps/projects/tests/test_workgroup_reviews.py]
"""
import
json
import
uuid
from
django.contrib.auth.models
import
User
from
django.core.cache
import
cache
from
django.test
import
TestCase
,
Client
from
django.test.utils
import
override_settings
from
projects.models
import
Project
,
Workgroup
,
WorkgroupSubmission
from
student.models
import
anonymous_id_for_user
TEST_API_KEY
=
str
(
uuid
.
uuid4
())
class
SecureClient
(
Client
):
""" Django test client using a "secure" connection. """
def
__init__
(
self
,
*
args
,
**
kwargs
):
kwargs
=
kwargs
.
copy
()
kwargs
.
update
({
'SERVER_PORT'
:
443
,
'wsgi.url_scheme'
:
'https'
})
super
(
SecureClient
,
self
)
.
__init__
(
*
args
,
**
kwargs
)
@override_settings
(
EDX_API_KEY
=
TEST_API_KEY
)
class
WorkgroupReviewsApiTests
(
TestCase
):
""" Test suite for Users API views """
def
setUp
(
self
):
self
.
test_server_prefix
=
'https://testserver'
self
.
test_users_uri
=
'/api/users/'
self
.
test_workgroups_uri
=
'/api/workgroups/'
self
.
test_projects_uri
=
'/api/projects/'
self
.
test_workgroup_reviews_uri
=
'/api/workgroup_reviews/'
self
.
test_course_id
=
'edx/demo/course'
self
.
test_bogus_course_id
=
'foo/bar/baz'
self
.
test_course_content_id
=
"i4x://blah"
self
.
test_bogus_course_content_id
=
"14x://foo/bar/baz"
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_user
=
User
.
objects
.
create
(
email
=
"test@edx.org"
,
username
=
"testing"
,
is_active
=
True
)
self
.
anonymous_user_id
=
anonymous_id_for_user
(
self
.
test_user
,
self
.
test_course_id
)
self
.
test_project
=
Project
.
objects
.
create
(
course_id
=
self
.
test_course_id
,
content_id
=
self
.
test_course_content_id
,
)
self
.
test_workgroup
=
Workgroup
.
objects
.
create
(
name
=
"Test Workgroup"
,
project
=
self
.
test_project
,
)
self
.
test_workgroup
.
users
.
add
(
self
.
test_user
)
self
.
test_workgroup
.
save
()
self
.
test_submission
=
WorkgroupSubmission
.
objects
.
create
(
user
=
self
.
test_user
,
workgroup
=
self
.
test_workgroup
,
document_id
=
"Document12345.pdf"
,
document_url
=
"http://test-s3.amazonaws.com/bucketname"
,
document_mime_type
=
"application/pdf"
)
self
.
client
=
SecureClient
()
cache
.
clear
()
def
do_post
(
self
,
uri
,
data
):
"""Submit an HTTP POST request"""
headers
=
{
'X-Edx-Api-Key'
:
str
(
TEST_API_KEY
),
}
json_data
=
json
.
dumps
(
data
)
response
=
self
.
client
.
post
(
uri
,
headers
=
headers
,
content_type
=
'application/json'
,
data
=
json_data
)
return
response
def
do_get
(
self
,
uri
):
"""Submit an HTTP GET request"""
headers
=
{
'Content-Type'
:
'application/json'
,
'X-Edx-Api-Key'
:
str
(
TEST_API_KEY
),
}
response
=
self
.
client
.
get
(
uri
,
headers
=
headers
)
return
response
def
do_delete
(
self
,
uri
):
"""Submit an HTTP DELETE request"""
headers
=
{
'Content-Type'
:
'application/json'
,
'X-Edx-Api-Key'
:
str
(
TEST_API_KEY
),
}
response
=
self
.
client
.
delete
(
uri
,
headers
=
headers
)
return
response
def
test_workgroup_reviews_list_post
(
self
):
data
=
{
'workgroup'
:
self
.
test_workgroup
.
id
,
'reviewer'
:
self
.
anonymous_user_id
,
'question'
:
self
.
test_question
,
'answer'
:
self
.
test_answer
,
}
response
=
self
.
do_post
(
self
.
test_workgroup_reviews_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
self
.
assertGreater
(
response
.
data
[
'id'
],
0
)
confirm_uri
=
'{}{}{}/'
.
format
(
self
.
test_server_prefix
,
self
.
test_workgroup_reviews_uri
,
str
(
response
.
data
[
'id'
])
)
self
.
assertEqual
(
response
.
data
[
'url'
],
confirm_uri
)
self
.
assertGreater
(
response
.
data
[
'id'
],
0
)
self
.
assertEqual
(
response
.
data
[
'reviewer'
],
self
.
anonymous_user_id
)
self
.
assertEqual
(
response
.
data
[
'workgroup'
],
self
.
test_workgroup
.
id
)
self
.
assertEqual
(
response
.
data
[
'question'
],
self
.
test_question
)
self
.
assertEqual
(
response
.
data
[
'answer'
],
self
.
test_answer
)
self
.
assertIsNotNone
(
response
.
data
[
'created'
])
self
.
assertIsNotNone
(
response
.
data
[
'modified'
])
def
test_workgroup_reviews_detail_get
(
self
):
data
=
{
'workgroup'
:
self
.
test_workgroup
.
id
,
'reviewer'
:
self
.
anonymous_user_id
,
'question'
:
self
.
test_question
,
'answer'
:
self
.
test_answer
,
}
response
=
self
.
do_post
(
self
.
test_workgroup_reviews_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
test_uri
=
'{}{}/'
.
format
(
self
.
test_workgroup_reviews_uri
,
str
(
response
.
data
[
'id'
]))
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
confirm_uri
=
'{}{}{}/'
.
format
(
self
.
test_server_prefix
,
self
.
test_workgroup_reviews_uri
,
str
(
response
.
data
[
'id'
])
)
self
.
assertEqual
(
response
.
data
[
'url'
],
confirm_uri
)
self
.
assertGreater
(
response
.
data
[
'id'
],
0
)
self
.
assertEqual
(
response
.
data
[
'reviewer'
],
self
.
anonymous_user_id
)
self
.
assertEqual
(
response
.
data
[
'workgroup'
],
self
.
test_workgroup
.
id
)
self
.
assertEqual
(
response
.
data
[
'question'
],
self
.
test_question
)
self
.
assertEqual
(
response
.
data
[
'answer'
],
self
.
test_answer
)
self
.
assertIsNotNone
(
response
.
data
[
'created'
])
self
.
assertIsNotNone
(
response
.
data
[
'modified'
])
def
test_workgroup_reviews_detail_get_undefined
(
self
):
test_uri
=
'/api/workgroup_reviews/123456789/'
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
404
)
def
test_workgroup_reviews_detail_delete
(
self
):
data
=
{
'workgroup'
:
self
.
test_workgroup
.
id
,
'reviewer'
:
self
.
anonymous_user_id
,
'question'
:
self
.
test_question
,
'answer'
:
self
.
test_answer
,
}
response
=
self
.
do_post
(
self
.
test_workgroup_reviews_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
test_uri
=
'{}{}/'
.
format
(
self
.
test_workgroup_reviews_uri
,
str
(
response
.
data
[
'id'
]))
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
response
=
self
.
do_delete
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
204
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
404
)
lms/djangoapps/projects/tests/test_submissions.py
→
lms/djangoapps/projects/tests/test_
workgroup_
submissions.py
View file @
efec1fff
...
@@ -54,19 +54,18 @@ class SubmissionsApiTests(TestCase):
...
@@ -54,19 +54,18 @@ class SubmissionsApiTests(TestCase):
is_active
=
True
is_active
=
True
)
)
self
.
test_project
=
Project
.
objects
.
create
(
course_id
=
self
.
test_course_id
,
content_id
=
self
.
test_course_content_id
,
)
self
.
test_workgroup
=
Workgroup
.
objects
.
create
(
self
.
test_workgroup
=
Workgroup
.
objects
.
create
(
name
=
"Test Workgroup"
,
name
=
"Test Workgroup"
,
project
=
self
.
test_project
,
)
)
self
.
test_workgroup
.
users
.
add
(
self
.
test_user
)
self
.
test_workgroup
.
users
.
add
(
self
.
test_user
)
self
.
test_workgroup
.
save
()
self
.
test_workgroup
.
save
()
self
.
test_project
=
Project
.
objects
.
create
(
course_id
=
self
.
test_course_id
,
content_id
=
self
.
test_course_content_id
,
)
self
.
test_project
.
workgroups
.
add
(
self
.
test_workgroup
)
self
.
test_project
.
save
()
self
.
client
=
SecureClient
()
self
.
client
=
SecureClient
()
cache
.
clear
()
cache
.
clear
()
...
@@ -102,7 +101,6 @@ class SubmissionsApiTests(TestCase):
...
@@ -102,7 +101,6 @@ class SubmissionsApiTests(TestCase):
def
test_submissions_list_post
(
self
):
def
test_submissions_list_post
(
self
):
submission_data
=
{
submission_data
=
{
'user'
:
self
.
test_user
.
id
,
'user'
:
self
.
test_user
.
id
,
'project'
:
self
.
test_project
.
id
,
'workgroup'
:
self
.
test_workgroup
.
id
,
'workgroup'
:
self
.
test_workgroup
.
id
,
'document_id'
:
self
.
test_document_id
,
'document_id'
:
self
.
test_document_id
,
'document_url'
:
self
.
test_document_url
,
'document_url'
:
self
.
test_document_url
,
...
@@ -116,32 +114,21 @@ class SubmissionsApiTests(TestCase):
...
@@ -116,32 +114,21 @@ class SubmissionsApiTests(TestCase):
self
.
test_submissions_uri
,
self
.
test_submissions_uri
,
str
(
response
.
data
[
'id'
])
str
(
response
.
data
[
'id'
])
)
)
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
[
'user'
],
self
.
test_user
.
id
)
self
.
assertEqual
(
response
.
data
[
'user'
],
self
.
test_user
.
id
)
self
.
assertEqual
(
response
.
data
[
'workgroup'
],
self
.
test_workgroup
.
id
)
self
.
assertEqual
(
response
.
data
[
'workgroup'
],
self
.
test_workgroup
.
id
)
self
.
assertEqual
(
response
.
data
[
'project'
],
self
.
test_project
.
id
)
self
.
assertEqual
(
response
.
data
[
'document_id'
],
self
.
test_document_id
)
self
.
assertEqual
(
response
.
data
[
'document_id'
],
self
.
test_document_id
)
self
.
assertEqual
(
response
.
data
[
'document_url'
],
self
.
test_document_url
)
self
.
assertEqual
(
response
.
data
[
'document_url'
],
self
.
test_document_url
)
self
.
assertEqual
(
response
.
data
[
'document_mime_type'
],
self
.
test_document_mime_type
)
self
.
assertEqual
(
response
.
data
[
'document_mime_type'
],
self
.
test_document_mime_type
)
self
.
assertIsNotNone
(
response
.
data
[
'reviews'
])
self
.
assertIsNotNone
(
response
.
data
[
'created'
])
self
.
assertIsNotNone
(
response
.
data
[
'created'
])
self
.
assertIsNotNone
(
response
.
data
[
'modified'
])
self
.
assertIsNotNone
(
response
.
data
[
'modified'
])
def
test_submissions_list_post_invalid_relationships
(
self
):
def
test_submissions_list_post_invalid_relationships
(
self
):
submission_data
=
{
submission_data
=
{
'user'
:
123456
,
'user'
:
123456
,
'project'
:
self
.
test_project
.
id
,
'workgroup'
:
self
.
test_workgroup
.
id
,
'document_id'
:
self
.
test_document_id
,
'document_url'
:
self
.
test_document_url
,
'document_mime_type'
:
self
.
test_document_mime_type
,
}
response
=
self
.
do_post
(
self
.
test_submissions_uri
,
submission_data
)
self
.
assertEqual
(
response
.
status_code
,
400
)
submission_data
=
{
'user'
:
self
.
test_user
.
id
,
'project'
:
123456
,
'workgroup'
:
self
.
test_workgroup
.
id
,
'workgroup'
:
self
.
test_workgroup
.
id
,
'document_id'
:
self
.
test_document_id
,
'document_id'
:
self
.
test_document_id
,
'document_url'
:
self
.
test_document_url
,
'document_url'
:
self
.
test_document_url
,
...
@@ -152,7 +139,6 @@ class SubmissionsApiTests(TestCase):
...
@@ -152,7 +139,6 @@ class SubmissionsApiTests(TestCase):
submission_data
=
{
submission_data
=
{
'user'
:
self
.
test_user
.
id
,
'user'
:
self
.
test_user
.
id
,
'project'
:
self
.
test_project
.
id
,
'workgroup'
:
123456
,
'workgroup'
:
123456
,
'document_id'
:
self
.
test_document_id
,
'document_id'
:
self
.
test_document_id
,
'document_url'
:
self
.
test_document_url
,
'document_url'
:
self
.
test_document_url
,
...
@@ -164,7 +150,6 @@ class SubmissionsApiTests(TestCase):
...
@@ -164,7 +150,6 @@ class SubmissionsApiTests(TestCase):
def
test_submissions_detail_get
(
self
):
def
test_submissions_detail_get
(
self
):
submission_data
=
{
submission_data
=
{
'user'
:
self
.
test_user
.
id
,
'user'
:
self
.
test_user
.
id
,
'project'
:
self
.
test_project
.
id
,
'workgroup'
:
self
.
test_workgroup
.
id
,
'workgroup'
:
self
.
test_workgroup
.
id
,
'document_id'
:
self
.
test_document_id
,
'document_id'
:
self
.
test_document_id
,
'document_url'
:
self
.
test_document_url
,
'document_url'
:
self
.
test_document_url
,
...
@@ -184,10 +169,10 @@ class SubmissionsApiTests(TestCase):
...
@@ -184,10 +169,10 @@ class SubmissionsApiTests(TestCase):
self
.
assertGreater
(
response
.
data
[
'id'
],
0
)
self
.
assertGreater
(
response
.
data
[
'id'
],
0
)
self
.
assertEqual
(
response
.
data
[
'user'
],
self
.
test_user
.
id
)
self
.
assertEqual
(
response
.
data
[
'user'
],
self
.
test_user
.
id
)
self
.
assertEqual
(
response
.
data
[
'workgroup'
],
self
.
test_workgroup
.
id
)
self
.
assertEqual
(
response
.
data
[
'workgroup'
],
self
.
test_workgroup
.
id
)
self
.
assertEqual
(
response
.
data
[
'project'
],
self
.
test_project
.
id
)
self
.
assertEqual
(
response
.
data
[
'document_id'
],
self
.
test_document_id
)
self
.
assertEqual
(
response
.
data
[
'document_id'
],
self
.
test_document_id
)
self
.
assertEqual
(
response
.
data
[
'document_url'
],
self
.
test_document_url
)
self
.
assertEqual
(
response
.
data
[
'document_url'
],
self
.
test_document_url
)
self
.
assertEqual
(
response
.
data
[
'document_mime_type'
],
self
.
test_document_mime_type
)
self
.
assertEqual
(
response
.
data
[
'document_mime_type'
],
self
.
test_document_mime_type
)
self
.
assertIsNotNone
(
response
.
data
[
'reviews'
])
self
.
assertIsNotNone
(
response
.
data
[
'created'
])
self
.
assertIsNotNone
(
response
.
data
[
'created'
])
self
.
assertIsNotNone
(
response
.
data
[
'modified'
])
self
.
assertIsNotNone
(
response
.
data
[
'modified'
])
...
@@ -196,10 +181,9 @@ class SubmissionsApiTests(TestCase):
...
@@ -196,10 +181,9 @@ class SubmissionsApiTests(TestCase):
response
=
self
.
do_get
(
test_uri
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
404
)
self
.
assertEqual
(
response
.
status_code
,
404
)
def
test_subm
n
issions_detail_delete
(
self
):
def
test_submissions_detail_delete
(
self
):
submission_data
=
{
submission_data
=
{
'user'
:
self
.
test_user
.
id
,
'user'
:
self
.
test_user
.
id
,
'project'
:
self
.
test_project
.
id
,
'workgroup'
:
self
.
test_workgroup
.
id
,
'workgroup'
:
self
.
test_workgroup
.
id
,
'document_id'
:
self
.
test_document_id
,
'document_id'
:
self
.
test_document_id
,
'document_url'
:
self
.
test_document_url
,
'document_url'
:
self
.
test_document_url
,
...
...
lms/djangoapps/projects/tests/test_workgroups.py
View file @
efec1fff
...
@@ -13,6 +13,7 @@ from django.test import TestCase, Client
...
@@ -13,6 +13,7 @@ from django.test import TestCase, Client
from
django.test.utils
import
override_settings
from
django.test.utils
import
override_settings
from
api_manager.models
import
GroupProfile
from
api_manager.models
import
GroupProfile
from
projects.models
import
Project
TEST_API_KEY
=
str
(
uuid
.
uuid4
())
TEST_API_KEY
=
str
(
uuid
.
uuid4
())
...
@@ -53,6 +54,11 @@ class WorkgroupsApiTests(TestCase):
...
@@ -53,6 +54,11 @@ class WorkgroupsApiTests(TestCase):
group_type
=
"series"
group_type
=
"series"
)
)
self
.
test_project
=
Project
.
objects
.
create
(
course_id
=
self
.
test_course_id
,
content_id
=
self
.
test_course_content_id
)
self
.
test_user_email
=
str
(
uuid
.
uuid4
())
self
.
test_user_email
=
str
(
uuid
.
uuid4
())
self
.
test_user_username
=
str
(
uuid
.
uuid4
())
self
.
test_user_username
=
str
(
uuid
.
uuid4
())
self
.
test_user
=
User
.
objects
.
create
(
self
.
test_user
=
User
.
objects
.
create
(
...
@@ -95,6 +101,7 @@ class WorkgroupsApiTests(TestCase):
...
@@ -95,6 +101,7 @@ class WorkgroupsApiTests(TestCase):
def
test_workgroups_list_post
(
self
):
def
test_workgroups_list_post
(
self
):
data
=
{
data
=
{
'name'
:
self
.
test_workgroup_name
,
'name'
:
self
.
test_workgroup_name
,
'project'
:
self
.
test_project
.
id
}
}
response
=
self
.
do_post
(
self
.
test_workgroups_uri
,
data
)
response
=
self
.
do_post
(
self
.
test_workgroups_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
self
.
assertEqual
(
response
.
status_code
,
201
)
...
@@ -106,14 +113,20 @@ class WorkgroupsApiTests(TestCase):
...
@@ -106,14 +113,20 @@ class WorkgroupsApiTests(TestCase):
)
)
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
[
'name'
],
self
.
test_workgroup_name
)
self
.
assertEqual
(
response
.
data
[
'project'
],
self
.
test_project
.
id
)
self
.
assertIsNotNone
(
response
.
data
[
'users'
])
self
.
assertIsNotNone
(
response
.
data
[
'users'
])
self
.
assertIsNotNone
(
response
.
data
[
'groups'
])
self
.
assertIsNotNone
(
response
.
data
[
'groups'
])
self
.
assertIsNotNone
(
response
.
data
[
'submissions'
])
self
.
assertIsNotNone
(
response
.
data
[
'workgroup_reviews'
])
self
.
assertIsNotNone
(
response
.
data
[
'peer_reviews'
])
self
.
assertIsNotNone
(
response
.
data
[
'created'
])
self
.
assertIsNotNone
(
response
.
data
[
'created'
])
self
.
assertIsNotNone
(
response
.
data
[
'modified'
])
self
.
assertIsNotNone
(
response
.
data
[
'modified'
])
def
test_workgroups_detail_get
(
self
):
def
test_workgroups_detail_get
(
self
):
data
=
{
data
=
{
'name'
:
self
.
test_workgroup_name
,
'name'
:
self
.
test_workgroup_name
,
'project'
:
self
.
test_project
.
id
}
}
response
=
self
.
do_post
(
self
.
test_workgroups_uri
,
data
)
response
=
self
.
do_post
(
self
.
test_workgroups_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
self
.
assertEqual
(
response
.
status_code
,
201
)
...
@@ -123,14 +136,20 @@ class WorkgroupsApiTests(TestCase):
...
@@ -123,14 +136,20 @@ class WorkgroupsApiTests(TestCase):
confirm_uri
=
self
.
test_server_prefix
+
test_uri
confirm_uri
=
self
.
test_server_prefix
+
test_uri
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
[
'name'
],
self
.
test_workgroup_name
)
self
.
assertEqual
(
response
.
data
[
'project'
],
self
.
test_project
.
id
)
self
.
assertIsNotNone
(
response
.
data
[
'users'
])
self
.
assertIsNotNone
(
response
.
data
[
'users'
])
self
.
assertIsNotNone
(
response
.
data
[
'groups'
])
self
.
assertIsNotNone
(
response
.
data
[
'groups'
])
self
.
assertIsNotNone
(
response
.
data
[
'submissions'
])
self
.
assertIsNotNone
(
response
.
data
[
'workgroup_reviews'
])
self
.
assertIsNotNone
(
response
.
data
[
'peer_reviews'
])
self
.
assertIsNotNone
(
response
.
data
[
'created'
])
self
.
assertIsNotNone
(
response
.
data
[
'created'
])
self
.
assertIsNotNone
(
response
.
data
[
'modified'
])
self
.
assertIsNotNone
(
response
.
data
[
'modified'
])
def
test_workgroups_groups_post
(
self
):
def
test_workgroups_groups_post
(
self
):
data
=
{
data
=
{
'name'
:
self
.
test_workgroup_name
,
'name'
:
self
.
test_workgroup_name
,
'project'
:
self
.
test_project
.
id
}
}
response
=
self
.
do_post
(
self
.
test_workgroups_uri
,
data
)
response
=
self
.
do_post
(
self
.
test_workgroups_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
self
.
assertEqual
(
response
.
status_code
,
201
)
...
@@ -142,6 +161,7 @@ class WorkgroupsApiTests(TestCase):
...
@@ -142,6 +161,7 @@ class WorkgroupsApiTests(TestCase):
response
=
self
.
do_get
(
test_uri
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
data
[
'groups'
][
0
][
'id'
],
self
.
test_group
.
id
)
self
.
assertEqual
(
response
.
data
[
'groups'
][
0
][
'id'
],
self
.
test_group
.
id
)
self
.
assertEqual
(
response
.
data
[
'groups'
][
0
][
'name'
],
self
.
test_group
.
name
)
test_groupnoprofile_name
=
str
(
uuid
.
uuid4
())
test_groupnoprofile_name
=
str
(
uuid
.
uuid4
())
test_groupnoprofile
=
Group
.
objects
.
create
(
test_groupnoprofile
=
Group
.
objects
.
create
(
...
@@ -155,11 +175,30 @@ class WorkgroupsApiTests(TestCase):
...
@@ -155,11 +175,30 @@ class WorkgroupsApiTests(TestCase):
self
.
assertEqual
(
response
.
data
[
'groups'
][
1
][
'id'
],
test_groupnoprofile
.
id
)
self
.
assertEqual
(
response
.
data
[
'groups'
][
1
][
'id'
],
test_groupnoprofile
.
id
)
self
.
assertEqual
(
response
.
data
[
'groups'
][
1
][
'name'
],
test_groupnoprofile_name
)
self
.
assertEqual
(
response
.
data
[
'groups'
][
1
][
'name'
],
test_groupnoprofile_name
)
def
test_workgroups_groups_get
(
self
):
data
=
{
'name'
:
self
.
test_workgroup_name
,
'project'
:
self
.
test_project
.
id
}
response
=
self
.
do_post
(
self
.
test_workgroups_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
test_uri
=
'{}{}/'
.
format
(
self
.
test_workgroups_uri
,
str
(
response
.
data
[
'id'
]))
groups_uri
=
'{}groups/'
.
format
(
test_uri
)
data
=
{
"id"
:
self
.
test_group
.
id
}
response
=
self
.
do_post
(
groups_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
response
=
self
.
do_get
(
groups_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
data
[
0
][
'id'
],
self
.
test_group
.
id
)
self
.
assertEqual
(
response
.
data
[
0
][
'name'
],
self
.
test_group
.
name
)
def
test_workgroups_users_post
(
self
):
def
test_workgroups_users_post
(
self
):
data
=
{
data
=
{
'name'
:
self
.
test_workgroup_name
,
'name'
:
self
.
test_workgroup_name
,
'project'
:
self
.
test_project
.
id
}
}
response
=
self
.
do_post
(
self
.
test_workgroups_uri
,
data
)
response
=
self
.
do_post
(
self
.
test_workgroups_uri
,
data
)
print
response
.
data
self
.
assertEqual
(
response
.
status_code
,
201
)
self
.
assertEqual
(
response
.
status_code
,
201
)
test_uri
=
'{}{}/'
.
format
(
self
.
test_workgroups_uri
,
str
(
response
.
data
[
'id'
]))
test_uri
=
'{}{}/'
.
format
(
self
.
test_workgroups_uri
,
str
(
response
.
data
[
'id'
]))
users_uri
=
'{}users/'
.
format
(
test_uri
)
users_uri
=
'{}users/'
.
format
(
test_uri
)
...
@@ -170,9 +209,54 @@ class WorkgroupsApiTests(TestCase):
...
@@ -170,9 +209,54 @@ class WorkgroupsApiTests(TestCase):
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
data
[
'users'
][
0
][
'id'
],
self
.
test_user
.
id
)
self
.
assertEqual
(
response
.
data
[
'users'
][
0
][
'id'
],
self
.
test_user
.
id
)
def
test_workgroups_users_get
(
self
):
data
=
{
'name'
:
self
.
test_workgroup_name
,
'project'
:
self
.
test_project
.
id
}
response
=
self
.
do_post
(
self
.
test_workgroups_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
test_uri
=
'{}{}/'
.
format
(
self
.
test_workgroups_uri
,
str
(
response
.
data
[
'id'
]))
users_uri
=
'{}users/'
.
format
(
test_uri
)
data
=
{
"id"
:
self
.
test_user
.
id
}
response
=
self
.
do_post
(
users_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
response
=
self
.
do_get
(
users_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
data
[
0
][
'id'
],
self
.
test_user
.
id
)
self
.
assertEqual
(
response
.
data
[
0
][
'username'
],
self
.
test_user
.
username
)
self
.
assertEqual
(
response
.
data
[
0
][
'email'
],
self
.
test_user
.
email
)
def
test_workgroups_peer_reviews_get
(
self
):
data
=
{
'name'
:
self
.
test_workgroup_name
,
'project'
:
self
.
test_project
.
id
}
response
=
self
.
do_post
(
self
.
test_workgroups_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
workgroup_id
=
response
.
data
[
'id'
]
pr_data
=
{
'workgroup'
:
workgroup_id
,
'user'
:
self
.
test_user
.
id
,
'reviewer'
:
self
.
test_user
.
username
,
'question'
:
'Test question?'
,
'answer'
:
'Test answer!'
}
response
=
self
.
do_post
(
'/api/peer_reviews/'
,
pr_data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
pr_id
=
response
.
data
[
'id'
]
test_uri
=
'{}{}/'
.
format
(
self
.
test_workgroups_uri
,
workgroup_id
)
peer_reviews_uri
=
'{}peer_reviews/'
.
format
(
test_uri
)
response
=
self
.
do_get
(
peer_reviews_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
data
[
0
][
'id'
],
pr_id
)
self
.
assertEqual
(
response
.
data
[
0
][
'reviewer'
],
self
.
test_user
.
username
)
def
test_submissions_list_post_invalid_relationships
(
self
):
def
test_submissions_list_post_invalid_relationships
(
self
):
data
=
{
data
=
{
'name'
:
self
.
test_workgroup_name
,
'name'
:
self
.
test_workgroup_name
,
'project'
:
self
.
test_project
.
id
}
}
response
=
self
.
do_post
(
self
.
test_workgroups_uri
,
data
)
response
=
self
.
do_post
(
self
.
test_workgroups_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
self
.
assertEqual
(
response
.
status_code
,
201
)
...
@@ -188,6 +272,7 @@ class WorkgroupsApiTests(TestCase):
...
@@ -188,6 +272,7 @@ class WorkgroupsApiTests(TestCase):
response
=
self
.
do_post
(
groups_uri
,
data
)
response
=
self
.
do_post
(
groups_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
400
)
self
.
assertEqual
(
response
.
status_code
,
400
)
def
test_workgroups_detail_get_undefined
(
self
):
def
test_workgroups_detail_get_undefined
(
self
):
test_uri
=
'/api/workgroups/123456789/'
test_uri
=
'/api/workgroups/123456789/'
response
=
self
.
do_get
(
test_uri
)
response
=
self
.
do_get
(
test_uri
)
...
@@ -196,6 +281,7 @@ class WorkgroupsApiTests(TestCase):
...
@@ -196,6 +281,7 @@ class WorkgroupsApiTests(TestCase):
def
test_workgroups_detail_delete
(
self
):
def
test_workgroups_detail_delete
(
self
):
data
=
{
data
=
{
'name'
:
self
.
test_workgroup_name
,
'name'
:
self
.
test_workgroup_name
,
'project'
:
self
.
test_project
.
id
}
}
response
=
self
.
do_post
(
self
.
test_workgroups_uri
,
data
)
response
=
self
.
do_post
(
self
.
test_workgroups_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
self
.
assertEqual
(
response
.
status_code
,
201
)
...
...
lms/djangoapps/projects/views.py
View file @
efec1fff
...
@@ -6,15 +6,15 @@ from django.contrib.auth.models import Group, User
...
@@ -6,15 +6,15 @@ from django.contrib.auth.models import Group, User
from
django.core.exceptions
import
ObjectDoesNotExist
from
django.core.exceptions
import
ObjectDoesNotExist
from
rest_framework
import
viewsets
from
rest_framework
import
viewsets
from
rest_framework.decorators
import
action
from
rest_framework.decorators
import
action
,
link
from
rest_framework
import
status
from
rest_framework
import
status
from
rest_framework.response
import
Response
from
rest_framework.response
import
Response
from
.models
import
Workgroup
,
Project
,
Submission
from
.models
import
Project
,
Workgroup
,
Workgroup
Submission
from
.models
import
SubmissionReview
,
PeerReview
from
.models
import
WorkgroupReview
,
WorkgroupSubmissionReview
,
Workgroup
PeerReview
from
.serializers
import
UserSerializer
,
GroupSerializer
from
.serializers
import
UserSerializer
,
GroupSerializer
from
.serializers
import
WorkgroupSerializer
,
ProjectSerializer
,
SubmissionSerializer
from
.serializers
import
ProjectSerializer
,
WorkgroupSerializer
,
Workgroup
SubmissionSerializer
from
.serializers
import
SubmissionReviewSerializer
,
PeerReviewSerializer
from
.serializers
import
WorkgroupReviewSerializer
,
WorkgroupSubmissionReviewSerializer
,
Workgroup
PeerReviewSerializer
class
GroupViewSet
(
viewsets
.
ModelViewSet
):
class
GroupViewSet
(
viewsets
.
ModelViewSet
):
...
@@ -40,37 +40,69 @@ class WorkgroupsViewSet(viewsets.ModelViewSet):
...
@@ -40,37 +40,69 @@ class WorkgroupsViewSet(viewsets.ModelViewSet):
serializer_class
=
WorkgroupSerializer
serializer_class
=
WorkgroupSerializer
model
=
Workgroup
model
=
Workgroup
@action
()
@action
(
methods
=
[
'get'
,
'post'
]
)
def
groups
(
self
,
request
,
pk
):
def
groups
(
self
,
request
,
pk
):
"""
"""
Add a Group to a Workgroup
Add a Group to a Workgroup
"""
"""
group_id
=
request
.
DATA
.
get
(
'id'
)
if
request
.
method
==
'GET'
:
try
:
groups
=
Group
.
objects
.
filter
(
workgroups
=
pk
)
group
=
Group
.
objects
.
get
(
id
=
group_id
)
response_data
=
[]
except
ObjectDoesNotExist
:
if
groups
:
message
=
'Group {} does not exist'
.
format
(
group_id
)
for
group
in
groups
:
return
Response
({
"detail"
:
message
},
status
.
HTTP_400_BAD_REQUEST
)
serializer
=
GroupSerializer
(
group
)
workgroup
=
self
.
get_object
()
response_data
.
append
(
serializer
.
data
)
workgroup
.
groups
.
add
(
group
)
return
Response
(
response_data
,
status
=
status
.
HTTP_200_OK
)
workgroup
.
save
()
else
:
return
Response
({},
status
=
status
.
HTTP_201_CREATED
)
group_id
=
request
.
DATA
.
get
(
'id'
)
try
:
@action
()
group
=
Group
.
objects
.
get
(
id
=
group_id
)
except
ObjectDoesNotExist
:
message
=
'Group {} does not exist'
.
format
(
group_id
)
return
Response
({
"detail"
:
message
},
status
.
HTTP_400_BAD_REQUEST
)
workgroup
=
self
.
get_object
()
workgroup
.
groups
.
add
(
group
)
workgroup
.
save
()
print
workgroup
.
groups
.
all
()
return
Response
({},
status
=
status
.
HTTP_201_CREATED
)
@action
(
methods
=
[
'get'
,
'post'
])
def
users
(
self
,
request
,
pk
):
def
users
(
self
,
request
,
pk
):
"""
"""
Add a User to a Workgroup
Add a User to a Workgroup
"""
"""
user_id
=
request
.
DATA
.
get
(
'id'
)
if
request
.
method
==
'GET'
:
try
:
users
=
User
.
objects
.
filter
(
workgroups
=
pk
)
user
=
User
.
objects
.
get
(
id
=
user_id
)
response_data
=
[]
except
ObjectDoesNotExist
:
if
users
:
message
=
'User {} does not exist'
.
format
(
user_id
)
for
user
in
users
:
return
Response
({
"detail"
:
message
},
status
.
HTTP_400_BAD_REQUEST
)
serializer
=
UserSerializer
(
user
)
workgroup
=
self
.
get_object
()
response_data
.
append
(
serializer
.
data
)
workgroup
.
users
.
add
(
user
)
return
Response
(
response_data
,
status
=
status
.
HTTP_200_OK
)
workgroup
.
save
()
else
:
return
Response
({},
status
=
status
.
HTTP_201_CREATED
)
user_id
=
request
.
DATA
.
get
(
'id'
)
try
:
user
=
User
.
objects
.
get
(
id
=
user_id
)
except
ObjectDoesNotExist
:
message
=
'User {} does not exist'
.
format
(
user_id
)
return
Response
({
"detail"
:
message
},
status
.
HTTP_400_BAD_REQUEST
)
workgroup
=
self
.
get_object
()
workgroup
.
users
.
add
(
user
)
workgroup
.
save
()
return
Response
({},
status
=
status
.
HTTP_201_CREATED
)
@link
()
def
peer_reviews
(
self
,
request
,
pk
):
"""
View Peer Reviews for a specific Workgroup
"""
peer_reviews
=
WorkgroupPeerReview
.
objects
.
filter
(
workgroup
=
pk
)
response_data
=
[]
if
peer_reviews
:
for
peer_review
in
peer_reviews
:
serializer
=
WorkgroupPeerReviewSerializer
(
peer_review
)
response_data
.
append
(
serializer
.
data
)
return
Response
(
response_data
,
status
=
status
.
HTTP_200_OK
)
class
ProjectsViewSet
(
viewsets
.
ModelViewSet
):
class
ProjectsViewSet
(
viewsets
.
ModelViewSet
):
...
@@ -80,42 +112,59 @@ class ProjectsViewSet(viewsets.ModelViewSet):
...
@@ -80,42 +112,59 @@ class ProjectsViewSet(viewsets.ModelViewSet):
serializer_class
=
ProjectSerializer
serializer_class
=
ProjectSerializer
model
=
Project
model
=
Project
@action
()
@action
(
methods
=
[
'get'
,
'post'
]
)
def
workgroups
(
self
,
request
,
pk
):
def
workgroups
(
self
,
request
,
pk
):
"""
"""
Add a Workgroup to a Project
Add a Workgroup to a Project
"""
"""
workgroup_id
=
request
.
DATA
.
get
(
'id'
)
if
request
.
method
==
'GET'
:
try
:
workgroups
=
Workgroup
.
objects
.
filter
(
project
=
pk
)
workgroup
=
Workgroup
.
objects
.
get
(
id
=
workgroup_id
)
response_data
=
[]
except
ObjectDoesNotExist
:
if
workgroups
:
message
=
'Workgroup {} does not exist'
.
format
(
workgroup_id
)
for
workgroup
in
workgroups
:
return
Response
({
"detail"
:
message
},
status
.
HTTP_400_BAD_REQUEST
)
serializer
=
WorkgroupSerializer
(
workgroup
)
project
=
self
.
get_object
()
response_data
.
append
(
serializer
.
data
)
project
.
workgroups
.
add
(
workgroup
)
return
Response
(
response_data
,
status
=
status
.
HTTP_200_OK
)
project
.
save
()
else
:
return
Response
({},
status
=
status
.
HTTP_201_CREATED
)
workgroup_id
=
request
.
DATA
.
get
(
'id'
)
try
:
workgroup
=
Workgroup
.
objects
.
get
(
id
=
workgroup_id
)
except
ObjectDoesNotExist
:
message
=
'Workgroup {} does not exist'
.
format
(
workgroup_id
)
return
Response
({
"detail"
:
message
},
status
.
HTTP_400_BAD_REQUEST
)
project
=
self
.
get_object
()
project
.
workgroups
.
add
(
workgroup
)
project
.
save
()
return
Response
({},
status
=
status
.
HTTP_201_CREATED
)
class
WorkgroupSubmissionsViewSet
(
viewsets
.
ModelViewSet
):
"""
Django Rest Framework ViewSet for the Submission model.
"""
serializer_class
=
WorkgroupSubmissionSerializer
model
=
WorkgroupSubmission
class
Submission
sViewSet
(
viewsets
.
ModelViewSet
):
class
WorkgroupReview
sViewSet
(
viewsets
.
ModelViewSet
):
"""
"""
Django Rest Framework ViewSet for the
Submission
model.
Django Rest Framework ViewSet for the
ProjectReview
model.
"""
"""
serializer_class
=
Submission
Serializer
serializer_class
=
WorkgroupReview
Serializer
model
=
Submission
model
=
WorkgroupReview
class
SubmissionReviewsViewSet
(
viewsets
.
ModelViewSet
):
class
Workgroup
SubmissionReviewsViewSet
(
viewsets
.
ModelViewSet
):
"""
"""
Django Rest Framework ViewSet for the SubmissionReview model.
Django Rest Framework ViewSet for the SubmissionReview model.
"""
"""
serializer_class
=
SubmissionReviewSerializer
serializer_class
=
Workgroup
SubmissionReviewSerializer
model
=
SubmissionReview
model
=
Workgroup
SubmissionReview
class
PeerReviewsViewSet
(
viewsets
.
ModelViewSet
):
class
Workgroup
PeerReviewsViewSet
(
viewsets
.
ModelViewSet
):
"""
"""
Django Rest Framework ViewSet for the PeerReview model.
Django Rest Framework ViewSet for the PeerReview model.
"""
"""
serializer_class
=
PeerReviewSerializer
serializer_class
=
Workgroup
PeerReviewSerializer
model
=
PeerReview
model
=
Workgroup
PeerReview
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment