Add mutation for creating new school classes with tests

This commit is contained in:
Ramon Wenger 2020-03-19 11:33:37 +01:00
parent e2b3fdaece
commit dbf2ba0832
3 changed files with 109 additions and 5 deletions

View File

@ -176,6 +176,10 @@ class UpdateSchoolClass(relay.ClientIDMutation):
def mutate_and_get_payload(cls, root, info, **kwargs): def mutate_and_get_payload(cls, root, info, **kwargs):
id = kwargs.get('id') id = kwargs.get('id')
name = kwargs.get('name') name = kwargs.get('name')
user = info.context.user
if 'users.can_manage_school_class_content' not in user.get_role_permissions():
raise PermissionError()
school_class = get_object(SchoolClass, id) school_class = get_object(SchoolClass, id)
school_class.name = name school_class.name = name
@ -184,6 +188,27 @@ class UpdateSchoolClass(relay.ClientIDMutation):
return cls(success=True, school_class=school_class) return cls(success=True, school_class=school_class)
class CreateSchoolClass(relay.ClientIDMutation):
class Input:
name = graphene.String()
success = graphene.Boolean()
school_class = graphene.Field(SchoolClassNode)
@classmethod
def mutate_and_get_payload(cls, root, info, **kwargs):
name = kwargs.get('name')
user = info.context.user
if 'users.can_manage_school_class_content' not in user.get_role_permissions():
raise PermissionError()
school_class = SchoolClass.objects.create(name=name)
SchoolClassMember.objects.create(school_class=school_class, user=user)
return cls(success=True, school_class=school_class)
class ProfileMutations: class ProfileMutations:
update_password = UpdatePassword.Field() update_password = UpdatePassword.Field()
update_avatar = UpdateAvatar.Field() update_avatar = UpdateAvatar.Field()
@ -191,3 +216,4 @@ class ProfileMutations:
join_class = JoinClass.Field() join_class = JoinClass.Field()
add_remove_member = AddRemoveMember.Field() add_remove_member = AddRemoveMember.Field()
update_school_class = UpdateSchoolClass.Field() update_school_class = UpdateSchoolClass.Field()
create_school_class = CreateSchoolClass.Field()

View File

@ -7,13 +7,11 @@
# #
# Created on 2019-04-09 # Created on 2019-04-09
# @author: chrigu <christian.cueni@iterativ.ch> # @author: chrigu <christian.cueni@iterativ.ch>
from django.conf import settings
from django.test import TestCase, RequestFactory from django.test import TestCase, RequestFactory
from graphene.test import Client from graphene.test import Client
from api.schema import schema from api.schema import schema
from api.utils import get_graphql_query from api.utils import get_graphql_query
from core.factories import UserFactory from core.factories import UserFactory
from django.contrib.auth import authenticate
from users.factories import SchoolClassFactory from users.factories import SchoolClassFactory
from users.models import SchoolClassMember from users.models import SchoolClassMember

View File

@ -17,12 +17,17 @@ from django.conf import settings
# #
# Created on 2019-04-09 # Created on 2019-04-09
# @author: chrigu <christian.cueni@iterativ.ch> # @author: chrigu <christian.cueni@iterativ.ch>
from django.test import TestCase from django.test import TestCase, RequestFactory
from graphene.test import Client
from graphql_relay import to_global_id
from users.models import SchoolClass from api.utils import get_graphql_mutation, get_object
from users.models import SchoolClass, User
from api.schema import schema
from users.services import create_users
class SchoolClasses(TestCase): class SchoolClassesTest(TestCase):
def setUp(self): def setUp(self):
self.prefix = 'Meine Klasse' self.prefix = 'Meine Klasse'
@ -41,3 +46,78 @@ class SchoolClasses(TestCase):
SchoolClass.objects.create(name='{} 10'.format(self.prefix)) SchoolClass.objects.create(name='{} 10'.format(self.prefix))
class_name = SchoolClass.generate_default_group_name() class_name = SchoolClass.generate_default_group_name()
self.assertEqual('{} 11'.format(self.prefix), class_name) self.assertEqual('{} 11'.format(self.prefix), class_name)
class ModifySchoolClassTest(TestCase):
def setUp(self):
create_users()
self.teacher = User.objects.get(username='teacher')
self.student = User.objects.get(username='student1')
request = RequestFactory().get('/')
request.user = self.teacher
student_request = RequestFactory().get('/')
student_request.user = self.student
self.client = Client(schema=schema, context_value=request)
self.student_client = Client(schema=schema, context_value=student_request)
def test_update_school_class(self):
class_name = 'The Colbert Show'
school_class = SchoolClass.objects.get(name='skillbox')
self.assertEqual(school_class.name, 'skillbox')
id = to_global_id('SchoolClassNode', school_class.id)
mutation = get_graphql_mutation('updateSchoolClass.gql')
result = self.client.execute(mutation, variables={
'input': {
'id': id,
'name': class_name
}
})
self.assertIsNone(result.get('errors'))
school_class = get_object(SchoolClass, id)
self.assertEqual(school_class.name, class_name)
def test_update_school_class_fail(self):
class_name = 'Nanana'
school_class = SchoolClass.objects.get(name='skillbox')
self.assertEqual(school_class.name, 'skillbox')
id = to_global_id('SchoolClassNode', school_class.id)
mutation = get_graphql_mutation('updateSchoolClass.gql')
result = self.student_client.execute(mutation, variables={
'input': {
'id': id,
'name': class_name
}
})
self.assertIsNotNone(result.get('errors'))
def test_create_school_class(self):
self.assertEqual(SchoolClass.objects.count(), 2)
class_name = 'Moordale'
mutation = get_graphql_mutation('createClass.gql')
result = self.client.execute(mutation, variables={
'input': {
'name': class_name
}
})
self.assertIsNone(result.get('errors'))
id = result.get('data').get('createSchoolClass').get('schoolClass').get('id')
self.assertEqual(SchoolClass.objects.count(), 3)
school_class = get_object(SchoolClass, id)
self.assertEqual(school_class.name, class_name)
self.assertEqual(school_class.get_teacher(), self.teacher)
def test_create_school_class_fail(self):
self.assertEqual(SchoolClass.objects.count(), 2)
mutation = get_graphql_mutation('createClass.gql')
result = self.student_client.execute(mutation, variables={
'input': {
'name': 'No School'
}
})
self.assertIsNotNone(result.get('errors'))