Add read only mode for class and team management

This commit is contained in:
Ramon Wenger 2021-07-08 15:30:19 +02:00
parent 4b6d067dc4
commit c131dc6c8e
11 changed files with 104 additions and 12 deletions

View File

@ -1,4 +1,4 @@
import mocks from '../../fixtures/mocks'; import mocks from '../../../fixtures/mocks';
const myText = 'Mein Feedback'; const myText = 'Mein Feedback';

View File

@ -1,5 +1,5 @@
import mocks from '../../fixtures/mocks'; import mocks from '../../../fixtures/mocks';
import minimalModule from '../../fixtures/module.minimal'; import minimalModule from '../../../fixtures/module.minimal';
const module = { const module = {
...minimalModule, ...minimalModule,

View File

@ -1,5 +1,5 @@
import mocks from '../../fixtures/mocks'; import mocks from '../../../fixtures/mocks';
import minimalModule from '../../fixtures/module.minimal'; import minimalModule from '../../../fixtures/module.minimal';
const getOperations = ({readOnly}) => ({ const getOperations = ({readOnly}) => ({
MeQuery: { MeQuery: {

View File

@ -0,0 +1,81 @@
import mocks from '../../../fixtures/mocks';
const selectedClassName = 'My Class';
const getOperations = ({readOnly}) => ({
MeQuery: {
me: {
onboardingVisited: true,
readOnly,
isTeacher: true,
},
},
MySchoolClassQuery: {
me: {
readOnly,
isTeacher: true,
selectedClass: {
name: selectedClassName,
code: 'XXXX',
members: [
{
id: 'id',
firstName: 'Me',
lastName: 'Myson',
isTeacher: true,
active: true,
isMe: true,
},
],
},
},
},
});
Cypress.Commands.add('checkSchoolClassTeamReadOnly', (readOnly) => {
cy.mockGraphqlOps({
operations: getOperations({readOnly}),
});
const exist = readOnly ? 'not.exist' : 'exist';
cy.visit('me/class');
cy.getByDataCy('group-list-name').should('exist').should('contain', selectedClassName);
cy.getByDataCy('show-code-button').should(exist);
cy.getByDataCy('edit-group-name-link').should(exist);
cy.openSidebar();
cy.getByDataCy('class-selection').click(); ``;
cy.getByDataCy('current-class-name').should('exist');
cy.getByDataCy('create-class-link').should(exist);
});
describe('School Class and Team Management - Read only', () => {
beforeEach(() => {
cy.fakeLogin('rahel.cueni', 'test');
cy.server();
cy.task('getSchema').then(schema => {
cy.mockGraphql({
schema,
mocks,
});
});
});
it('can see menu items', () => {
cy.checkSchoolClassTeamReadOnly(false);
// cy.visit('me/class');
// cy.getByDataCy('group-list-name').should('exist').should('contain', selectedClassName);
// cy.getByDataCy('show-code-button').should('exist');
// cy.getByDataCy('edit-group-name-link').should('exist');
// cy.openSidebar();
// cy.getByDataCy('class-selection').click();
// cy.getByDataCy('current-class-name').should('exist');
// cy.getByDataCy('create-class-link').should('exist');
});
it('can not see menu items', () => {
// cy.mockGraphqlOps({
// operations: getOperations({readOnly: true}),
// });
cy.checkSchoolClassTeamReadOnly(true);
});
});

View File

@ -202,3 +202,7 @@ Cypress.Commands.add('isSubmissionReadOnly', (myText) => {
cy.get('@textarea').should('have.attr', 'readonly'); cy.get('@textarea').should('have.attr', 'readonly');
cy.getByDataCy('submission-form-submit').should('not.exist'); cy.getByDataCy('submission-form-submit').should('not.exist');
}); });
Cypress.Commands.add('openSidebar', () => {
cy.getByDataCy('user-widget-avatar').click();
});

View File

@ -27,5 +27,7 @@ declare namespace Cypress {
canReopen(exists: boolean): void canReopen(exists: boolean): void
isSubmissionReadOnly(myText: string): void isSubmissionReadOnly(myText: string): void
openSidebar(): void
} }
} }

View File

@ -6,7 +6,8 @@
<router-link <router-link
:to="showCodeRoute" :to="showCodeRoute"
class="group-list__code-link button button--primary" class="group-list__code-link button button--primary"
v-if="showCode">Zugangscode anzeigen data-cy="show-code-button"
v-if="showCode && !readOnly">Zugangscode anzeigen
</router-link> </router-link>
<div class="group-list__content"> <div class="group-list__content">
@ -14,7 +15,7 @@
class="group-list__name" class="group-list__name"
data-cy="group-list-name">{{ name }}</span> data-cy="group-list-name">{{ name }}</span>
<edit-group-name <edit-group-name
v-if="canEdit" v-if="canEdit && !readOnly"
@edit="$emit('edit')"/> @edit="$emit('edit')"/>
</h2> </h2>
<div class="group-list__members group-list-members"> <div class="group-list__members group-list-members">
@ -85,6 +86,10 @@
type: Object, type: Object,
default: () => ({}), default: () => ({}),
}, },
readOnly: {
type: Boolean,
default: false
},
activeMembers: { activeMembers: {
type: Array, type: Array,
default: () => [], default: () => [],

View File

@ -27,12 +27,13 @@
<li <li
class="popover-links__link popover-links__link--large popover-links__divider" class="popover-links__link popover-links__link--large popover-links__divider"
data-cy="create-class-link" data-cy="create-class-link"
v-if="me.isTeacher" v-if="me.isTeacher && !me.readOnly"
@click="closeSidebar"> @click="closeSidebar">
<router-link <router-link
:to="{name: 'create-class'}" :to="{name: 'create-class'}"
tag="span" tag="span"
class="popover-links__link-with-icon"> class="popover-links__link-with-icon"
>
<add-icon class="popover-links__icon"/> <add-icon class="popover-links__icon"/>
<span>Klasse erfassen</span> <span>Klasse erfassen</span>
</router-link> </router-link>

View File

@ -2,6 +2,7 @@ query MySchoolClassQuery {
me { me {
id id
isTeacher isTeacher
readOnly
selectedClass { selectedClass {
id id
name name

View File

@ -4,9 +4,6 @@ export default {
apollo: { apollo: {
me: { me: {
query: MY_SCHOOL_CLASS_QUERY, query: MY_SCHOOL_CLASS_QUERY,
update(data) {
return this.$getRidOfEdges(data).me;
}
} }
}, },

View File

@ -6,6 +6,7 @@
:inactive-members="me.selectedClass.members.filter(member => !member.active)" :inactive-members="me.selectedClass.members.filter(member => !member.active)"
:show-code="me.isTeacher" :show-code="me.isTeacher"
:show-code-route="showCodeRoute" :show-code-route="showCodeRoute"
:read-only="me.readOnly"
:can-edit="me.isTeacher" :can-edit="me.isTeacher"
:enable-deactivate="true" :enable-deactivate="true"
title="Klassenliste" title="Klassenliste"