Files
portabase/e2e/auth.spec.ts
T
3fee236fd0 feat: adding end-to-end testing for notification [skip-release] (#228)
* fix: release.yml

* fix: S3ChannelConfigSchema type port mismatch

* fix(csp): Conditionally sets UPGRADE_INSECURE_REQUESTS based on the PROJECT_URL scheme.

* chore: fix bug in github action.

* chore: fix bug in github action.

* chore: fix bug in github action.

* chore: fix bug in github action.

* chore: fix bug in github action.

* chore: fix bug in github action.

* chore: fix bug in github action.

* chore: fix bug in github action.

* chore: fix bug in github action.

* chore: fix bug in github action.

* chore: fix bug in github action.

* chore: fix bug in github action.

* chore: fix bug in github action.

* chore: fix bug in github action.

* chore: fix bug in github action.

* chore: fix bug in github action.

* chore: adding e2e tesing for notification.

* fix: updating trivy-action to the latest version, using new tagging pattern (vX.XX.XX instead of (X.XX.XX).

* fix: removing browser targeting in e2e workflow as it is already specify in playwright.config.ts

* fix: mapping secrets to environment variables in the end-to-end workflow.

* fix: add a condition to allow end-to-end workflow execution only on main repo (fork are excluded).

* fix: adding some data-testid to rely on more stable locator.

* fix: adding some data-testid to rely on more stable locator.

* fix: removing unusued browsers in end-to-end workflow.

* fix: removing unused browsers in end-to-end workflow.

* fix: removing unused browsers in end-to-end workflow.

---------

Co-authored-by: charlesgauthereau <charles.gauthereau@soluce-technologies.com>
Co-authored-by: killianlarcher <killian.larcher@soluce-technologies.com>
2026-03-31 20:25:15 +02:00

105 lines
3.8 KiB
TypeScript

import {test, expect} from '@playwright/test';
import {login, register, users} from "./helpers/auth";
import {LOCAL_STORAGE_PATH} from "./helpers/session";
const TIMEOUT = undefined
// const TIMEOUT = 5000
test.use({storageState: LOCAL_STORAGE_PATH})
test.describe.serial( () => {
test('Redirect to login if not connected', async ({page}) => {
await page.goto('/dashboard/projects');
await expect(page).toHaveURL("login?redirect=%2Fdashboard%2Fprojects", {timeout: TIMEOUT});
});
test('Password too short', async ({page}) => {
await page.goto('')
await page.click('text=Sign up')
await expect(page).toHaveURL('/register')
let password = '123456'
await register(page, users["admin"].username, users["admin"].email, password, password)
const toast = page.locator('text=Must have at least 8 character')
await expect(toast).toBeVisible()
})
test('Password too simple', async ({page}) => {
await page.goto('')
await page.click('text=Sign up')
await expect(page).toHaveURL('/register')
let password = '12345678'
await register(page, users["admin"].username, users["admin"].email, password, password)
const toast = page.locator('text=Your password must contain at least one uppercase letter, one lowercase letter, one number, and one special character.')
await expect(toast).toBeVisible()
})
test('Password and confirm password mismatch', async ({page}) => {
await page.goto('/')
await page.click('text=Sign up')
await expect(page).toHaveURL('/register')
let password = 'testPASS123456!'
let confirmPassword = 'testPASS123456!!'
await register(page, users["admin"].username, users["admin"].email, password, confirmPassword)
const toast = page.locator('text=The passwords did not match')
await expect(toast).toBeVisible()
})
test('Successful register for admin', async ({page}) => {
await page.goto('/')
await page.click('text=Sign up')
await expect(page).toHaveURL('/register')
await register(page, users["admin"].username, users["admin"].email, users["admin"].password, users["admin"].password)
await expect(page).toHaveURL('/login', {timeout: TIMEOUT})
})
test('User already exists.', async ({page}) => {
await page.goto('/')
await page.click('text=Sign up')
await expect(page).toHaveURL('/register')
await register(page, users["admin"].username, users["admin"].email, users["admin"].password, users["admin"].password)
const toast = page.locator('text=User already exists. Use another email.')
await expect(toast).toBeVisible()
})
test('Successful register for normal', async ({page}) => {
await page.goto('/')
await page.click('text=Sign up')
await expect(page).toHaveURL('/register')
await register(page, users["normal"].username, users["normal"].email, users["normal"].password, users["normal"].password)
await expect(page).toHaveURL('/login', {timeout: TIMEOUT})
})
test('Failed login because account not active', async ({page}) => {
await page.goto('/login')
await login(page, users["normal"].email, users["normal"].password)
const toast = page.locator('text=Your account is not active.')
await expect(toast).toBeVisible()
})
test('Successful login', async ({page}) => {
await page.goto('/login')
await login(page, users["admin"].email, users["admin"].password)
await expect(page).toHaveURL('/dashboard/home', {timeout: TIMEOUT})
await expect(page.getByRole('link', {name: 'Logo Portabase'})).toBeVisible()
await page.context().storageState({path: LOCAL_STORAGE_PATH})
})
})