146 lines
4.9 KiB
Python
146 lines
4.9 KiB
Python
from django.test import RequestFactory
|
|
from graphene.test import Client
|
|
from graphql_relay import to_global_id
|
|
|
|
from api.schema import schema
|
|
from books.factories import ModuleFactory
|
|
from books.models import Chapter, ContentBlock
|
|
from core.tests.base_test import SkillboxTestCase
|
|
from users.models import User, SchoolClass
|
|
|
|
|
|
class CustomContentTestCase(SkillboxTestCase):
|
|
def setUp(self):
|
|
self.module = ModuleFactory()
|
|
self.chapter = Chapter(title="Hello")
|
|
self.module.add_child(instance=self.chapter)
|
|
self.createDefault()
|
|
content_block = ContentBlock(title="bla", slug="bla")
|
|
self.chapter_id = to_global_id("ChapterNode", self.chapter.id)
|
|
self.chapter.specific.add_child(instance=content_block)
|
|
self.user = User.objects.get(username="teacher")
|
|
school_class2 = SchoolClass.objects.get(name="second_class")
|
|
school_class2.users.add(self.user)
|
|
school_class2.save()
|
|
|
|
request = RequestFactory().get("/")
|
|
request.user = self.user
|
|
assert content_block.id is not None
|
|
self.content_block_id = to_global_id("ContentBlockNode", content_block.id)
|
|
|
|
self.client = Client(schema=schema, context_value=request)
|
|
|
|
def test_custom_content_blocks(self):
|
|
self.assertEqual(self.user.school_classes.count(), 2)
|
|
chapterQuery = """
|
|
query ChapterQuery($id: ID!) {
|
|
chapter(id: $id) {
|
|
id
|
|
title
|
|
contentBlocks {
|
|
id
|
|
title
|
|
}
|
|
}
|
|
}
|
|
"""
|
|
result = self.get_client().execute(
|
|
chapterQuery, variables={"id": self.chapter_id}
|
|
)
|
|
self.assertIsNone(result.errors)
|
|
self.assertEqual(len(result.data.get("chapter").get("contentBlocks")), 1)
|
|
|
|
custom_content_block = ContentBlock(
|
|
title="own", slug="own", user_created=True, owner=self.user
|
|
)
|
|
self.chapter.specific.add_child(instance=custom_content_block)
|
|
result = self.get_client().execute(
|
|
chapterQuery, variables={"id": self.chapter_id}
|
|
)
|
|
self.assertEqual(len(result.data.get("chapter").get("contentBlocks")), 2)
|
|
|
|
for school_class in self.user.school_classes.all():
|
|
custom_content_block.visible_for.add(school_class)
|
|
|
|
result = self.get_client().execute(
|
|
chapterQuery, variables={"id": self.chapter_id}
|
|
)
|
|
self.assertEqual(len(result.data.get("chapter").get("contentBlocks")), 2)
|
|
|
|
def test_mutate_own_content_block(self):
|
|
query = """
|
|
query ContentBlockQuery($id: ID!) {
|
|
contentBlock(id: $id) {
|
|
contents
|
|
title
|
|
}
|
|
}
|
|
"""
|
|
|
|
res = self.get_client().execute(query, variables={"id": self.content_block_id})
|
|
self.assertIsNone(res.errors)
|
|
self.assertEqual(res.data["contentBlock"]["title"], "bla")
|
|
|
|
mutation = """
|
|
mutation MutateContentBlock($input: MutateContentBlockInput!) {
|
|
mutateContentBlock(input: $input) {
|
|
contentBlock {
|
|
contents
|
|
title
|
|
}
|
|
}
|
|
}
|
|
"""
|
|
|
|
new_content = {
|
|
"id": "",
|
|
"type": "text_block",
|
|
"value": {"text": "new text \n a new line"},
|
|
}
|
|
|
|
variables = {
|
|
"input": {
|
|
"id": self.content_block_id,
|
|
"contentBlock": {
|
|
"contents": [new_content],
|
|
"title": "new title",
|
|
"type": "NORMAL",
|
|
},
|
|
}
|
|
}
|
|
|
|
mutation_result = self.get_client().execute(mutation, variables=variables)
|
|
self.assertIsNone(mutation_result.errors)
|
|
content_block = mutation_result.data["mutateContentBlock"]["contentBlock"]
|
|
self.assertEqual(content_block["title"], "new title")
|
|
self.assertEqual(
|
|
content_block["contents"][0]["value"]["text"],
|
|
"<p>new text</p>\n<p>a new line</p>",
|
|
)
|
|
|
|
content_with_list = {
|
|
"id": "",
|
|
"type": "text_block",
|
|
"value": {"text": "<ul><li>Hallo</li><li>Velo</li></ul>"},
|
|
}
|
|
other_variables = {
|
|
"input": {
|
|
"id": self.content_block_id,
|
|
"contentBlock": {
|
|
"contents": [content_with_list],
|
|
"title": "title for list content",
|
|
"type": "NORMAL",
|
|
},
|
|
}
|
|
}
|
|
list_mutation_result = self.get_client().execute(
|
|
mutation, variables=other_variables
|
|
)
|
|
self.assertIsNone(list_mutation_result.errors)
|
|
content_block = list_mutation_result.data["mutateContentBlock"]["contentBlock"]
|
|
self.assertEqual(content_block["title"], "title for list content")
|
|
self.assertEqual(
|
|
content_block["contents"][0]["value"]["text"],
|
|
"<ul><li>Hallo</li><li>Velo</li></ul>",
|
|
)
|