Add unit tests

This commit is contained in:
Ramon Wenger 2021-07-05 18:06:10 +02:00
parent 949f656079
commit dc1cb86bb8
8 changed files with 117 additions and 57 deletions

View File

@ -23,13 +23,17 @@ class UpdateAssignment(relay.ClientIDMutation):
def mutate_and_get_payload(cls, root, info, **kwargs):
assignment_data = kwargs.get('assignment')
assignment = get_object(Assignment, assignment_data.get('id'))
student = info.context.user
if student.read_only:
raise NotImplementedError()
try:
(submission, _created) = assignment.submissions.get_or_create(student=info.context.user)
(submission, _created) = assignment.submissions.get_or_create(student=student)
except MultipleObjectsReturned:
for submission in assignment.submissions.filter(student=info.context.user):
for submission in assignment.submissions.filter(student=student):
submission.delete()
submission = assignment.submissions.create(student=info.context.user)
submission = assignment.submissions.create(student=student)
submission.text = assignment_data.get('answer', '')
submission.document = assignment_data.get('document', '')
final = assignment_data.get('final')
@ -56,6 +60,9 @@ class UpdateSubmissionFeedback(relay.ClientIDMutation):
if not user.has_perm('users.can_manage_school_class_content'):
raise PermissionDenied('Missing permissions')
if user.read_only:
raise NotImplementedError()
(submission_feedback, created) = SubmissionFeedback.objects.get_or_create(teacher=user,
student_submission_id=student_submission_id)

View File

@ -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
}
}
}
'''

View File

@ -2,6 +2,7 @@ from graphql_relay import to_global_id
from api.test_utils import create_client, DefaultUserTestCase
from assignments.models import Assignment, StudentSubmission
from .queries.mutations import UPDATE_ASSIGNMENT_MUTATION
from ..factories import AssignmentFactory
@ -16,31 +17,14 @@ class AssignmentPermissionsTestCase(DefaultUserTestCase):
self.module_id = to_global_id('ModuleNode', self.assignment.module.pk)
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:
client = create_client(self.student1)
else:
client = create_client(user)
return client.execute(mutation, variables={
return client.execute(UPDATE_ASSIGNMENT_MUTATION, variables={
'input': {
"assignment": {
"id": self.assignment_id,

View File

@ -5,24 +5,10 @@ from graphql_relay import to_global_id
from api.schema import schema
from assignments.factories import AssignmentFactory
from assignments.models import StudentSubmission
from assignments.tests.queries.mutations import UPDATE_ASSIGNMENT_MUTATION
from users.models import User
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):
def setUp(self):

View File

@ -12,14 +12,16 @@ from graphql_relay import to_global_id
from api.test_utils import create_client, DefaultUserTestCase
from assignments.models import Assignment, StudentSubmission
from core.tests.base_test import SkillboxTestCase
from users.factories import SchoolClassFactory
from users.models import SchoolClassMember
from .queries.mutations import UPDATE_SUBMISSION_FEEDBACK_MUTATION
from ..factories import AssignmentFactory, StudentSubmissionFactory, SubmissionFeedbackFactory
class SubmissionFeedbackTestCase(DefaultUserTestCase):
class SubmissionFeedbackTestCase(SkillboxTestCase):
def setUp(self):
super(SubmissionFeedbackTestCase, self).setUp()
self.createDefault()
self.assignment = AssignmentFactory(
owner=self.teacher
@ -38,21 +40,7 @@ class SubmissionFeedbackTestCase(DefaultUserTestCase):
)
def _create_submission_feedback(self, user, final, text, student_submission_id):
mutation = '''
mutation UpdateSubmissionFeedback($input: UpdateSubmissionFeedbackInput!) {
updateSubmissionFeedback(input: $input){
updatedSubmissionFeedback {
id
text
final
}
}
}
'''
client = create_client(user)
return client.execute(mutation, variables={
return self.get_client(user).execute(UPDATE_SUBMISSION_FEEDBACK_MUTATION, variables={
'input': {
"submissionFeedback": {
"studentSubmission": student_submission_id,

View File

@ -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 users.models import User
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):
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):
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):
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):
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'))

View File

@ -10,6 +10,10 @@ class SkillboxTestCase(TestCase):
def createDefault(self) -> None:
create_users()
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:
request = RequestFactory().get('/')

View File

@ -117,6 +117,7 @@ class User(AbstractUser):
@cached_property
def read_only(self):
# todo: just mocked for now, link to license before release
return True
class Meta: