Fix custom content blocks in snapshot preview
This commit is contained in:
parent
a415604610
commit
3c85ab6520
|
|
@ -31,7 +31,7 @@ class SnapshotChapter:
|
||||||
self.description_hidden = description_hidden
|
self.description_hidden = description_hidden
|
||||||
self.content_blocks = []
|
self.content_blocks = []
|
||||||
base_qs = ContentBlock.get_by_parent(chapter)
|
base_qs = ContentBlock.get_by_parent(chapter)
|
||||||
without_owner = Q(owner__isnull=True)
|
without_owner = Q(Q(owner__isnull=True) & Q(contentblocksnapshot__snapshot__isnull=True))
|
||||||
this_snapshot = Q(contentblocksnapshot__snapshot=snapshot)
|
this_snapshot = Q(contentblocksnapshot__snapshot=snapshot)
|
||||||
self.content_blocks = [
|
self.content_blocks = [
|
||||||
SnapshotContentBlock(
|
SnapshotContentBlock(
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,131 @@
|
||||||
|
MODULE_QUERY = """
|
||||||
|
query ModulesQuery($slug: String, $id: ID) {
|
||||||
|
module(slug: $slug, id: $id) {
|
||||||
|
id
|
||||||
|
title
|
||||||
|
objectiveGroups {
|
||||||
|
objectives {
|
||||||
|
id
|
||||||
|
text
|
||||||
|
hiddenFor {
|
||||||
|
name
|
||||||
|
}
|
||||||
|
visibleFor {
|
||||||
|
name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
chapters {
|
||||||
|
id
|
||||||
|
contentBlocks {
|
||||||
|
id
|
||||||
|
title
|
||||||
|
visibleFor {
|
||||||
|
name
|
||||||
|
}
|
||||||
|
hiddenFor {
|
||||||
|
name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
|
||||||
|
CREATE_SNAPSHOT_MUTATION = """
|
||||||
|
mutation CreateSnapshot($input: CreateSnapshotInput!) {
|
||||||
|
createSnapshot(input: $input) {
|
||||||
|
snapshot {
|
||||||
|
id
|
||||||
|
created
|
||||||
|
creator
|
||||||
|
objectiveGroups {
|
||||||
|
objectives {
|
||||||
|
text
|
||||||
|
hidden
|
||||||
|
}
|
||||||
|
}
|
||||||
|
chapters {
|
||||||
|
id
|
||||||
|
descriptionHidden
|
||||||
|
titleHidden
|
||||||
|
title
|
||||||
|
description
|
||||||
|
contentBlocks {
|
||||||
|
id
|
||||||
|
title
|
||||||
|
hidden
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
success
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
APPLY_SNAPSHOT_MUTATION = """
|
||||||
|
mutation ApplySnapshot($input: ApplySnapshotInput!) {
|
||||||
|
applySnapshot(input: $input) {
|
||||||
|
success
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
|
||||||
|
SNAPSHOT_MODULE_QUERY = """
|
||||||
|
query SnapshotDetail($id: ID!) {
|
||||||
|
snapshot(id: $id) {
|
||||||
|
id
|
||||||
|
changes {
|
||||||
|
newContentBlocks
|
||||||
|
newObjectives
|
||||||
|
hiddenContentBlocks
|
||||||
|
hiddenObjectives
|
||||||
|
}
|
||||||
|
objectiveGroups {
|
||||||
|
title
|
||||||
|
id
|
||||||
|
hidden
|
||||||
|
objectives {
|
||||||
|
hidden
|
||||||
|
id
|
||||||
|
text
|
||||||
|
}
|
||||||
|
}
|
||||||
|
chapters {
|
||||||
|
id
|
||||||
|
description
|
||||||
|
title
|
||||||
|
titleHidden
|
||||||
|
descriptionHidden
|
||||||
|
contentBlocks {
|
||||||
|
id
|
||||||
|
title
|
||||||
|
hidden
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
|
||||||
|
SHARE_SNAPSHOT_MUTATION = """
|
||||||
|
mutation ShareSnapshot($input: ShareSnapshotInput!) {
|
||||||
|
shareSnapshot(input: $input) {
|
||||||
|
success
|
||||||
|
snapshot {
|
||||||
|
shared
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
|
||||||
|
MODULE_SNAPSHOTS_QUERY = """
|
||||||
|
query SnapshotQuery($slug: String!) {
|
||||||
|
module(slug: $slug) {
|
||||||
|
snapshots {
|
||||||
|
id
|
||||||
|
title
|
||||||
|
created
|
||||||
|
creator
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
|
@ -6,143 +6,13 @@ from api.schema import schema
|
||||||
from api.utils import get_object
|
from api.utils import get_object
|
||||||
from books.factories import ModuleFactory, ChapterFactory, ContentBlockFactory
|
from books.factories import ModuleFactory, ChapterFactory, ContentBlockFactory
|
||||||
from books.models import Snapshot, ChapterSnapshot
|
from books.models import Snapshot, ChapterSnapshot
|
||||||
|
from books.tests.queries import MODULE_QUERY, SNAPSHOT_MODULE_QUERY, CREATE_SNAPSHOT_MUTATION, APPLY_SNAPSHOT_MUTATION, \
|
||||||
|
MODULE_SNAPSHOTS_QUERY, SHARE_SNAPSHOT_MUTATION
|
||||||
from core.tests.base_test import SkillboxTestCase
|
from core.tests.base_test import SkillboxTestCase
|
||||||
from objectives.factories import ObjectiveGroupFactory, ObjectiveFactory
|
from objectives.factories import ObjectiveGroupFactory, ObjectiveFactory
|
||||||
from users.factories import SchoolClassFactory
|
from users.factories import SchoolClassFactory
|
||||||
from users.models import User, SchoolClass
|
from users.models import User, SchoolClass
|
||||||
|
|
||||||
MODULE_QUERY = """
|
|
||||||
query ModulesQuery($slug: String, $id: ID) {
|
|
||||||
module(slug: $slug, id: $id) {
|
|
||||||
id
|
|
||||||
title
|
|
||||||
objectiveGroups {
|
|
||||||
objectives {
|
|
||||||
id
|
|
||||||
text
|
|
||||||
hiddenFor {
|
|
||||||
name
|
|
||||||
}
|
|
||||||
visibleFor {
|
|
||||||
name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
chapters {
|
|
||||||
id
|
|
||||||
contentBlocks {
|
|
||||||
id
|
|
||||||
title
|
|
||||||
visibleFor {
|
|
||||||
name
|
|
||||||
}
|
|
||||||
hiddenFor {
|
|
||||||
name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
"""
|
|
||||||
|
|
||||||
CREATE_SNAPSHOT_MUTATION = """
|
|
||||||
mutation CreateSnapshot($input: CreateSnapshotInput!) {
|
|
||||||
createSnapshot(input: $input) {
|
|
||||||
snapshot {
|
|
||||||
id
|
|
||||||
created
|
|
||||||
creator
|
|
||||||
objectiveGroups {
|
|
||||||
objectives {
|
|
||||||
text
|
|
||||||
hidden
|
|
||||||
}
|
|
||||||
}
|
|
||||||
chapters {
|
|
||||||
id
|
|
||||||
descriptionHidden
|
|
||||||
titleHidden
|
|
||||||
title
|
|
||||||
description
|
|
||||||
contentBlocks {
|
|
||||||
id
|
|
||||||
title
|
|
||||||
hidden
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
success
|
|
||||||
}
|
|
||||||
}
|
|
||||||
"""
|
|
||||||
APPLY_SNAPSHOT_MUTATION = """
|
|
||||||
mutation ApplySnapshot($input: ApplySnapshotInput!) {
|
|
||||||
applySnapshot(input: $input) {
|
|
||||||
success
|
|
||||||
}
|
|
||||||
}
|
|
||||||
"""
|
|
||||||
|
|
||||||
SNAPSHOT_MODULE_QUERY = """
|
|
||||||
query SnapshotDetail($id: ID!) {
|
|
||||||
snapshot(id: $id) {
|
|
||||||
id
|
|
||||||
changes {
|
|
||||||
newContentBlocks
|
|
||||||
newObjectives
|
|
||||||
hiddenContentBlocks
|
|
||||||
hiddenObjectives
|
|
||||||
}
|
|
||||||
objectiveGroups {
|
|
||||||
title
|
|
||||||
id
|
|
||||||
hidden
|
|
||||||
objectives {
|
|
||||||
hidden
|
|
||||||
id
|
|
||||||
text
|
|
||||||
}
|
|
||||||
}
|
|
||||||
chapters {
|
|
||||||
id
|
|
||||||
description
|
|
||||||
title
|
|
||||||
titleHidden
|
|
||||||
descriptionHidden
|
|
||||||
contentBlocks {
|
|
||||||
id
|
|
||||||
title
|
|
||||||
hidden
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
"""
|
|
||||||
|
|
||||||
SHARE_SNAPSHOT_MUTATION = """
|
|
||||||
mutation ShareSnapshot($input: ShareSnapshotInput!) {
|
|
||||||
shareSnapshot(input: $input) {
|
|
||||||
success
|
|
||||||
snapshot {
|
|
||||||
shared
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
"""
|
|
||||||
|
|
||||||
MODULE_SNAPSHOTS_QUERY = """
|
|
||||||
query SnapshotQuery($slug: String!) {
|
|
||||||
module(slug: $slug) {
|
|
||||||
snapshots {
|
|
||||||
id
|
|
||||||
title
|
|
||||||
created
|
|
||||||
creator
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class CreateSnapshotTestCase(SkillboxTestCase):
|
class CreateSnapshotTestCase(SkillboxTestCase):
|
||||||
def _test_objective(self, objective, text, hidden):
|
def _test_objective(self, objective, text, hidden):
|
||||||
|
|
@ -251,17 +121,19 @@ class CreateSnapshotTestCase(SkillboxTestCase):
|
||||||
school_class_name in [school_class['name'] for school_class in
|
school_class_name in [school_class['name'] for school_class in
|
||||||
custom_objective.get('visibleFor')])
|
custom_objective.get('visibleFor')])
|
||||||
|
|
||||||
|
def _compare_content_blocks(self, content_blocks):
|
||||||
|
self.assertEqual(len(content_blocks), 4)
|
||||||
|
first, second, third, fourth = content_blocks
|
||||||
|
self._test_content_block(first, self.title_visible, False)
|
||||||
|
self._test_content_block(second, self.title_hidden, True)
|
||||||
|
self._test_content_block(third, self.title_custom, False)
|
||||||
|
self._test_content_block(fourth, self.title_custom_hidden, True)
|
||||||
|
|
||||||
def test_setup(self):
|
def test_setup(self):
|
||||||
# make sure everything is setup correctly
|
# make sure everything is setup correctly
|
||||||
self._test_module_visibility(self.client, 'skillbox')
|
self._test_module_visibility(self.client, 'skillbox')
|
||||||
|
|
||||||
def test_create_snapshot(self):
|
def _test_create_snapshot(self, result, num_snapshots=1):
|
||||||
result = self.client.execute(CREATE_SNAPSHOT_MUTATION, variables={
|
|
||||||
'input': {
|
|
||||||
'module': self.slug,
|
|
||||||
'selectedClass': to_global_id('SchoolClassNode', self.skillbox_class.pk),
|
|
||||||
}
|
|
||||||
})
|
|
||||||
self.assertIsNone(result.get('errors'))
|
self.assertIsNone(result.get('errors'))
|
||||||
snapshot = result.get('data').get('createSnapshot').get('snapshot')
|
snapshot = result.get('data').get('createSnapshot').get('snapshot')
|
||||||
chapter = snapshot.get('chapters')[0]
|
chapter = snapshot.get('chapters')[0]
|
||||||
|
|
@ -275,13 +147,8 @@ class CreateSnapshotTestCase(SkillboxTestCase):
|
||||||
self.assertEqual(int(chapter_id), self.chapter.id)
|
self.assertEqual(int(chapter_id), self.chapter.id)
|
||||||
|
|
||||||
content_blocks = chapter['contentBlocks']
|
content_blocks = chapter['contentBlocks']
|
||||||
self.assertEqual(len(content_blocks), 4)
|
self._compare_content_blocks(content_blocks)
|
||||||
visible, hidden, custom, custom_hidden = content_blocks
|
self.assertEqual(ChapterSnapshot.objects.count(), 2 * num_snapshots)
|
||||||
self._test_content_block(visible, self.title_visible, False)
|
|
||||||
self._test_content_block(hidden, self.title_hidden, True)
|
|
||||||
self._test_content_block(custom, self.title_custom, False)
|
|
||||||
self._test_content_block(custom_hidden, self.title_custom_hidden, True)
|
|
||||||
self.assertEqual(ChapterSnapshot.objects.count(), 2)
|
|
||||||
|
|
||||||
visible, hidden, custom, custom_hidden = snapshot['objectiveGroups'][0]['objectives']
|
visible, hidden, custom, custom_hidden = snapshot['objectiveGroups'][0]['objectives']
|
||||||
|
|
||||||
|
|
@ -294,6 +161,32 @@ class CreateSnapshotTestCase(SkillboxTestCase):
|
||||||
snapshot = get_object(Snapshot, id)
|
snapshot = get_object(Snapshot, id)
|
||||||
self.assertEqual(snapshot.objective_groups.count(), 2)
|
self.assertEqual(snapshot.objective_groups.count(), 2)
|
||||||
|
|
||||||
|
def test_create_snapshot(self):
|
||||||
|
result = self.client.execute(CREATE_SNAPSHOT_MUTATION, variables={
|
||||||
|
'input': {
|
||||||
|
'module': self.slug,
|
||||||
|
'selectedClass': to_global_id('SchoolClassNode', self.skillbox_class.pk),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
self._test_create_snapshot(result)
|
||||||
|
|
||||||
|
|
||||||
|
def test_create_two_snapshots(self):
|
||||||
|
self.client.execute(CREATE_SNAPSHOT_MUTATION, variables={
|
||||||
|
'input': {
|
||||||
|
'module': self.slug,
|
||||||
|
'selectedClass': to_global_id('SchoolClassNode', self.skillbox_class.pk),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
result = self.client.execute(CREATE_SNAPSHOT_MUTATION, variables={
|
||||||
|
'input': {
|
||||||
|
'module': self.slug,
|
||||||
|
'selectedClass': to_global_id('SchoolClassNode', self.skillbox_class.pk),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
self._test_create_snapshot(result, num_snapshots=2)
|
||||||
|
|
||||||
|
|
||||||
def test_apply_snapshot(self):
|
def test_apply_snapshot(self):
|
||||||
self.snapshot = Snapshot.objects.create_snapshot(module=self.module, school_class=self.skillbox_class,
|
self.snapshot = Snapshot.objects.create_snapshot(module=self.module, school_class=self.skillbox_class,
|
||||||
user=self.teacher)
|
user=self.teacher)
|
||||||
|
|
@ -327,12 +220,8 @@ class CreateSnapshotTestCase(SkillboxTestCase):
|
||||||
self.assertEqual(len(chapters), 2)
|
self.assertEqual(len(chapters), 2)
|
||||||
chapter = chapters[0]
|
chapter = chapters[0]
|
||||||
content_blocks = chapter.get('contentBlocks')
|
content_blocks = chapter.get('contentBlocks')
|
||||||
self.assertEqual(len(content_blocks), 4)
|
|
||||||
first, second, third, fourth = content_blocks
|
self._compare_content_blocks(content_blocks)
|
||||||
self._test_content_block(first, self.title_visible, False)
|
|
||||||
self._test_content_block(second, self.title_hidden, True)
|
|
||||||
self._test_content_block(third, self.title_custom, False)
|
|
||||||
self._test_content_block(fourth, self.title_custom_hidden, True)
|
|
||||||
|
|
||||||
objective_groups = snapshot['objectiveGroups']
|
objective_groups = snapshot['objectiveGroups']
|
||||||
self.assertEqual(len(objective_groups), 2)
|
self.assertEqual(len(objective_groups), 2)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue