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):
id = kwargs.get('id')
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.name = name
@ -184,6 +188,27 @@ class UpdateSchoolClass(relay.ClientIDMutation):
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:
update_password = UpdatePassword.Field()
update_avatar = UpdateAvatar.Field()
@ -191,3 +216,4 @@ class ProfileMutations:
join_class = JoinClass.Field()
add_remove_member = AddRemoveMember.Field()
update_school_class = UpdateSchoolClass.Field()
create_school_class = CreateSchoolClass.Field()

View File

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

View File

@ -17,12 +17,17 @@ from django.conf import settings
#
# Created on 2019-04-09
# @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):
self.prefix = 'Meine Klasse'
@ -41,3 +46,78 @@ class SchoolClasses(TestCase):
SchoolClass.objects.create(name='{} 10'.format(self.prefix))
class_name = SchoolClass.generate_default_group_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'))