diff --git a/server/books/tests/test_content_block_visibility.py b/server/books/tests/test_content_block_visibility.py new file mode 100644 index 00000000..0de602cd --- /dev/null +++ b/server/books/tests/test_content_block_visibility.py @@ -0,0 +1,73 @@ +from django.test import TestCase, RequestFactory +from graphene.test import Client +from graphql_relay import to_global_id + +from api.schema import schema +from books.models import ContentBlock, Chapter +from books.factories import ModuleFactory +from users.factories import SchoolClassFactory +from users.models import User +from users.services import create_users + + +class ContentBlocksVisibleForTeachers(TestCase): + def setUp(self): + module = ModuleFactory() + chapter = Chapter(title='Some Chapter') + module.add_child(instance=chapter) + create_users() + teacher = User.objects.get(username='teacher') + teacher2 = User.objects.get(username='teacher2') + student = User.objects.get(username='student1') + school_class = SchoolClassFactory(users=[teacher, teacher2, student]) + + default_content_block = ContentBlock(title='default block', slug='default') + user_content_block = ContentBlock(title='user created', slug='user', user_created=True, owner=teacher) + chapter.specific.add_child(instance=default_content_block) + chapter.specific.add_child(instance=user_content_block) + + user_content_block.visible_for.add(school_class) + user_content_block.save() + + + teacher_request = RequestFactory().get('/') + teacher_request.user = teacher + self.teacher_client = Client(schema=schema, context_value=teacher_request) + + teacher2_request = RequestFactory().get('/') + teacher2_request.user = teacher2 + self.teacher2_client = Client(schema=schema, context_value=teacher2_request) + + student_request = RequestFactory().get('/') + student_request.user = student + self.student_client = Client(schema=schema, context_value=student_request) + + self.chapter = to_global_id('ChapterNode', chapter.pk) + + def _assert_school_classes(self, query, client): + result = client.execute(query, variables={ + 'id': self.chapter + }) + self.assertIsNone(result.get('errors')) + self.assertEqual(len(result.get('data').get('chapter').get('contentBlocks').get('edges')), 2) + + def test_teacher_created_content_block(self): + self.assertEqual(ContentBlock.objects.count(), 2) + + query = """ + query ChapterQuery($id: ID!) { + chapter(id: $id) { + contentBlocks { + edges { + node { + id + } + } + } + } + } + """ + + self._assert_school_classes(query, self.student_client) + self._assert_school_classes(query, self.teacher_client) + self._assert_school_classes(query, self.teacher2_client)