skillbox/server/users/tests/test_leave_reenter_class.py

127 lines
5.4 KiB
Python

from django.test import TestCase
from graphene import Context
from graphene.test import Client
from graphql_relay import to_global_id
from api.utils import get_graphql_mutation
from core.factories import UserFactory
from users.factories import SchoolClassFactory
from users.models import SchoolClass, User, SchoolClassMember
from api.schema import schema
from users.services import create_users
class JoinSchoolClassTest(TestCase):
def setUp(self):
self.client = Client(schema=schema)
self.school_class_name = 'Moordale'
user_data = [
{
'teacher': ('Emily', 'Sands',),
'class': self.school_class_name,
'code': 'SEXED',
'students': [
('Otis', 'Milburn'),
('Maeve', 'Wiley'),
('Adam', 'Groff'),
('Eric', 'Effiong'),
('Jackson', 'Marchetti'),
]
},
{
'teacher': ('Colin', 'Hendricks'),
'class': 'Swing Band',
'students': [
('Ola', 'Nyman'),
]
}
]
create_users(user_data)
teacher = User.objects.get(username='emily.sands')
self.teacher_id = to_global_id('UserNode', teacher.pk)
student = User.objects.get(username='adam.groff')
self.student_id = to_global_id('UserNode', student.pk)
other_student = User.objects.get(username='eric.effiong')
self.other_student_id = to_global_id('UserNode', other_student.pk)
school_class = SchoolClass.objects.get(name=self.school_class_name)
self.school_class_id = to_global_id('SchoolClassNode', school_class.pk)
self.teacher_context = Context(user=teacher)
self.student_context = Context(user=student)
self.mutation = get_graphql_mutation('addRemoveMember.gql')
def test_leave_and_join_class(self):
self.assertEqual(
SchoolClassMember.objects.filter(school_class__name=self.school_class_name, active=True).count(), 6)
self.assertEqual(
SchoolClassMember.objects.filter(school_class__name=self.school_class_name, active=False).count(),
0)
result = self.client.execute(self.mutation, variables={
'input': {
'schoolClass': self.school_class_id,
'member': self.student_id,
'active': False
}
}, context=self.teacher_context)
self.assertIsNone(result.get('errors'))
self.assertEqual(
SchoolClassMember.objects.filter(school_class__name=self.school_class_name, active=True).count(), 5)
self.assertEqual(
SchoolClassMember.objects.filter(school_class__name=self.school_class_name, active=False).count(),
1)
result = self.client.execute(self.mutation, variables={
'input': {
'schoolClass': self.school_class_id,
'member': self.student_id,
'active': True
}
}, context=self.teacher_context)
self.assertIsNone(result.get('errors'))
self.assertEqual(
SchoolClassMember.objects.filter(school_class__name=self.school_class_name, active=True).count(), 6)
self.assertEqual(
SchoolClassMember.objects.filter(school_class__name=self.school_class_name, active=False).count(),
0)
def test_leave_class_student_raises_error(self):
self.assertEqual(
SchoolClassMember.objects.filter(school_class__name=self.school_class_name, active=True).count(), 6)
self.assertEqual(
SchoolClassMember.objects.filter(school_class__name=self.school_class_name, active=False).count(), 0)
result = self.client.execute(self.mutation, variables={
'input': {
'schoolClass': self.school_class_id,
'member': self.other_student_id,
'active': False
}
}, context=self.student_context)
self.assertIsNotNone(result['errors'])
self.assertEqual(
SchoolClassMember.objects.filter(school_class__name=self.school_class_name, active=True).count(), 6)
self.assertEqual(
SchoolClassMember.objects.filter(school_class__name=self.school_class_name, active=False).count(), 0)
def test_leave_class_other_school_class_raises_error(self):
self.assertEqual(
SchoolClassMember.objects.filter(school_class__name=self.school_class_name, active=True).count(), 6)
self.assertEqual(
SchoolClassMember.objects.filter(school_class__name=self.school_class_name, active=False).count(), 0)
student = User.objects.get(username='ola.nyman')
school_class = SchoolClass.objects.get(name='Swing Band')
result = self.client.execute(self.mutation, variables={
'input': {
'schoolClass': to_global_id('SchoolClassNode', school_class.id),
'member': to_global_id('UserNode', student.id),
'active': False
}
}, context=self.teacher_context)
self.assertIsNotNone(result['errors'])
self.assertEqual(
SchoolClassMember.objects.filter(school_class__name=self.school_class_name, active=True).count(), 6)
self.assertEqual(
SchoolClassMember.objects.filter(school_class__name=self.school_class_name, active=False).count(), 0)