skillbox/server/users/tests/test_join_class.py

69 lines
2.4 KiB
Python

from django.test import TestCase
from graphene import Context
from graphene.test import Client
from core.factories import UserFactory
from users.factories import SchoolClassFactory
from users.models import SchoolClass
from api.schema import schema
class JoinSchoolClassTest(TestCase):
def setUp(self):
self.client = Client(schema=schema)
self.user = UserFactory(username='ueli')
SchoolClassFactory(users=[self.user], name='Klasse 1A', code='XXXX')
SchoolClassFactory(name='Klasse 2B', code='YYYY')
self.mutation = """
mutation JoinClass($input: JoinClassInput!) {
joinClass(input: $input) {
success
schoolClass {
id
name
}
}
}
"""
self.variables = {
'input': {
'code': 'YYYY'
}
}
self.context = Context(user=self.user)
def test_join_class(self):
self.assertEqual(self.user.school_classes.count(), 1)
executed = self.client.execute(self.mutation, variables=self.variables, context=self.context)
self.assertIsNone(executed.get('errors', None))
result = executed['data']['joinClass']
self.assertEqual(result['success'], True)
self.assertEqual(result['schoolClass']['name'], 'Klasse 2B')
self.assertEqual(self.user.school_classes.count(), 2)
def test_class_already_joined(self):
code = 'YYYY'
school_class = SchoolClass.objects.get(code=code)
school_class.users.add(self.user)
self.assertEqual(self.user.school_classes.count(), 2)
executed = self.client.execute(self.mutation, variables=self.variables, context=self.context)
self.assertIsNotNone(executed['errors'])
self.assertEqual(executed['errors'][0]['message'], '[CAJ] Schüler ist bereits in Klasse')
self.assertEqual(self.user.school_classes.count(), 2)
def test_code_not_valid(self):
code = '1234'
self.assertEqual(self.user.school_classes.count(), 1)
executed = self.client.execute(self.mutation, variables={
'input': {
'code': code
}
}, context=self.context)
self.assertIsNotNone(executed['errors'])
self.assertEqual(executed['errors'][0]['message'], '[CNV] Code ist nicht gültig')
self.assertEqual(self.user.school_classes.count(), 1)