From 26cda08d94be5c311eb1e9f16178379d9ddaf4a0 Mon Sep 17 00:00:00 2001 From: Ramon Wenger Date: Fri, 30 Jul 2021 17:54:46 +0200 Subject: [PATCH] Add read only on a per school class basis to assignments --- ...ignment-feedback-read-only.teacher.spec.js | 18 +++++++++++- .../assignment-read-only.student.spec.js | 28 +++++++++++-------- .../content-blocks/assignment/Assignment.vue | 2 +- .../assignment/SubmissionInput.vue | 2 +- client/src/pages/studentSubmission.vue | 2 +- 5 files changed, 37 insertions(+), 15 deletions(-) diff --git a/client/cypress/integration/frontend/read-only/assignment-feedback-read-only.teacher.spec.js b/client/cypress/integration/frontend/read-only/assignment-feedback-read-only.teacher.spec.js index d66bd3dd..1f2c0547 100644 --- a/client/cypress/integration/frontend/read-only/assignment-feedback-read-only.teacher.spec.js +++ b/client/cypress/integration/frontend/read-only/assignment-feedback-read-only.teacher.spec.js @@ -2,11 +2,15 @@ import mocks from '../../../fixtures/mocks'; const myText = 'Mein Feedback'; -const getOperations = ({readOnly}) => ({ +const getOperations = ({readOnly, classReadOnly = false}) => ({ MeQuery: { me: { onboardingVisited: true, readOnly, + selectedClass: { + id: 'selectedClassId', + readOnly: classReadOnly + } }, }, StudentSubmissions: { @@ -57,6 +61,7 @@ describe('Assignment feedback read-only - Teacher', () => { cy.isSubmissionReadOnly(myText); cy.getByDataCy('final-submission-reopen').should('not.exist'); }); + it('can edit', () => { cy.mockGraphqlOps({ operations: getOperations({readOnly: false}), @@ -66,4 +71,15 @@ describe('Assignment feedback read-only - Teacher', () => { cy.getByDataCy('final-submission-reopen').should('exist'); }); + + it('can not edit for inactive class', () => { + cy.mockGraphqlOps({ + operations: getOperations({readOnly: false, classReadOnly: true}), + }); + + cy.visit('submission/submission-id'); + + cy.isSubmissionReadOnly(myText); + cy.getByDataCy('final-submission-reopen').should('not.exist'); + }); }); diff --git a/client/cypress/integration/frontend/read-only/assignment-read-only.student.spec.js b/client/cypress/integration/frontend/read-only/assignment-read-only.student.spec.js index 35889908..36872112 100644 --- a/client/cypress/integration/frontend/read-only/assignment-read-only.student.spec.js +++ b/client/cypress/integration/frontend/read-only/assignment-read-only.student.spec.js @@ -1,4 +1,3 @@ -import mocks from '../../../fixtures/mocks'; import minimalModule from '../../../fixtures/module.minimal'; const module = { @@ -34,11 +33,15 @@ const module = { const myText = 'submission text'; -const getOperations = ({final, readOnly}) => ({ +const getOperations = ({final, readOnly, classReadOnly = false}) => ({ MeQuery: { me: { onboardingVisited: true, - readOnly + readOnly, + selectedClass: { + id: 'selectedClassId', + readOnly: classReadOnly + } }, }, ModuleDetailsQuery: { @@ -58,14 +61,7 @@ const getOperations = ({final, readOnly}) => ({ describe('Assignments read-only - Student', () => { beforeEach(() => { - cy.fakeLogin('rahel.cueni', 'test'); - cy.server(); - cy.task('getSchema').then(schema => { - cy.mockGraphql({ - schema, - mocks - }); - }); + cy.setup(); }); it('can edit and turn in', () => { @@ -112,4 +108,14 @@ describe('Assignments read-only - Student', () => { cy.getByDataCy('final-submission').should('exist'); cy.getByDataCy('final-submission-reopen').should('not.exist'); }); + + it('can not edit or turn in in inactive class', () => { + cy.mockGraphqlOps({ + operations: getOperations({final: false, readOnly: false, classReadOnly: true}) + }); + cy.visit('module/module-with-assignment'); + + cy.isSubmissionReadOnly(myText); + cy.getByDataCy('final-submission-reopen').should('not.exist'); + }); }); diff --git a/client/src/components/content-blocks/assignment/Assignment.vue b/client/src/components/content-blocks/assignment/Assignment.vue index 7607b32d..772089c5 100644 --- a/client/src/components/content-blocks/assignment/Assignment.vue +++ b/client/src/components/content-blocks/assignment/Assignment.vue @@ -16,7 +16,7 @@ :spellcheck-loading="spellcheckLoading" :saved="!unsaved" :spellcheck="true" - :read-only="me.readOnly" + :read-only="me.readOnly || me.selectedClass.readOnly" placeholder="Ergebnis erfassen" action="Ergebnis mit Lehrperson teilen" shared-msg="Das Ergebnis wurde mit der Lehrperson geteilt." diff --git a/client/src/components/content-blocks/assignment/SubmissionInput.vue b/client/src/components/content-blocks/assignment/SubmissionInput.vue index 76e27eb2..e00f4adc 100644 --- a/client/src/components/content-blocks/assignment/SubmissionInput.vue +++ b/client/src/components/content-blocks/assignment/SubmissionInput.vue @@ -45,7 +45,7 @@