73 lines
2.6 KiB
Python
73 lines
2.6 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, SchoolClassMember
|
|
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)
|
|
self.assertEqual(self.user.selected_class.code, 'YYYY')
|
|
|
|
def test_class_already_joined(self):
|
|
code = 'YYYY'
|
|
school_class = SchoolClass.objects.get(code=code)
|
|
SchoolClassMember.objects.create(
|
|
user=self.user,
|
|
school_class=school_class
|
|
)
|
|
|
|
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 '1234'")
|
|
self.assertEqual(self.user.school_classes.count(), 1)
|