Update `create team` mutation signature
This commit is contained in:
parent
e18218c007
commit
c6ddb3b051
|
|
@ -1,9 +1,14 @@
|
||||||
#import "gql/fragments/teamParts.gql"
|
#import "gql/fragments/teamParts.gql"
|
||||||
mutation CreateTeamMutation($input: CreateTeamInput!) {
|
mutation CreateTeamMutation($input: CreateTeamInput!) {
|
||||||
createTeam(input: $input) {
|
createTeam(input: $input) {
|
||||||
success
|
result {
|
||||||
team {
|
__typename
|
||||||
...TeamParts
|
...on TeamNode {
|
||||||
|
...TeamParts
|
||||||
|
}
|
||||||
|
...on DuplicateName {
|
||||||
|
reason
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -367,11 +367,12 @@ input CreateTeamInput {
|
||||||
}
|
}
|
||||||
|
|
||||||
type CreateTeamPayload {
|
type CreateTeamPayload {
|
||||||
success: Boolean
|
result: CreateTeamResult
|
||||||
team: TeamNode
|
|
||||||
clientMutationId: String
|
clientMutationId: String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
union CreateTeamResult = TeamNode | DuplicateName
|
||||||
|
|
||||||
scalar Date
|
scalar Date
|
||||||
|
|
||||||
scalar DateTime
|
scalar DateTime
|
||||||
|
|
|
||||||
|
|
@ -10,12 +10,13 @@ from api.utils import get_object
|
||||||
from core.logger import get_logger
|
from core.logger import get_logger
|
||||||
from users.inputs import PasswordUpdateInput
|
from users.inputs import PasswordUpdateInput
|
||||||
from users.models import SchoolClass, SchoolClassMember, Team
|
from users.models import SchoolClass, SchoolClassMember, Team
|
||||||
from users.schema import SchoolClassNode, TeamNode, UpdateError, FieldError, CreateSchoolClassResult
|
from users.schema import CreateSchoolClassResult, CreateTeamResult, FieldError, SchoolClassNode, TeamNode, UpdateError
|
||||||
from users.serializers import AvatarUrlSerializer, PasswordSerialzer
|
from users.serializers import AvatarUrlSerializer, PasswordSerialzer
|
||||||
|
|
||||||
|
|
||||||
logger = get_logger(__name__)
|
logger = get_logger(__name__)
|
||||||
|
|
||||||
|
DUPLICATE_REASON = {"reason": "Dieser Name wird bereits verwendet."}
|
||||||
|
|
||||||
|
|
||||||
class CodeNotFoundException(Exception):
|
class CodeNotFoundException(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
@ -210,26 +211,28 @@ class CreateSchoolClass(TeacherOnlyMutation):
|
||||||
user.set_selected_class(school_class)
|
user.set_selected_class(school_class)
|
||||||
return cls(result=school_class)
|
return cls(result=school_class)
|
||||||
except IntegrityError:
|
except IntegrityError:
|
||||||
return cls(result={"reason": "Dieser Name wird bereits verwendet."})
|
return cls(result=DUPLICATE_REASON)
|
||||||
|
|
||||||
|
|
||||||
class CreateTeam(TeacherOnlyMutation):
|
class CreateTeam(TeacherOnlyMutation):
|
||||||
class Input:
|
class Input:
|
||||||
name = graphene.String(required=True)
|
name = graphene.String(required=True)
|
||||||
|
|
||||||
success = graphene.Boolean()
|
result = CreateTeamResult()
|
||||||
team = graphene.Field(TeamNode)
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def mutate_and_get_payload(cls, root, info, **kwargs):
|
def mutate_and_get_payload(cls, root, info, **kwargs):
|
||||||
name = kwargs.get('name')
|
name = kwargs.get('name')
|
||||||
user = info.context.user
|
user = info.context.user
|
||||||
|
|
||||||
team = Team.objects.create(name=name, creator=user)
|
try:
|
||||||
team.generate_code()
|
team = Team.objects.create(name=name, creator=user)
|
||||||
user.team = team
|
team.generate_code()
|
||||||
user.save()
|
user.team = team
|
||||||
return cls(success=True, team=team)
|
user.save()
|
||||||
|
return cls(result=team)
|
||||||
|
except IntegrityError:
|
||||||
|
return cls(result=DUPLICATE_REASON)
|
||||||
|
|
||||||
|
|
||||||
class UpdateTeam(TeacherOnlyMutation):
|
class UpdateTeam(TeacherOnlyMutation):
|
||||||
|
|
|
||||||
|
|
@ -186,6 +186,17 @@ class DuplicateName(graphene.ObjectType):
|
||||||
reason = graphene.String()
|
reason = graphene.String()
|
||||||
|
|
||||||
|
|
||||||
|
class CreateTeamResult(graphene.Union):
|
||||||
|
class Meta:
|
||||||
|
types = (TeamNode, DuplicateName)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def resolve_type(cls, instance, info):
|
||||||
|
if type(instance).__name__ == "Team":
|
||||||
|
return TeamNode
|
||||||
|
return DuplicateName
|
||||||
|
|
||||||
|
|
||||||
class CreateSchoolClassResult(graphene.Union):
|
class CreateSchoolClassResult(graphene.Union):
|
||||||
class Meta:
|
class Meta:
|
||||||
types = (SchoolClassNode, DuplicateName)
|
types = (SchoolClassNode, DuplicateName)
|
||||||
|
|
|
||||||
|
|
@ -101,22 +101,33 @@ class TeamTest(TestCase):
|
||||||
self.join_team(second_team.code, context)
|
self.join_team(second_team.code, context)
|
||||||
self.check_me(context, second_team.name, second_team.code)
|
self.check_me(context, second_team.name, second_team.code)
|
||||||
|
|
||||||
def test_create_team_mutation(self):
|
def _get_team_mutation_result(self, name):
|
||||||
team_name = "Dunder Mifflin"
|
|
||||||
variables = {
|
variables = {
|
||||||
"input": {
|
"input": {
|
||||||
"name": team_name
|
"name": name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
result = self.client.execute(CREATE_TEAM_MUTATION, context=self.context, variables=variables)
|
result = self.client.execute(CREATE_TEAM_MUTATION, context=self.context, variables=variables)
|
||||||
self.no_error(result)
|
self.no_error(result)
|
||||||
create_team = result.get('data').get('createTeam')
|
create_team = result.get('data').get('createTeam')
|
||||||
team = create_team.get('team')
|
result = create_team.get('result')
|
||||||
success = create_team.get('success')
|
typename = result.get('__typename')
|
||||||
self.assertTrue(success)
|
return result, typename
|
||||||
|
|
||||||
|
def test_create_team_mutation_success(self):
|
||||||
|
team_name = "Dunder Mifflin"
|
||||||
|
team, typename = self._get_team_mutation_result(team_name)
|
||||||
|
self.assertEqual(typename, 'TeamNode')
|
||||||
self.assertEqual(team.get('name'), team_name)
|
self.assertEqual(team.get('name'), team_name)
|
||||||
self.assertIsNotNone(team.get('code'))
|
self.assertIsNotNone(team.get('code'))
|
||||||
|
|
||||||
|
def test_create_team_mutation_fail_duplicate_name(self):
|
||||||
|
team_name = "Dunder Mifflin"
|
||||||
|
Team.objects.create(name=team_name)
|
||||||
|
duplicate_name, typename = self._get_team_mutation_result(team_name)
|
||||||
|
self.assertEqual(typename, 'DuplicateName')
|
||||||
|
self.assertEqual(duplicate_name.get('reason'), 'Dieser Name wird bereits verwendet.')
|
||||||
|
|
||||||
def test_update_team_name(self):
|
def test_update_team_name(self):
|
||||||
new_name = 'Team Böhmermann'
|
new_name = 'Team Böhmermann'
|
||||||
variables = {
|
variables = {
|
||||||
|
|
@ -149,7 +160,7 @@ class TeamTest(TestCase):
|
||||||
context = Context(user=schelm)
|
context = Context(user=schelm)
|
||||||
team = Team.objects.get(pk=self.team.pk)
|
team = Team.objects.get(pk=self.team.pk)
|
||||||
old_name = team.name
|
old_name = team.name
|
||||||
self.assertFalse(self.team.members.filter(pk=schelm.pk).exists())
|
self.assertFalse(self.team.members.filter(pk=schelm.pk).exists())
|
||||||
variables = {
|
variables = {
|
||||||
"input": {
|
"input": {
|
||||||
"name": 'Not gonna happen',
|
"name": 'Not gonna happen',
|
||||||
|
|
@ -199,4 +210,3 @@ class TeamTest(TestCase):
|
||||||
|
|
||||||
student_after = User.objects.get(pk=self.student.pk)
|
student_after = User.objects.get(pk=self.student.pk)
|
||||||
self.assertIsNone(student_after.team)
|
self.assertIsNone(student_after.team)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue