from django.test import TestCase from graphene import Context from graphene.test import Client from api.schema import schema from core.factories import TeacherFactory from users.factories import TeamFactory ME_QUERY = """ query MeQuery { me { team { name code } } } """ CREATE_MUTATION = """ mutation CreateTeamMutation($input: CreateTeamInput!) { createTeam(input: $input) { success team { name code } } } """ JOIN_TEAM_MUTATION = """ mutation JoinTeamMutation($input: JoinTeamInput!) { joinTeam(input: $input) { success team { name code } } } """ class TeamTest(TestCase): def setUp(self): self.client = Client(schema=schema) self.team_name = 'Fiterativ' self.code = 'AAAA' self.team = TeamFactory(name=self.team_name, code=self.code) self.user = TeacherFactory(username='ueli', team=self.team) self.context = Context(user=self.user) @staticmethod def get_team(result): return result.get('data').get('me').get('team') def no_error(self, result): self.assertIsNone(result.get('errors')) def check_me(self, context, name, code): result = self.client.execute(ME_QUERY, context=context) self.no_error(result) team = self.get_team(result) self.assertEqual(team.get('name'), name) self.assertEqual(team.get('code'), code) def join_team(self, code, context): variables = { "input": { "code": code } } result = self.client.execute(JOIN_TEAM_MUTATION, variables=variables, context=context) self.no_error(result) success = result['data']['joinTeam']['success'] self.assertTrue(success) def test_team_query(self): self.check_me(self.context, self.team_name, self.code) def test_join_team_mutation(self): teacher = TeacherFactory(username='hansli') context = Context(user=teacher) self.join_team(self.code, context) self.check_me(context, self.team_name, self.code) def test_join_second_team_mutation(self): teacher = TeacherFactory(username='peterli') context = Context(user=teacher) second_team = TeamFactory() self.join_team(self.code, context) self.check_me(context, self.team_name, self.code) self.join_team(second_team.code, context) self.check_me(context, second_team.name, second_team.code) def test_create_team_mutation(self): team_name = "Dunder Mifflin" variables = { "input": { "name": team_name } } result = self.client.execute(CREATE_MUTATION, context=self.context, variables=variables) self.no_error(result) create_team = result.get('data').get('createTeam') team = create_team.get('team') success = create_team.get('success') self.assertTrue(success) self.assertEqual(team.get('name'), team_name) self.assertIsNotNone(team.get('code'))