Add initial tests for assignment

This commit is contained in:
Ramon Wenger 2018-10-15 20:08:22 +02:00
parent 95545904a6
commit 8dc5d7dfaf
6 changed files with 120 additions and 12 deletions

View File

@ -0,0 +1,16 @@
import random
import factory
from books.factories import ModuleFactory
from .models import Assignment
from core.factories import fake
class AssignmentFactory(factory.django.DjangoModelFactory):
class Meta:
model = Assignment
title = factory.LazyAttribute(lambda x: fake.sentence(nb_words=random.randint(4, 8)))
assignment = factory.LazyAttribute(lambda x: fake.sentence(nb_words=random.randint(4, 8)))
module = factory.SubFactory(ModuleFactory)

View File

@ -1,3 +0,0 @@
from django.test import TestCase
# Create your tests here.

View File

View File

@ -0,0 +1,86 @@
from unittest import TestCase
from django.test import RequestFactory
from graphene.test import Client
from graphql_relay import to_global_id
from api.utils import get_graphql_mutation
from assignments.models import Assignment, StudentSubmission
from books.factories import ModuleFactory
from ..factories import AssignmentFactory
from users.models import User
from users.services import create_users
from api.schema import schema
class AssignmentPermissionsTestCase(TestCase):
def setUp(self):
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.assignment = AssignmentFactory(
owner=self.teacher
)
request = RequestFactory().get('/')
request.user = self.student1
self.client = Client(schema=schema, context_value=request)
"""
to test:
create assignment
should be visible to teachers
should be visible to students
student1 submits result
teacher1 should see result
student1 should see result
student2 should not see result
teacher2 should not see result
"""
def test_count(self):
self.assertEqual(Assignment.objects.count(), 1)
def test_submit_submission(self):
"""
id = graphene.ID(required=True)
answer = graphene.String(required=True)
document = graphene.String()
final = graphene.Boolean()
"""
id = to_global_id('Assignment', self.assignment.pk)
mutation = '''
mutation UpdateAssignment($input: UpdateAssignmentInput!) {
updateAssignment(input: $input){
updatedAssignment {
id
title
assignment
submission {
id
text
final
document
}
}
}
}
'''
result = self.client.execute(mutation, variables={
'input': {
"assignment": {
"id": id,
"answer": 'Halo',
"final": True
}
}
})
self.assertIsNone(result.get('errors'))
self.assertEqual(StudentSubmission.objects.count(), 1)

View File

@ -33,20 +33,13 @@ class RoleManager(models.Manager):
def create_default_roles(self):
for key, value in self.DEFAULT_ROLES.items():
role = self.create(name=value, key=key)
role.save()
role, created = self.get_or_create(name=value, key=key)
can_manage_school_class_content, = self._create_default_permissions()
if key == "teacher":
role.role_permission.add(can_manage_school_class_content.id)
# elif key == "school_admin":
# role.role_permission.add()
#
# elif key == "student":
# role.role_permission.add()
def get_default_teacher_role(self):
return self._get_default_role(self.TEACHER_KEY)

View File

@ -13,10 +13,26 @@ def create_users(data=None):
teacher = UserFactory(username='teacher')
UserRole.objects.create(user=teacher, role=teacher_role)
students = []
for i in range(1, 7):
student = UserFactory(username='student{}'.format(i))
UserRole.objects.create(user=student, role=student_role)
SchoolClassFactory(users=[teacher, student])
students.append(student)
SchoolClassFactory(
users=[teacher] + students,
year='2018',
name='skillbox'
)
teacher2 = UserFactory(username='teacher2')
SchoolClassFactory(
users=[teacher2],
year='2018',
name='second_class'
)
else:
for school_class in data: