skillbox/server/users/tests/test_teams.py

114 lines
3.2 KiB
Python

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'))