import { getMinimalMe } from '../../../support/helpers'; const SELECTED_CLASS_ID = 'selectedClassId'; const slug = 'some-room'; const getOperations = ({ readOnly, classReadOnly }) => { const { me } = getMinimalMe({ readOnly, classReadOnly, isTeacher: true }); return { MeQuery: { me: { ...me, readOnly, selectedClass: { id: SELECTED_CLASS_ID, readOnly: classReadOnly, }, }, }, RoomEntriesQuery: { room: { id: 'roomId', slug, title: 'room title', entryCount: 3, appearance: 'blue', description: 'room description', schoolClass: { id: SELECTED_CLASS_ID, name: 'selected class', }, roomEntries: { edges: [ { node: { id: 'entryId', slug: 'room-entry-slug', title: 'entry title', contents: [], author: { id: btoa('PublicUserNode:authorId'), firstName: 'first', lastName: 'last', avatarUrl: '', }, }, }, ], }, }, }, }; }; const checkRoomReadOnly = ({ editable, readOnly, classReadOnly = false }) => { const operations = getOperations({ readOnly, classReadOnly }); cy.mockGraphqlOps({ operations, }); const exist = editable ? 'exist' : 'not.exist'; cy.visit(`room/${slug}`); cy.get('.room-entry').should('exist'); cy.getByDataCy('add-room-entry-button').should(exist); cy.getByDataCy('room-actions').should(exist); }; describe('Room Team Management - Read only', () => { beforeEach(() => { cy.setup(); }); it('can edit room', () => { checkRoomReadOnly({ editable: true, readOnly: false }); }); it('can not edit room', () => { checkRoomReadOnly({ editable: false, readOnly: true }); }); it('can not edit room of inactive class', () => { checkRoomReadOnly({ editable: false, readOnly: false, classReadOnly: true }); }); });