skillbox/server/books/tests/test_module_mutations.py

152 lines
5.0 KiB
Python

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)