Add mutation for creating new school classes with tests
This commit is contained in:
parent
e2b3fdaece
commit
dbf2ba0832
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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'))
|
||||
|
|
|
|||
Loading…
Reference in New Issue