169 lines
6.2 KiB
Python
169 lines
6.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
#
|
|
# ITerativ GmbH
|
|
# http://www.iterativ.ch/
|
|
#
|
|
# Copyright (c) 2019 ITerativ GmbH. All rights reserved.
|
|
#
|
|
# Created on 2019-08-07
|
|
# @author: chrigu <christian.cueni@iterativ.ch>
|
|
from django.test import TestCase, RequestFactory
|
|
from graphene.test import Client
|
|
from graphql_relay import to_global_id
|
|
|
|
from api.schema import schema
|
|
from core.factories import UserFactory
|
|
from rooms.factories import RoomFactory, ModuleRoomSlugFactory
|
|
from core.tests.base_test import SkillboxTestCase
|
|
from users.factories import SchoolClassFactory
|
|
|
|
|
|
class AdminRoomQueryPermission(SkillboxTestCase):
|
|
|
|
def setUp(self):
|
|
self.user = UserFactory(username='aschi')
|
|
self.another_user = UserFactory(username='pesche')
|
|
self.sc1 = SchoolClassFactory(users=[self.user])
|
|
sc2 = SchoolClassFactory(users=[self.another_user])
|
|
self.room1 = RoomFactory(school_class=self.sc1)
|
|
self.room2 = RoomFactory(school_class=sc2)
|
|
|
|
self.module_room_slug = ModuleRoomSlugFactory(title='some title')
|
|
|
|
self.sc1_id = to_global_id('SchoolClass', self.sc1.pk)
|
|
self.sc2_id = to_global_id('SchoolClass', sc2.pk)
|
|
|
|
request = RequestFactory().get('/')
|
|
request.user = self.user
|
|
self.client = Client(schema=schema, context_value=request)
|
|
|
|
self.query = '''
|
|
query ModuleRoomEntriesQuery($slug: String, $classId: ID!) {
|
|
moduleRoom(slug: $slug, classId: $classId) {
|
|
title
|
|
}
|
|
}
|
|
'''
|
|
|
|
self.mutation = '''
|
|
mutation AddModuleRoomEntry($input: AddModuleRoomEntryInput!) {
|
|
addModuleRoomEntry(input: $input) {
|
|
roomEntry {
|
|
title
|
|
}
|
|
errors
|
|
}
|
|
}
|
|
'''
|
|
|
|
def test_should_return_none_if_slug_does_not_exist(self):
|
|
|
|
result = self.client.execute(self.query, variables={
|
|
'slug': 'no-slug',
|
|
'classId': 'norealId'
|
|
})
|
|
self.assertIsNone(result.get('errors'))
|
|
self.assertIsNone(result.get('data').get('moduleRoom'))
|
|
|
|
def test_should_return_none_if_class_id_does_not_exist(self):
|
|
|
|
result = self.client.execute(self.query, variables={
|
|
'slug': 'no-slug',
|
|
'classId': 'norealId'
|
|
})
|
|
self.assertIsNone(result.get('errors'))
|
|
self.assertIsNone(result.get('data').get('moduleRoom'))
|
|
|
|
def test_user_should_not_be_able_to_create_room_for_other_class(self):
|
|
|
|
result = self.client.execute(self.query, variables={
|
|
'slug': self.module_room_slug.slug,
|
|
'classId': self.sc2_id
|
|
})
|
|
|
|
self.assertIsNone(result.get('errors'))
|
|
self.assertIsNone(result.get('data').get('moduleRoom'))
|
|
|
|
def test_should_create_room_if_none_exists(self):
|
|
|
|
result = self.client.execute(self.query, variables={
|
|
'slug': self.module_room_slug.slug,
|
|
'classId': self.sc1_id
|
|
})
|
|
|
|
self.assertIsNone(result.get('errors'))
|
|
self.assertEqual(result.get('data').get('moduleRoom').get('title'), self.module_room_slug.title)
|
|
|
|
def test_should_return_room_if_one_exists(self):
|
|
|
|
existing_room = RoomFactory(school_class=self.sc1, user_created=False)
|
|
admin_slug = ModuleRoomSlugFactory(slug=existing_room.slug, title=existing_room.title)
|
|
|
|
result = self.client.execute(self.query, variables={
|
|
'slug': admin_slug.slug,
|
|
'classId': self.sc1_id
|
|
})
|
|
|
|
self.assertIsNone(result.get('errors'))
|
|
self.assertEqual(result.get('data').get('moduleRoom').get('title'), existing_room.title)
|
|
|
|
def test_should_work_with_two_existing_rooms(self):
|
|
result_1 = self.get_client(self.user).execute(self.query, variables={
|
|
'slug': self.module_room_slug.slug,
|
|
'classId': self.sc1_id
|
|
})
|
|
self.assertIsNone(result_1.errors)
|
|
self.assertEqual(result_1.data.get('moduleRoom').get('title'), self.module_room_slug.title)
|
|
result_2 = self.get_client(self.another_user).execute(self.query, variables={
|
|
'slug': self.module_room_slug.slug,
|
|
'classId': self.sc2_id
|
|
})
|
|
self.assertIsNone(result_2.errors)
|
|
self.assertEqual(result_2.data.get('moduleRoom').get('title'), self.module_room_slug.title)
|
|
result_3 = self.get_client(self.user).execute(self.query, variables={
|
|
'slug': self.module_room_slug.slug,
|
|
'classId': self.sc1_id
|
|
})
|
|
self.assertIsNone(result_3.errors)
|
|
self.assertEqual(result_3.data.get('moduleRoom').get('title'), self.module_room_slug.title)
|
|
|
|
def test_add_room_entry_to_module_room(self):
|
|
title = 'hello'
|
|
slug = self.module_room_slug.slug
|
|
result_1 = self.get_client(self.user).execute(self.query, variables={
|
|
'slug': slug,
|
|
'classId': self.sc1_id
|
|
})
|
|
self.assertIsNone(result_1.errors)
|
|
self.assertEqual(result_1.data.get('moduleRoom').get('title'), self.module_room_slug.title)
|
|
result_2 = self.get_client(self.another_user).execute(self.query, variables={
|
|
'slug': slug,
|
|
'classId': self.sc2_id
|
|
})
|
|
self.assertIsNone(result_2.errors)
|
|
self.assertEqual(result_2.data.get('moduleRoom').get('title'), self.module_room_slug.title)
|
|
mutation_result_1 = self.get_client(self.user).execute(self.mutation, variables={
|
|
'input': {
|
|
'roomEntry': {
|
|
'roomSlug': slug,
|
|
'schoolClass': self.sc1_id,
|
|
'title': title,
|
|
'contents': []
|
|
}
|
|
}
|
|
})
|
|
self.assertIsNone(mutation_result_1.errors)
|
|
self.assertEqual(mutation_result_1.data.get('addModuleRoomEntry').get('roomEntry').get('title'), title)
|
|
mutation_result_2 = self.get_client(self.another_user).execute(self.mutation, variables={
|
|
'input': {
|
|
'roomEntry': {
|
|
'roomSlug': slug,
|
|
'schoolClass': self.sc2_id,
|
|
'title': title,
|
|
'contents': []
|
|
}
|
|
}
|
|
})
|
|
self.assertIsNone(mutation_result_2.errors)
|
|
self.assertEqual(mutation_result_2.data.get('addModuleRoomEntry').get('roomEntry').get('title'), title)
|