const schema = require('../fixtures/schema.json'); const me = require('../fixtures/me.join-class.json'); const selectedClass = require('../fixtures/selected-school-class.json'); describe('Class Management', () => { beforeEach(() => { cy.server(); cy.mockGraphql({ schema: schema, }); cy.viewport('macbook-15'); cy.apolloLogin('rahel.cueni', 'test'); }); it('should join class', () => { cy.mockGraphqlOps({ operations: { MeQuery: me, JoinClass: { joinClass: { success: true, schoolClass: { id: "U2Nob29sQ2xhc3NOb2RlOjI=", name: "KF1A", __typename: "SchoolClassNode" } } } } }); cy.visit('/me/profile'); cy.get('[data-cy=header-user-widget]').within(() => { cy.get('[data-cy=user-widget-avatar]').click(); }); cy.get('[data-cy=class-selection]').click(); cy.get('[data-cy=class-selection-entry]').should('have.length', 1); cy.get('[data-cy=class-selection]').click(); cy.get('[data-cy=join-class-link]').click(); cy.get('[data-cy=input-class-code]').type('XXXX'); cy.get('[data-cy=join-class]').click(); cy.get('[data-cy=header-user-widget]').within(() => { cy.get('[data-cy=user-widget-avatar]').click(); }); cy.get('[data-cy=class-selection]').click(); cy.get('[data-cy=class-selection-entry]').should('have.length', 2); }); it('should not be able to leave class', () => { cy.mockGraphqlOps({ operations: { MeQuery: me, MySchoolClassQuery: selectedClass } }); cy.visit('/me/my-class'); cy.get('[data-cy=school-class-member]').should('have.length', 2); cy.get('[data-cy=remove-from-class]').should('have.length', 0); cy.get('[data-cy=add-to-class]').should('have.length', 0); }); it('should leave and re-join class', () => { const teacher = { me: { ...me.me, isTeacher: true } }; const teacherSelectedClass = { me: { ...selectedClass.me, isTeacher: true } }; cy.mockGraphqlOps({ operations: { MeQuery: teacher, AddRemoveMember: { addRemoveMember: { success: true } }, MySchoolClassQuery: teacherSelectedClass } }); cy.visit('/me/my-class'); cy.get('[data-cy=active-class-members-list]').within(() => { cy.get('[data-cy=school-class-member]').should('have.length', 2) }); cy.get('[data-cy=inactive-class-members-list]').within(() => { cy.get('[data-cy=school-class-member]').should('have.length', 0) }); cy.get('[data-cy=remove-from-class]').first().click(); cy.get('[data-cy=active-class-members-list]').within(() => { cy.get('[data-cy=school-class-member]').should('have.length', 1) }); cy.get('[data-cy=inactive-class-members-list]').within(() => { cy.get('[data-cy=school-class-member]').should('have.length', 1) }); cy.get('[data-cy=add-to-class]').first().click(); cy.get('[data-cy=active-class-members-list]').within(() => { cy.get('[data-cy=school-class-member]').should('have.length', 2) }); cy.get('[data-cy=inactive-class-members-list]').within(() => { cy.get('[data-cy=school-class-member]').should('have.length', 0) }); }); it('should display old classes', () => { let oldClasses = me.me.schoolClasses; let OldClassesQuery = { me: { ...me.me, oldClasses }, }; debugger; cy.mockGraphqlOps({ operations: { MeQuery: me, OldClassesQuery } }); cy.visit('/me/old-classes'); cy.get('[data-cy=old-class-item]').should('have.length', 1); }); it.only('changes class name', () => { cy.visit('/me/my-class'); let className = 'Gotta have class'; cy.get('[data-cy=edit-class-name-link]').click(); cy.get('[data-cy=edit-class-name-input]').type('{selectall}{backspace}').type(className); cy.get('[data-cy=save-button]').click(); cy.get('[data-cy=class-name-heading]').should('equal', className); }) });