Reset chapter visibilities

This commit is contained in:
Ramon Wenger 2021-06-14 11:30:14 +02:00
parent 9c82dc2bf4
commit 45b3414226
6 changed files with 67 additions and 24 deletions

View File

@ -4,7 +4,6 @@ describe('Bookmarks', () => {
cy.exec('python ../server/manage.py prepare_bookmarks_for_cypress');
cy.viewport('macbook-15');
cy.startGraphQLCapture();
cy.apolloLogin('rahel.cueni', 'test');
});

View File

@ -54,11 +54,11 @@ Cypress.Commands.add('login', (username, password, visitLogin = false) => {
cy.visit('/beta-login');
}
if (username != '') {
if (username !== '') {
cy.get('[data-cy=email-input]').type(username);
}
if (password != '') {
if (password !== '') {
cy.get('[data-cy=password-input]').type(password);
}
cy.get('[data-cy=login-button]').click();

View File

@ -10,10 +10,14 @@
"lint": "eslint --ext .js,.vue src",
"fix-lint": "eslint --ext .js,.vue --fix src",
"build": "node build/build.js",
"open:cypress:e2e": "cypress open --config-file cypress.e2e.json",
"open:cypress:frontend": "cypress open --config-file cypress.frontend.json",
"test:cypress:e2e": "cypress run --config-file cypress.e2e.json",
"test:cypress:frontend": "cypress run --config-file cypress.frontend.json",
"open:cypress:e2e": "npm run cypress:e2e:open",
"open:cypress:frontend": "npm run cypress:frontend:open",
"test:cypress:e2e": "npm run cypress:e2e:test",
"test:cypress:frontend": "npm run cypress:frontend:test",
"cypress:e2e:open": "cypress open --config-file cypress.e2e.json",
"cypress:frontend:open": "cypress open --config-file cypress.frontend.json",
"cypress:e2e:test": "cypress run --config-file cypress.e2e.json",
"cypress:frontend:test": "cypress run --config-file cypress.frontend.json",
"install:cypress": "cypress install",
"test:unit": "jest"
},

View File

@ -127,6 +127,9 @@ class Snapshot(models.Model):
without_owner = Q(owner__isnull=True)
no_snapshot = Q(contentblocksnapshot__isnull=True)
owner_user = Q(owner=user)
chapter.title_hidden_for.remove(selected_class)
chapter.description_hidden_for.remove(selected_class)
for content_block in qs.filter(without_owner & no_snapshot):
content_block.hidden_for.remove(selected_class)
for content_block in qs.filter(owner_user):

View File

@ -17,6 +17,8 @@ query ModulesQuery($slug: String, $id: ID) {
}
chapters {
id
titleHiddenFor { name }
descriptionHiddenFor { name }
contentBlocks {
id
title

View File

@ -35,6 +35,9 @@ class CreateSnapshotTestCase(SkillboxTestCase):
self.module = ModuleFactory(slug=self.slug)
self.skillbox_class = SchoolClass.objects.get(name='skillbox')
self.teacher2 = User.objects.get(username='teacher2')
self.second_class_name = 'second_class'
self.second_class = SchoolClass.objects.get(name=self.second_class_name)
# module M has a chapter
self.chapter = ChapterFactory(parent=self.module, slug='some-chapter')
@ -62,7 +65,7 @@ class CreateSnapshotTestCase(SkillboxTestCase):
self.hidden_content_block.hidden_for.add(self.skillbox_class)
self.custom_content_block.visible_for.add(self.skillbox_class)
# chapter description is hidden for school class X
# chapter title is hidden for school class X
self.chapter.title_hidden_for.add(self.skillbox_class)
# we make a snapshot S of the module M
@ -196,20 +199,14 @@ class CreateSnapshotTestCase(SkillboxTestCase):
user=self.teacher)
self.assertEqual(Snapshot.objects.count(), 1)
self.assertEqual(self.snapshot.custom_objectives.count(), 2)
school_class_name = 'second_class'
second_class = SchoolClass.objects.get(name=school_class_name)
request = RequestFactory().get('/')
teacher2 = User.objects.get(username='teacher2')
request.user = teacher2
client = Client(schema=schema, context_value=request)
result = client.execute(APPLY_SNAPSHOT_MUTATION, variables={
result = self.get_client(self.teacher2).execute(APPLY_SNAPSHOT_MUTATION, variables={
'input': {
'snapshot': to_global_id('SnapshotNode', self.snapshot.pk),
'selectedClass': to_global_id('SchoolClassNode', second_class.pk),
'selectedClass': to_global_id('SchoolClassNode', self.second_class.pk),
}
})
self.assertIsNone(result.get('errors'))
module = self._test_module_visibility(client, school_class_name)
module = self._test_module_visibility(self.get_client(self.teacher2), self.second_class_name)
original_creator = module['chapters'][0]['contentBlocks'][2].get('originalCreator')
self.assertIsNotNone(original_creator)
self.assertEqual(original_creator.get('id'), to_global_id('PublicUserNode', self.teacher.pk))
@ -249,15 +246,13 @@ class CreateSnapshotTestCase(SkillboxTestCase):
self.assertEqual(changes['hiddenObjectives'], 1)
def test_apply_initial_snapshot(self):
teacher2 = User.objects.get(username='teacher2')
teacher2_client = self.get_client(user=teacher2)
third_class = SchoolClassFactory(
users=[teacher2],
users=[self.teacher2],
name='third_class'
)
# make a neutral snapshot, nothing new, nothing hidden
result = teacher2_client.execute(CREATE_SNAPSHOT_MUTATION, variables={
result = self.get_client(user=self.teacher2).execute(CREATE_SNAPSHOT_MUTATION, variables={
'input': {
'module': self.slug,
'selectedClass': to_global_id('SchoolClassNode', third_class.pk),
@ -305,12 +300,10 @@ class CreateSnapshotTestCase(SkillboxTestCase):
teacher2 = User.objects.get(username='teacher2')
teacher2_client = self.get_client(user=teacher2)
school_class_name = 'second_class'
second_class = SchoolClass.objects.get(name=school_class_name)
result = teacher2_client.execute(APPLY_SNAPSHOT_MUTATION, variables={
'input': {
'snapshot': snapshot_id,
'selectedClass': to_global_id('SchoolClassNode', second_class.pk),
'selectedClass': to_global_id('SchoolClassNode', self.second_class.pk),
}
})
self.assertIsNone(result.get('errors'))
@ -323,6 +316,48 @@ class CreateSnapshotTestCase(SkillboxTestCase):
self.assertEqual(len(chapter['contentBlocks']), 4)
def test_snapshot_chapter_visibility_after_apply(self):
self.chapter.title_hidden_for.remove(self.skillbox_class)
self.chapter.description_hidden_for.remove(self.skillbox_class)
self.chapter.title_hidden_for.add(self.second_class)
self.chapter.description_hidden_for.add(self.second_class)
def assert_chapter_hidden(hidden):
result = self.get_client(self.teacher2).execute(MODULE_QUERY, variables={
'slug': self.module.slug
})
self.assertIsNone(result.get('errors'))
chapter = result['data']['module']['chapters'][0]
self.assertEqual(self.second_class_name in map(lambda x: x['name'], chapter['titleHiddenFor']), hidden)
self.assertEqual(self.second_class_name in map(lambda x: x['name'], chapter['descriptionHiddenFor']), hidden)
assert_chapter_hidden(True)
result = self.graphene_client.execute(CREATE_SNAPSHOT_MUTATION, variables={
'input': {
'module': self.slug,
'selectedClass': to_global_id('SchoolClassNode', self.skillbox_class.pk),
}
})
self.assertIsNone(result.get('errors'))
snapshot = result['data']['createSnapshot']['snapshot']
snapshot_id = snapshot['id']
chapter = snapshot['chapters'][0]
self.assertEqual(chapter['titleHidden'], False)
self.assertEqual(chapter['descriptionHidden'], False)
result = self.get_client(self.teacher2).execute(APPLY_SNAPSHOT_MUTATION, variables={
'input': {
'snapshot': snapshot_id,
'selectedClass': to_global_id('SchoolClassNode', self.second_class.pk),
}
})
self.assertIsNone(result.get('errors'))
assert_chapter_hidden(False)
class SnapshotTestCase(SkillboxTestCase):
def setUp(self) -> None:
self.createDefault()