From 4d4091adcc7ceebc2bd400eab8657a791c573752 Mon Sep 17 00:00:00 2001 From: Ali BARIN Date: Sun, 27 Aug 2023 19:10:48 +0000 Subject: [PATCH] test: write login page tests --- .github/workflows/playwright.yml | 2 +- packages/e2e-tests/fixtures/index.js | 19 +++++++++++++++- packages/e2e-tests/fixtures/login-page.js | 15 ++++++++----- .../tests/authentication/login.spec.js | 22 +++++++++++++++++++ 4 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 packages/e2e-tests/tests/authentication/login.spec.js diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index 558ab361..0add160e 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -83,5 +83,5 @@ jobs: if: always() with: name: playwright-report - path: ./packages/e2e-tests/test-results/ + path: ./packages/e2e-tests/test-results/**/* retention-days: 30 diff --git a/packages/e2e-tests/fixtures/index.js b/packages/e2e-tests/fixtures/index.js index 2b228cd0..86b93cdb 100644 --- a/packages/e2e-tests/fixtures/index.js +++ b/packages/e2e-tests/fixtures/index.js @@ -8,7 +8,11 @@ const { LoginPage } = require('./login-page'); exports.test = test.extend({ page: async ({ page }, use) => { - await new LoginPage(page).login(); + const loginPage = new LoginPage(page); + await loginPage.login(); + + await expect(loginPage.loginButton).not.toBeVisible(); + await expect(page).toHaveURL('/flows'); await use(page); }, @@ -29,6 +33,19 @@ exports.test = test.extend({ }, }); +exports.publicTest = test.extend({ + page: async ({ page }, use) => { + await use(page); + }, + loginPage: async ({ page }, use) => { + const loginPage = new LoginPage(page); + + await loginPage.open(); + + await use(loginPage); + }, +}); + expect.extend({ toBeClickableLink: async (locator) => { await expect(locator).not.toHaveAttribute('aria-disabled', 'true'); diff --git a/packages/e2e-tests/fixtures/login-page.js b/packages/e2e-tests/fixtures/login-page.js index 5ab37cb6..cfef7c0d 100644 --- a/packages/e2e-tests/fixtures/login-page.js +++ b/packages/e2e-tests/fixtures/login-page.js @@ -17,13 +17,18 @@ export class LoginPage extends BasePage { this.loginButton = this.page.getByTestId('login-button'); } - async login() { + async open() { + return await this.page.goto(this.path); + } + + async login( + email = process.env.LOGIN_EMAIL, + password = process.env.LOGIN_PASSWORD + ) { await this.page.goto(this.path); - await this.emailTextField.fill(process.env.LOGIN_EMAIL); - await this.passwordTextField.fill(process.env.LOGIN_PASSWORD); + await this.emailTextField.fill(email); + await this.passwordTextField.fill(password); await this.loginButton.click(); - - await expect(this.loginButton).not.toBeVisible(); } } diff --git a/packages/e2e-tests/tests/authentication/login.spec.js b/packages/e2e-tests/tests/authentication/login.spec.js new file mode 100644 index 00000000..f43c0a86 --- /dev/null +++ b/packages/e2e-tests/tests/authentication/login.spec.js @@ -0,0 +1,22 @@ +// @ts-check +const { publicTest, test, expect } = require('../../fixtures/index'); + +publicTest.describe('Login page', () => { + publicTest('shows login form', async ({ loginPage }) => { + await loginPage.emailTextField.waitFor({ state: 'attached' }); + await loginPage.passwordTextField.waitFor({ state: 'attached' }); + await loginPage.loginButton.waitFor({ state: 'attached' }); + }); + + publicTest('lets user login', async ({ loginPage }) => { + await loginPage.login(); + + await expect(loginPage.page).toHaveURL('/flows'); + }); + + publicTest(`doesn't let un-existing user login`, async ({ loginPage }) => { + await loginPage.login('nonexisting@automatisch.io', 'sample'); + + await expect(loginPage.page).toHaveURL('/login'); + }); +});