from django.test import TestCase, RequestFactory from unittest import skip from graphene.test import Client from graphql_relay import to_global_id from api.schema import schema from api.utils import get_object from books.models import ContentBlock, Chapter from books.factories import ModuleFactory, ModuleLevelFactory from core.factories import UserFactory from users.models import User class NewContentBlockMutationTest(TestCase): def setUp(self): module = ModuleFactory() chapter = Chapter(title='Hello') module.add_child(instance=chapter) self.user = UserFactory(username='aschi') content_block = ContentBlock(title='bla', slug='bla') chapter.specific.add_child(instance=content_block) request = RequestFactory().get('/') request.user = self.user self.client = Client(schema=schema, context_value=request) self.sibling_id = to_global_id('ContentBlockNode', content_block.pk) def test_add_new_content_block(self): self.assertEqual(ContentBlock.objects.count(), 1) mutation = """ mutation AddContentBlock($input: AddContentBlockInput!) { addContentBlock(input: $input) { newContentBlock { id title slug contents type } errors clientMutationId } } """ title = "Hello World" result = self.client.execute(mutation, variables={ 'input': { "contentBlock": { "title": title, "contents": [ { "type": "text_block", "value": { "text": "Hello there" } } ] }, "after": self.sibling_id } }) self.assertIsNone(result.get('errors')) self.assertEqual(ContentBlock.objects.count(), 2) new_content_block = result.get('data').get('addContentBlock').get('newContentBlock') self.assertEqual(new_content_block.get('title'), title) self.assertEqual(len(new_content_block['contents']), 1) id = new_content_block.get('id') content_block_page = get_object(ContentBlock, id) self.assertEqual(content_block_page.title, title) def test_addNewContentBlock_withImageUrlBlock(self): self.assertEqual(ContentBlock.objects.count(), 1) mutation = """ mutation AddContentBlock($input: AddContentBlockInput!) { addContentBlock(input: $input) { newContentBlock { id title slug contents type } errors clientMutationId } } """ title = "Hello World" result = self.client.execute(mutation, variables={ 'input': { "contentBlock": { "title": title, "type": "NORMAL", "contents": [ { "type": "image_url_block", 'value': { "url": "/test.png" } } ] }, "after": self.sibling_id } }) self.assertIsNone(result.get('errors')) self.assertEqual(ContentBlock.objects.count(), 2) new_content_block = result.get('data').get('addContentBlock').get('newContentBlock') self.assertEqual(new_content_block.get('title'), title) self.assertEqual(len(new_content_block['contents']), 1) content = new_content_block['contents'][0] self.assertEqual(content.get('type'), 'image_url_block') self.assertEqual(content.get('value'), {'url': '/test.png'}) def test_updateLastModuleLevel(self): self.assertIsNone(self.user.last_module_level, None) moduleLevel = ModuleLevelFactory(name='1. Lehrjahr') moduleLevel1 = ModuleLevelFactory(name='2. Lehrjahr') mutation = """ mutation ($input: UpdateLastModuleLevelInput!) { updateLastModuleLevel(input: $input) { clientMutationId user { username lastModuleLevel { name id } } } } """ module_level_gql_id = to_global_id('ModuleLevelNode', moduleLevel1.pk) result = self.client.execute(mutation, variables={"input": {"id": module_level_gql_id}}) self.assertIsNone(result.get('errors')) updated_user = User.objects.get(id=self.user.id) self.assertEqual(updated_user.last_module_level.name, moduleLevel1.name)