diff --git a/packages/e2e-tests/fixtures/index.js b/packages/e2e-tests/fixtures/index.js index fc9dabcf..f91e473e 100644 --- a/packages/e2e-tests/fixtures/index.js +++ b/packages/e2e-tests/fixtures/index.js @@ -7,6 +7,7 @@ const { UserInterfacePage } = require('./user-interface-page'); const { LoginPage } = require('./login-page'); const { AcceptInvitation } = require('./accept-invitation-page'); const { adminFixtures } = require('./admin'); +const { AdminCreateUserPage } = require('./admin/create-user-page'); exports.test = test.extend({ page: async ({ page }, use) => { @@ -51,6 +52,11 @@ exports.publicTest = test.extend({ acceptInvitationPage: async ({ page }, use) => { const acceptInvitationPage = new AcceptInvitation(page); await use(acceptInvitationPage); + }, + + adminCreateUserPage: async ({page}, use) => { + const adminCreateUserPage = new AdminCreateUserPage(page); + await use(adminCreateUserPage); } }); diff --git a/packages/e2e-tests/tests/user-invitation/invitation.spec.js b/packages/e2e-tests/tests/user-invitation/invitation.spec.js index 63a2f13e..33bc4378 100644 --- a/packages/e2e-tests/tests/user-invitation/invitation.spec.js +++ b/packages/e2e-tests/tests/user-invitation/invitation.spec.js @@ -1,17 +1,8 @@ -const { AdminCreateUserPage } = require('../../fixtures/admin/create-user-page'); const { publicTest, expect } = require('../../fixtures/index'); const { client } = require('../../fixtures/postgres-client-config'); const { DateTime } = require('luxon'); publicTest.describe('Accept invitation page', () => { - publicTest.beforeAll(async () => { - await client.connect(); - }); - - publicTest.afterAll(async () => { - await client.end(); - }); - publicTest('should not be able to set the password if token is empty', async ({ acceptInvitationPage }) => { await acceptInvitationPage.open(''); await acceptInvitationPage.excpectSubmitButtonToBeDisabled(); @@ -19,44 +10,83 @@ publicTest.describe('Accept invitation page', () => { await acceptInvitationPage.excpectSubmitButtonToBeDisabled(); }); - publicTest('should not be able to set the password if token is expired', async ({ acceptInvitationPage, page }) => { - const expiredTokenDate = DateTime.now().minus({days: 3}).toISO(); - const expiredToken = (Math.random() + 1).toString(36).substring(2); - - const adminCreateUserPage = new AdminCreateUserPage(page); - adminCreateUserPage.seed(Math.ceil(Math.random() * Number.MAX_SAFE_INTEGER)); - const user = adminCreateUserPage.generateUser(); - - const queryRole = { - text: 'SELECT * FROM roles WHERE name = $1', - values: ['Admin'] - }; - - try { - const queryRoleIdResult = await client.query(queryRole); - expect(queryRoleIdResult.rowCount).toEqual(1); - - const insertUser = { - text: 'INSERT INTO users (email, full_name, role_id, status, invitation_token, invitation_token_sent_at) VALUES ($1, $2, $3, $4, $5, $6)', - values: [user.email, user.fullName, queryRoleIdResult.rows[0].id, 'invited', expiredToken, expiredTokenDate], - }; - - const insertUserResult = await client.query(insertUser); - expect(insertUserResult.rowCount).toBe(1); - expect(insertUserResult.command).toBe('INSERT'); - } catch (err) { - console.error(err.message); - throw err; - } - - await acceptInvitationPage.open(expiredToken); - await acceptInvitationPage.acceptInvitation('something'); - await acceptInvitationPage.expectAlertToBeVisible(); - }); - publicTest('should not be able to set the password if token is not in db', async ({ acceptInvitationPage }) => { await acceptInvitationPage.open('abc'); await acceptInvitationPage.acceptInvitation('something'); await acceptInvitationPage.expectAlertToBeVisible(); }); + + publicTest.describe('Accept invitation page - users', () => { + const expiredTokenDate = DateTime.now().minus({days: 3}).toISO(); + const token = (Math.random() + 1).toString(36).substring(2); + + publicTest.beforeAll(async () => { + await client.connect(); + }); + + publicTest.afterAll(async () => { + await client.end(); + }); + + publicTest('should not be able to set the password if token is expired', async ({ acceptInvitationPage, adminCreateUserPage }) => { + adminCreateUserPage.seed(Math.ceil(Math.random() * Number.MAX_SAFE_INTEGER)); + const user = adminCreateUserPage.generateUser(); + + const queryRole = { + text: 'SELECT * FROM roles WHERE name = $1', + values: ['Admin'] + }; + + try { + const queryRoleIdResult = await client.query(queryRole); + expect(queryRoleIdResult.rowCount).toEqual(1); + + const insertUser = { + text: 'INSERT INTO users (email, full_name, role_id, status, invitation_token, invitation_token_sent_at) VALUES ($1, $2, $3, $4, $5, $6)', + values: [user.email, user.fullName, queryRoleIdResult.rows[0].id, 'invited', token, expiredTokenDate], + }; + + const insertUserResult = await client.query(insertUser); + expect(insertUserResult.rowCount).toBe(1); + expect(insertUserResult.command).toBe('INSERT'); + } catch (err) { + console.error(err.message); + throw err; + } + await acceptInvitationPage.open(token); + await acceptInvitationPage.acceptInvitation('something'); + await acceptInvitationPage.expectAlertToBeVisible(); + }); + + publicTest('should not be able to accept invitation if user was soft deleted', async ({ acceptInvitationPage, adminCreateUserPage }) => { + const dateNow = DateTime.now().toISO(); + const user = adminCreateUserPage.generateUser(); + + const queryRole = { + text: 'SELECT * FROM roles WHERE name = $1', + values: ['Admin'] + }; + + try { + const queryRoleIdResult = await client.query(queryRole); + expect(queryRoleIdResult.rowCount).toEqual(1); + + const insertUser = { + text: 'INSERT INTO users (email, full_name, deleted_at, role_id, status, invitation_token, invitation_token_sent_at) VALUES ($1, $2, $3, $4, $5, $6, $7)', + values: [user.email, user.fullName, dateNow, queryRoleIdResult.rows[0].id, 'invited', token, dateNow], + }; + + const insertUserResult = await client.query(insertUser); + expect(insertUserResult.rowCount).toBe(1); + expect(insertUserResult.command).toBe('INSERT'); + } catch (err) { + console.error(err.message); + throw err; + } + + await acceptInvitationPage.open(token); + await acceptInvitationPage.acceptInvitation('something'); + await acceptInvitationPage.expectAlertToBeVisible(); + }); + }); });