diff --git a/frontend/e2e/cypress/integration/groupManagementPage.spec.js b/frontend/e2e/cypress/integration/groupManagementPage.spec.js index 9485921..9eba05f 100644 --- a/frontend/e2e/cypress/integration/groupManagementPage.spec.js +++ b/frontend/e2e/cypress/integration/groupManagementPage.spec.js @@ -4,14 +4,52 @@ describe('Group Management Page', () => { beforeEach(() => { cy.clearLocalStorage() cy.loginAsAdmin() + + // Ensure Aihe A and Aihe B have topicAccepted emails so they appear in the Topic dropdown. + // topicListPage.spec.js deletes all sent emails, which pollutes subsequent test runs. + cy.window().then((win) => { + const token = JSON.parse(win.localStorage.getItem('loggedInUser')).token + cy.request({ + url: '/api/topics', + headers: { Authorization: `Bearer ${token}` }, + }).then((res) => { + const topics = res.body.topics + const aiheA = topics.find((t) => t.content.title === 'Aihe A') + const aiheB = topics.find((t) => t.content.title === 'Aihe B') + + if (aiheA) { + cy.request({ + method: 'POST', + url: '/api/email/send', + headers: { Authorization: `Bearer ${token}` }, + body: { messageType: 'topicAccepted', messageLanguage: 'finnish', topicId: aiheA.id }, + failOnStatusCode: false, + }) + } + if (aiheB) { + cy.request({ + method: 'POST', + url: '/api/email/send', + headers: { Authorization: `Bearer ${token}` }, + body: { messageType: 'topicAccepted', messageLanguage: 'finnish', topicId: aiheB.id }, + failOnStatusCode: false, + }) + } + }) + }) + cy.visit('/administration/groups') }) describe('Creating a group', () => { it('is successful when all necessary details are provided', () => { - cy.get('.configuration-selector').click() + cy.get('.configuration-selector').should('be.visible').click() + cy.wait(500) cy.get('.configuration-1').click() - cy.get('.create-group-form-topic__selector').click() + cy.wait(500) + + cy.get('.create-group-form-topic__selector').should('be.visible').click() + cy.wait(500) cy.get('.topic-menu-item').contains('Aihe A').click() cy.get('.create-group-form__name input').clear().type('Ryhmä A') cy.get('.create-group-form__student-input textarea:not([aria-hidden="true"])').type( @@ -33,8 +71,10 @@ describe('Group Management Page', () => { describe('Viewing a group', () => { beforeEach(() => { - cy.get('.configuration-selector').click() + cy.get('.configuration-selector').should('be.visible').click() + cy.wait(500) cy.get('.configuration-1').click() + cy.wait(500) }) it('deletes a student', () => { @@ -53,8 +93,10 @@ describe('Group Management Page', () => { describe('Editing a group', () => { beforeEach(() => { - cy.get('.configuration-selector').click() + cy.get('.configuration-selector').should('be.visible').click() + cy.wait(500) cy.get('.configuration-1').click() + cy.wait(500) cy.get('[data-cy=edit-group-button]').eq(0).click() cy.get('.notification').should('contain', 'Editing for group').should('contain', 'enabled!') }) @@ -77,13 +119,8 @@ describe('Group Management Page', () => { it('changes topic', () => { cy.get('.edit-group-form-topic__selector').should('be.visible').click() - cy.get('.topic-menu-item') - .first() - .should('be.visible') - .within(() => { - cy.wait(500) - cy.contains('Aihe B').click() - }) + cy.wait(500) + cy.get('.topic-menu-item').contains('Aihe B').click() cy.get('[data-cy=edit-group-name-field] input').clear().type('Ryhmä B') cy.get('[data-cy=edit-group-save-button]').click() cy.get('.notification').should('have.text', 'Group updated!') diff --git a/frontend/e2e/cypress/integration/staffTagPage.spec.js b/frontend/e2e/cypress/integration/staffTagPage.spec.js index 133c967..7d609a9 100644 --- a/frontend/e2e/cypress/integration/staffTagPage.spec.js +++ b/frontend/e2e/cypress/integration/staffTagPage.spec.js @@ -15,6 +15,8 @@ const formatDate = (date) => date.toISOString().slice(0, 10) describe('Staff tag page', () => { before(() => { cy.deleteAllGroups() + cy.loginAsRegisteredUser() + cy.loginAsRegisteredIndicatedUser() cy.loginAsAdmin() cy.visit('/') cy.createTag('Coding') @@ -114,16 +116,13 @@ describe('Staff tag page', () => { }) it('displays correct tag data for group', () => { - cy.get('[data-cy="configuration-selector"]') - .click() - .then(() => { - cy.contains('Konfiguraatio 1').click() - }) - cy.get('[data-cy="group-selector"]') - .click() - .then(() => { - cy.contains('Brand New Group').click() - }) + cy.get('[data-cy="configuration-selector"]').should('be.visible').click() + cy.wait(500) + cy.get('.configuration-menu-item').contains('Konfiguraatio 1').click() + + cy.get('[data-cy="group-selector"]').should('be.visible').click() + cy.wait(500) + cy.get('.group-menu-item').contains('Brand New Group').click() cy.contains('Tag usage for Brand New Group').should('exist') cy.get('#bar-Coding').trigger('mouseover') cy.get('.recharts-tooltip-wrapper').should('be.visible').and('contain.text', '6 h') @@ -151,21 +150,17 @@ describe('Staff tag page', () => { }) it('displays correct tag data for individual student', () => { - cy.get('[data-cy="configuration-selector"]') - .click() - .then(() => { - cy.contains('Konfiguraatio 1').click() - }) - cy.get('[data-cy="group-selector"]') - .click() - .then(() => { - cy.contains('Brand New Group').click() - }) - cy.get('[data-cy="student-selector"]') - .click() - .then(() => { - cy.contains('Volodymyr').click() - }) + cy.get('[data-cy="configuration-selector"]').should('be.visible').click() + cy.wait(500) + cy.get('.configuration-menu-item').contains('Konfiguraatio 1').click() + + cy.get('[data-cy="group-selector"]').should('be.visible').click() + cy.wait(500) + cy.get('.group-menu-item').contains('Brand New Group').click() + + cy.get('[data-cy="student-selector"]').should('be.visible').click() + cy.wait(500) + cy.get('.student-menu-item').contains('Volodymyr').click() cy.contains('Tag usage for Volodymyr').should('exist') cy.get('#bar-Coding').trigger('mouseover') cy.get('.recharts-tooltip-wrapper').should('be.visible').and('contain.text', '4 h') diff --git a/frontend/e2e/cypress/integration/topicListPage.spec.js b/frontend/e2e/cypress/integration/topicListPage.spec.js index 00f6284..efaa7b6 100644 --- a/frontend/e2e/cypress/integration/topicListPage.spec.js +++ b/frontend/e2e/cypress/integration/topicListPage.spec.js @@ -140,6 +140,9 @@ describe('Topic list page', () => { .eq(2) .invoke('attr', 'data-cy-topic-name') .should('eq', 'Ohjelmistotuotantoprojektin laajennus') + + // Restore Aihe C to its original Active state to prevent test pollution in subsequent runs! + findTopicActiveCheckbox('Aihe C').click() }) })