321 lines
8.6 KiB
JavaScript
321 lines
8.6 KiB
JavaScript
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');
|
|
|
|
});
|
|
|
|
// fixme: cache misbehaves with mequery, but only for test
|
|
// it('should join class', () => {
|
|
// const name = 'KF1A';
|
|
// const id = 'U2Nob29sQ2xhc3NOb2RlOjI=';
|
|
// const __typename = 'SchoolClassNode';
|
|
//
|
|
// let localMe = {
|
|
// ...me
|
|
// };
|
|
//
|
|
// cy.mockGraphqlOps({
|
|
// operations: {
|
|
// MeQuery: localMe,
|
|
// // JoinClass() {
|
|
// // // fixme: is this necessary? the cache somehow does not seem to do anything for the MeQuery
|
|
// // let schoolClass = {
|
|
// // id,
|
|
// // name,
|
|
// // // __typename
|
|
// // };
|
|
// // // localMe.me.schoolClasses.edges.push({
|
|
// // // node: schoolClass,
|
|
// // // __typename: 'SchoolClassNodeEdge'
|
|
// // // });
|
|
// // return {
|
|
// // joinClass: {
|
|
// // success: true,
|
|
// // schoolClass
|
|
// // }
|
|
// // }
|
|
// // },
|
|
// JoinClass: {
|
|
// joinClass: {
|
|
// success: true,
|
|
// schoolClass: {
|
|
// name,
|
|
// id
|
|
// }
|
|
// }
|
|
// },
|
|
// MySchoolClassQuery: {
|
|
// me: {
|
|
// ...selectedClass.me,
|
|
// selectedClass: {
|
|
// __typename,
|
|
// name,
|
|
// id,
|
|
// members: []
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// });
|
|
//
|
|
// 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=school-class-name]').should('contain', name);
|
|
// cy.get('[data-cy=current-class-name]').should('contain', name);
|
|
//
|
|
// 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', () => {
|
|
// todo: re-enable after the deactivation of users is re-enabled again
|
|
|
|
// 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]').should('not.exist');
|
|
//
|
|
// cy.get('[data-cy=remove-from-class]').first().click();
|
|
//
|
|
// cy.get('[data-cy=modal-save-button]').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]').should('not.exist');
|
|
});
|
|
|
|
it('should display old classes', () => {
|
|
let oldClasses = me.me.schoolClasses;
|
|
let OldClassesQuery = {
|
|
me: {
|
|
...me.me,
|
|
oldClasses
|
|
},
|
|
};
|
|
|
|
cy.mockGraphqlOps({
|
|
operations: {
|
|
MeQuery: me,
|
|
OldClassesQuery
|
|
}
|
|
});
|
|
|
|
cy.visit('/me/old-classes');
|
|
|
|
cy.get('[data-cy=old-class-item]').should('have.length', 1);
|
|
|
|
});
|
|
});
|
|
|
|
describe('Teacher Class Management', () => {
|
|
|
|
beforeEach(() => {
|
|
cy.server();
|
|
|
|
cy.mockGraphql({
|
|
schema: schema,
|
|
});
|
|
|
|
cy.viewport('macbook-15');
|
|
cy.apolloLogin('nico.zickgraf', 'test');
|
|
|
|
});
|
|
|
|
it('changes class name', () => {
|
|
let className = 'Gotta have class';
|
|
|
|
let localMe = {
|
|
me: {
|
|
...me.me,
|
|
isTeacher: true
|
|
}
|
|
};
|
|
|
|
cy.mockGraphqlOps({
|
|
operations: {
|
|
MeQuery: localMe,
|
|
MySchoolClassQuery: {
|
|
me: {
|
|
...selectedClass.me,
|
|
isTeacher: true
|
|
}
|
|
},
|
|
UpdateSchoolClass: {
|
|
updateSchoolClass: {
|
|
success: true,
|
|
schoolClass: {
|
|
name: className,
|
|
__typename: 'SchoolClassNode'
|
|
},
|
|
__typename: 'UpdateSchoolClassPayload'
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
cy.visit('/me/my-class');
|
|
|
|
cy.get('[data-cy=edit-class-name-link]').click();
|
|
cy.get('[data-cy=edit-class-name-input] input').type('{selectall}{backspace}').type(className);
|
|
cy.get('[data-cy=modal-save-button]').click();
|
|
cy.get('[data-cy=school-class-name]').should('contain', className);
|
|
});
|
|
|
|
// // fixme: cache misbehaves with mequery, but only for test
|
|
//
|
|
// it.only('creates a new class', () => {
|
|
// const name = 'Moordale';
|
|
// const id = 'U2Nob29sQ2xhc3NOb2RlOjI=';
|
|
// const __typename = "SchoolClassNode";
|
|
// let localMe = {
|
|
// me: {
|
|
// ...me.me,
|
|
// isTeacher: true
|
|
// }
|
|
// };
|
|
//
|
|
// cy.mockGraphqlOps({
|
|
// operations: {
|
|
// MeQuery: () => {
|
|
// return localMe;
|
|
// },
|
|
// CreateSchoolClass() {
|
|
// // fixme: is this necessary? the cache somehow does not seem to do anything for the MeQuery
|
|
// let schoolClass = {
|
|
// id,
|
|
// name,
|
|
// __typename
|
|
// };
|
|
// // localMe.me.schoolClasses.edges.push({
|
|
// // node: schoolClass,
|
|
// // __typename: 'SchoolClassNodeEdge'
|
|
// // });
|
|
// return {
|
|
// createSchoolClass: {
|
|
// success: true,
|
|
// schoolClass
|
|
// }
|
|
// }
|
|
// },
|
|
// MySchoolClassQuery: {
|
|
// me: {
|
|
// ...selectedClass.me,
|
|
// selectedClass: {
|
|
// __typename,
|
|
// name,
|
|
// id,
|
|
// members: []
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// });
|
|
//
|
|
// cy.visit('/me/my-class');
|
|
//
|
|
// cy.get('h1').should('exist');
|
|
//
|
|
// 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=create-class-link]').click();
|
|
//
|
|
// cy.get('[data-cy=input-class-name]').type(name);
|
|
//
|
|
// cy.get('[data-cy=create-class]').click();
|
|
//
|
|
// cy.get('[data-cy=school-class-name]').should('contain', name);
|
|
// cy.get('[data-cy=current-class-name]').should('contain', name);
|
|
//
|
|
// 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);
|
|
// });
|
|
});
|