Add unit tests
This commit is contained in:
parent
949f656079
commit
dc1cb86bb8
|
|
@ -23,13 +23,17 @@ class UpdateAssignment(relay.ClientIDMutation):
|
||||||
def mutate_and_get_payload(cls, root, info, **kwargs):
|
def mutate_and_get_payload(cls, root, info, **kwargs):
|
||||||
assignment_data = kwargs.get('assignment')
|
assignment_data = kwargs.get('assignment')
|
||||||
assignment = get_object(Assignment, assignment_data.get('id'))
|
assignment = get_object(Assignment, assignment_data.get('id'))
|
||||||
|
student = info.context.user
|
||||||
|
|
||||||
|
if student.read_only:
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
(submission, _created) = assignment.submissions.get_or_create(student=info.context.user)
|
(submission, _created) = assignment.submissions.get_or_create(student=student)
|
||||||
except MultipleObjectsReturned:
|
except MultipleObjectsReturned:
|
||||||
for submission in assignment.submissions.filter(student=info.context.user):
|
for submission in assignment.submissions.filter(student=student):
|
||||||
submission.delete()
|
submission.delete()
|
||||||
submission = assignment.submissions.create(student=info.context.user)
|
submission = assignment.submissions.create(student=student)
|
||||||
submission.text = assignment_data.get('answer', '')
|
submission.text = assignment_data.get('answer', '')
|
||||||
submission.document = assignment_data.get('document', '')
|
submission.document = assignment_data.get('document', '')
|
||||||
final = assignment_data.get('final')
|
final = assignment_data.get('final')
|
||||||
|
|
@ -56,6 +60,9 @@ class UpdateSubmissionFeedback(relay.ClientIDMutation):
|
||||||
if not user.has_perm('users.can_manage_school_class_content'):
|
if not user.has_perm('users.can_manage_school_class_content'):
|
||||||
raise PermissionDenied('Missing permissions')
|
raise PermissionDenied('Missing permissions')
|
||||||
|
|
||||||
|
if user.read_only:
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
(submission_feedback, created) = SubmissionFeedback.objects.get_or_create(teacher=user,
|
(submission_feedback, created) = SubmissionFeedback.objects.get_or_create(teacher=user,
|
||||||
student_submission_id=student_submission_id)
|
student_submission_id=student_submission_id)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
UPDATE_ASSIGNMENT_MUTATION = '''
|
||||||
|
mutation UpdateAssignment($input: UpdateAssignmentInput!) {
|
||||||
|
updateAssignment(input: $input){
|
||||||
|
updatedAssignment {
|
||||||
|
id
|
||||||
|
title
|
||||||
|
assignment
|
||||||
|
submission {
|
||||||
|
id
|
||||||
|
text
|
||||||
|
final
|
||||||
|
document
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
'''
|
||||||
|
|
||||||
|
UPDATE_SUBMISSION_FEEDBACK_MUTATION = '''
|
||||||
|
mutation UpdateSubmissionFeedback($input: UpdateSubmissionFeedbackInput!) {
|
||||||
|
updateSubmissionFeedback(input: $input){
|
||||||
|
updatedSubmissionFeedback {
|
||||||
|
id
|
||||||
|
text
|
||||||
|
final
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'''
|
||||||
|
|
@ -2,6 +2,7 @@ from graphql_relay import to_global_id
|
||||||
|
|
||||||
from api.test_utils import create_client, DefaultUserTestCase
|
from api.test_utils import create_client, DefaultUserTestCase
|
||||||
from assignments.models import Assignment, StudentSubmission
|
from assignments.models import Assignment, StudentSubmission
|
||||||
|
from .queries.mutations import UPDATE_ASSIGNMENT_MUTATION
|
||||||
from ..factories import AssignmentFactory
|
from ..factories import AssignmentFactory
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -16,31 +17,14 @@ class AssignmentPermissionsTestCase(DefaultUserTestCase):
|
||||||
self.module_id = to_global_id('ModuleNode', self.assignment.module.pk)
|
self.module_id = to_global_id('ModuleNode', self.assignment.module.pk)
|
||||||
|
|
||||||
def _submit_submission(self, user=None):
|
def _submit_submission(self, user=None):
|
||||||
mutation = '''
|
|
||||||
mutation UpdateAssignment($input: UpdateAssignmentInput!) {
|
|
||||||
updateAssignment(input: $input){
|
|
||||||
updatedAssignment {
|
|
||||||
id
|
|
||||||
title
|
|
||||||
assignment
|
|
||||||
submission {
|
|
||||||
id
|
|
||||||
text
|
|
||||||
final
|
|
||||||
document
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
'''
|
|
||||||
|
|
||||||
if user is None:
|
if user is None:
|
||||||
client = create_client(self.student1)
|
client = create_client(self.student1)
|
||||||
else:
|
else:
|
||||||
client = create_client(user)
|
client = create_client(user)
|
||||||
|
|
||||||
return client.execute(mutation, variables={
|
return client.execute(UPDATE_ASSIGNMENT_MUTATION, variables={
|
||||||
'input': {
|
'input': {
|
||||||
"assignment": {
|
"assignment": {
|
||||||
"id": self.assignment_id,
|
"id": self.assignment_id,
|
||||||
|
|
|
||||||
|
|
@ -5,24 +5,10 @@ from graphql_relay import to_global_id
|
||||||
from api.schema import schema
|
from api.schema import schema
|
||||||
from assignments.factories import AssignmentFactory
|
from assignments.factories import AssignmentFactory
|
||||||
from assignments.models import StudentSubmission
|
from assignments.models import StudentSubmission
|
||||||
|
from assignments.tests.queries.mutations import UPDATE_ASSIGNMENT_MUTATION
|
||||||
from users.models import User
|
from users.models import User
|
||||||
from users.services import create_users
|
from users.services import create_users
|
||||||
|
|
||||||
UPDATE_ASSIGNMENT_MUTATION = """
|
|
||||||
mutation UpdateAssignment($input: UpdateAssignmentInput!) {
|
|
||||||
updateAssignment(input: $input) {
|
|
||||||
updatedAssignment {
|
|
||||||
id
|
|
||||||
submission {
|
|
||||||
id
|
|
||||||
text
|
|
||||||
final
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class DuplicateStudentSubmissionsTestCase(TestCase):
|
class DuplicateStudentSubmissionsTestCase(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
|
|
||||||
|
|
@ -12,14 +12,16 @@ from graphql_relay import to_global_id
|
||||||
|
|
||||||
from api.test_utils import create_client, DefaultUserTestCase
|
from api.test_utils import create_client, DefaultUserTestCase
|
||||||
from assignments.models import Assignment, StudentSubmission
|
from assignments.models import Assignment, StudentSubmission
|
||||||
|
from core.tests.base_test import SkillboxTestCase
|
||||||
from users.factories import SchoolClassFactory
|
from users.factories import SchoolClassFactory
|
||||||
from users.models import SchoolClassMember
|
from users.models import SchoolClassMember
|
||||||
|
from .queries.mutations import UPDATE_SUBMISSION_FEEDBACK_MUTATION
|
||||||
from ..factories import AssignmentFactory, StudentSubmissionFactory, SubmissionFeedbackFactory
|
from ..factories import AssignmentFactory, StudentSubmissionFactory, SubmissionFeedbackFactory
|
||||||
|
|
||||||
|
|
||||||
class SubmissionFeedbackTestCase(DefaultUserTestCase):
|
class SubmissionFeedbackTestCase(SkillboxTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(SubmissionFeedbackTestCase, self).setUp()
|
self.createDefault()
|
||||||
|
|
||||||
self.assignment = AssignmentFactory(
|
self.assignment = AssignmentFactory(
|
||||||
owner=self.teacher
|
owner=self.teacher
|
||||||
|
|
@ -38,21 +40,7 @@ class SubmissionFeedbackTestCase(DefaultUserTestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
def _create_submission_feedback(self, user, final, text, student_submission_id):
|
def _create_submission_feedback(self, user, final, text, student_submission_id):
|
||||||
mutation = '''
|
return self.get_client(user).execute(UPDATE_SUBMISSION_FEEDBACK_MUTATION, variables={
|
||||||
mutation UpdateSubmissionFeedback($input: UpdateSubmissionFeedbackInput!) {
|
|
||||||
updateSubmissionFeedback(input: $input){
|
|
||||||
updatedSubmissionFeedback {
|
|
||||||
id
|
|
||||||
text
|
|
||||||
final
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
'''
|
|
||||||
|
|
||||||
client = create_client(user)
|
|
||||||
|
|
||||||
return client.execute(mutation, variables={
|
|
||||||
'input': {
|
'input': {
|
||||||
"submissionFeedback": {
|
"submissionFeedback": {
|
||||||
"studentSubmission": student_submission_id,
|
"studentSubmission": student_submission_id,
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,75 @@
|
||||||
|
from graphql_relay import to_global_id
|
||||||
|
|
||||||
|
from assignments.factories import AssignmentFactory, StudentSubmissionFactory
|
||||||
|
from assignments.tests.queries.mutations import UPDATE_ASSIGNMENT_MUTATION, UPDATE_SUBMISSION_FEEDBACK_MUTATION
|
||||||
from core.tests.base_test import SkillboxTestCase
|
from core.tests.base_test import SkillboxTestCase
|
||||||
|
from users.models import User
|
||||||
|
|
||||||
|
|
||||||
class AssignmentReadOnlyTestCase(SkillboxTestCase):
|
class AssignmentReadOnlyTestCase(SkillboxTestCase):
|
||||||
|
def setUp(self) -> None:
|
||||||
|
self.createDefault()
|
||||||
|
self.student = User.objects.get(username='student1')
|
||||||
|
self.assignment = AssignmentFactory()
|
||||||
|
self.assignment_id = to_global_id('AssignmentNode', self.assignment.id)
|
||||||
|
|
||||||
def test_edit_assignment_fails(self):
|
def test_edit_assignment_fails(self):
|
||||||
raise NotImplementedError()
|
variables = {
|
||||||
|
"input": {
|
||||||
|
"assignment": {
|
||||||
|
"answer": "bla",
|
||||||
|
"document": "",
|
||||||
|
"final": False,
|
||||||
|
"id": self.assignment_id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result = self.get_client(self.student).execute(UPDATE_ASSIGNMENT_MUTATION, variables=variables)
|
||||||
|
self.assertIsNotNone(result.get('errors'))
|
||||||
|
|
||||||
def test_share_assignment_fails(self):
|
def test_share_assignment_fails(self):
|
||||||
raise NotImplementedError()
|
variables = {
|
||||||
|
"input": {
|
||||||
|
"assignment": {
|
||||||
|
"answer": "bla",
|
||||||
|
"document": "",
|
||||||
|
"final": True,
|
||||||
|
"id": self.assignment_id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result = self.get_client(self.student).execute(UPDATE_ASSIGNMENT_MUTATION, variables=variables)
|
||||||
|
self.assertIsNotNone(result.get('errors'))
|
||||||
|
|
||||||
def test_edit_feedback_fails(self):
|
def test_edit_feedback_fails(self):
|
||||||
raise NotImplementedError()
|
student_submission = StudentSubmissionFactory(assignment=self.assignment, student=self.student1,
|
||||||
|
final=True)
|
||||||
|
student_submission_id = to_global_id('StudentSubmissionNode', student_submission.id)
|
||||||
|
result = self.get_client(self.teacher).execute(UPDATE_SUBMISSION_FEEDBACK_MUTATION, variables={
|
||||||
|
'input': {
|
||||||
|
"submissionFeedback": {
|
||||||
|
"studentSubmission": student_submission_id,
|
||||||
|
"text": "Feedback",
|
||||||
|
"final": False
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
self.assertIsNotNone(result.get('errors'))
|
||||||
|
|
||||||
|
|
||||||
def test_share_feedback_fails(self):
|
def test_share_feedback_fails(self):
|
||||||
raise NotImplementedError()
|
student_submission = StudentSubmissionFactory(assignment=self.assignment, student=self.student1,
|
||||||
|
final=True)
|
||||||
|
student_submission_id = to_global_id('StudentSubmissionNode', student_submission.id)
|
||||||
|
result = self.get_client(self.teacher).execute(UPDATE_SUBMISSION_FEEDBACK_MUTATION, variables={
|
||||||
|
'input': {
|
||||||
|
"submissionFeedback": {
|
||||||
|
"studentSubmission": student_submission_id,
|
||||||
|
"text": "Feedback",
|
||||||
|
"final": True
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
self.assertIsNotNone(result.get('errors'))
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,10 @@ class SkillboxTestCase(TestCase):
|
||||||
def createDefault(self) -> None:
|
def createDefault(self) -> None:
|
||||||
create_users()
|
create_users()
|
||||||
self.teacher = User.objects.get(username='teacher')
|
self.teacher = User.objects.get(username='teacher')
|
||||||
|
self.teacher2 = User.objects.get(username='teacher2')
|
||||||
|
self.student1 = User.objects.get(username='student1')
|
||||||
|
self.student2 = User.objects.get(username='student2')
|
||||||
|
self.student_second_class = User.objects.get(username='student_second_class')
|
||||||
|
|
||||||
def get_client(self, user=None) -> Client:
|
def get_client(self, user=None) -> Client:
|
||||||
request = RequestFactory().get('/')
|
request = RequestFactory().get('/')
|
||||||
|
|
|
||||||
|
|
@ -117,6 +117,7 @@ class User(AbstractUser):
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def read_only(self):
|
def read_only(self):
|
||||||
|
# todo: just mocked for now, link to license before release
|
||||||
return True
|
return True
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue