style: fix linting issues met Prettier
This commit is contained in:
parent
0154af4de8
commit
a74e786da2
5 changed files with 139 additions and 136 deletions
|
@ -1,82 +1,82 @@
|
||||||
import { test, expect } from '@playwright/test';
|
import { test, expect } from "@playwright/test";
|
||||||
|
|
||||||
test('User can pick their language', async ({ page }) => {
|
test("User can pick their language", async ({ page }) => {
|
||||||
await page.goto('/');
|
await page.goto("/");
|
||||||
|
|
||||||
await expect(page.getByRole('button', { name: 'translate' })).toBeVisible();
|
await expect(page.getByRole("button", { name: "translate" })).toBeVisible();
|
||||||
await page.getByRole('button', { name: 'translate' }).click();
|
await page.getByRole("button", { name: "translate" }).click();
|
||||||
await page.getByText('Nederlands').click();
|
await page.getByText("Nederlands").click();
|
||||||
await expect(page.locator('h1')).toContainText('Onze sterke punten');
|
await expect(page.locator("h1")).toContainText("Onze sterke punten");
|
||||||
await expect(page.getByRole('heading', { name: 'Innovatief' })).toBeVisible();
|
await expect(page.getByRole("heading", { name: "Innovatief" })).toBeVisible();
|
||||||
|
|
||||||
await expect(page.getByRole('button', { name: 'vertalen' })).toBeVisible();
|
await expect(page.getByRole("button", { name: "vertalen" })).toBeVisible();
|
||||||
await page.getByRole('button', { name: 'vertalen' }).click();
|
await page.getByRole("button", { name: "vertalen" }).click();
|
||||||
await page.getByText('English').click();
|
await page.getByText("English").click();
|
||||||
await expect(page.locator('h1')).toContainText('Our strengths');
|
await expect(page.locator("h1")).toContainText("Our strengths");
|
||||||
await expect(page.getByRole('heading', { name: 'Innovative' })).toBeVisible();
|
await expect(page.getByRole("heading", { name: "Innovative" })).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Teacher can sign in', async ({ page }) => {
|
test("Teacher can sign in", async ({ page }) => {
|
||||||
await page.goto('/');
|
await page.goto("/");
|
||||||
await expect(page.getByRole('link', { name: 'log in' })).toBeVisible();
|
await expect(page.getByRole("link", { name: "log in" })).toBeVisible();
|
||||||
await page.getByRole('link', { name: 'log in' }).click();
|
await page.getByRole("link", { name: "log in" }).click();
|
||||||
|
|
||||||
await expect(page.getByRole('button', { name: 'teacher' })).toBeVisible();
|
await expect(page.getByRole("button", { name: "teacher" })).toBeVisible();
|
||||||
await page.getByRole('button', { name: 'teacher' }).click();
|
await page.getByRole("button", { name: "teacher" }).click();
|
||||||
|
|
||||||
await expect(page.getByText('teacher')).toBeVisible();
|
await expect(page.getByText("teacher")).toBeVisible();
|
||||||
await expect(page.getByRole('button', { name: 'Sign In' })).toBeVisible();
|
await expect(page.getByRole("button", { name: "Sign In" })).toBeVisible();
|
||||||
|
|
||||||
await expect(page).toHaveURL(/\/realms\/teacher\//);
|
await expect(page).toHaveURL(/\/realms\/teacher\//);
|
||||||
|
|
||||||
await page.getByRole('textbox', { name: 'Username or email' }).fill('testleerkracht1');
|
await page.getByRole("textbox", { name: "Username or email" }).fill("testleerkracht1");
|
||||||
await page.getByRole('textbox', { name: 'Password' }).fill('password');
|
await page.getByRole("textbox", { name: "Password" }).fill("password");
|
||||||
await page.getByRole('button', { name: 'Sign In' }).click();
|
await page.getByRole("button", { name: "Sign In" }).click();
|
||||||
|
|
||||||
await expect(page.getByRole('link', { name: 'Dwengo logo teacher' })).toBeVisible();
|
await expect(page.getByRole("link", { name: "Dwengo logo teacher" })).toBeVisible();
|
||||||
await expect(page.getByRole('button').nth(1)).toBeVisible();
|
await expect(page.getByRole("button").nth(1)).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Student can sign in', async ({ page }) => {
|
test("Student can sign in", async ({ page }) => {
|
||||||
await page.goto('/');
|
await page.goto("/");
|
||||||
await expect(page.getByRole('link', { name: 'log in' })).toBeVisible();
|
await expect(page.getByRole("link", { name: "log in" })).toBeVisible();
|
||||||
await page.getByRole('link', { name: 'log in' }).click();
|
await page.getByRole("link", { name: "log in" }).click();
|
||||||
|
|
||||||
await expect(page.getByRole('button', { name: 'student' })).toBeVisible();
|
await expect(page.getByRole("button", { name: "student" })).toBeVisible();
|
||||||
await page.getByRole('button', { name: 'student' }).click();
|
await page.getByRole("button", { name: "student" }).click();
|
||||||
|
|
||||||
await expect(page).toHaveURL(/\/realms\/student\//);
|
await expect(page).toHaveURL(/\/realms\/student\//);
|
||||||
|
|
||||||
await expect(page.getByText('student')).toBeVisible();
|
await expect(page.getByText("student")).toBeVisible();
|
||||||
await expect(page.getByRole('button', { name: 'Sign In' })).toBeVisible();
|
await expect(page.getByRole("button", { name: "Sign In" })).toBeVisible();
|
||||||
|
|
||||||
await page.getByRole('textbox', { name: 'Username or email' }).fill('testleerling1');
|
await page.getByRole("textbox", { name: "Username or email" }).fill("testleerling1");
|
||||||
await page.getByRole('textbox', { name: 'Password' }).fill('password');
|
await page.getByRole("textbox", { name: "Password" }).fill("password");
|
||||||
await page.getByRole('button', { name: 'Sign In' }).click();
|
await page.getByRole("button", { name: "Sign In" }).click();
|
||||||
|
|
||||||
await expect(page.getByRole('link', { name: 'Dwengo logo student' })).toBeVisible();
|
await expect(page.getByRole("link", { name: "Dwengo logo student" })).toBeVisible();
|
||||||
await expect(page.getByRole('button').nth(1)).toBeVisible();
|
await expect(page.getByRole("button").nth(1)).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Cannot sign in with invalid credentials', async ({ page }) => {
|
test("Cannot sign in with invalid credentials", async ({ page }) => {
|
||||||
await page.goto('/');
|
await page.goto("/");
|
||||||
await page.getByRole('link', { name: 'log in' }).click();
|
await page.getByRole("link", { name: "log in" }).click();
|
||||||
await page.getByRole('button', { name: 'teacher' }).click();
|
await page.getByRole("button", { name: "teacher" }).click();
|
||||||
await page.getByRole('textbox', { name: 'Username or email' }).fill('doesnotexist');
|
await page.getByRole("textbox", { name: "Username or email" }).fill("doesnotexist");
|
||||||
await page.getByRole('textbox', { name: 'Password' }).fill('wrong');
|
await page.getByRole("textbox", { name: "Password" }).fill("wrong");
|
||||||
await page.getByRole('button', { name: 'Sign In' }).click();
|
await page.getByRole("button", { name: "Sign In" }).click();
|
||||||
await expect(page.getByText('Invalid username or password.')).toBeVisible();
|
await expect(page.getByText("Invalid username or password.")).toBeVisible();
|
||||||
|
|
||||||
await page.goto('/');
|
await page.goto("/");
|
||||||
await page.getByRole('link', { name: 'log in' }).click();
|
await page.getByRole("link", { name: "log in" }).click();
|
||||||
await page.getByRole('button', { name: 'student' }).click();
|
await page.getByRole("button", { name: "student" }).click();
|
||||||
await page.getByRole('textbox', { name: 'Username or email' }).fill('doesnotexist');
|
await page.getByRole("textbox", { name: "Username or email" }).fill("doesnotexist");
|
||||||
await page.getByRole('textbox', { name: 'Password' }).fill('wrong');
|
await page.getByRole("textbox", { name: "Password" }).fill("wrong");
|
||||||
await page.getByRole('button', { name: 'Sign In' }).click();
|
await page.getByRole("button", { name: "Sign In" }).click();
|
||||||
await expect(page.getByText('Invalid username or password.')).toBeVisible();
|
await expect(page.getByText("Invalid username or password.")).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Cannot skip login', async ({ page }) => {
|
test("Cannot skip login", async ({ page }) => {
|
||||||
await page.goto('/user');
|
await page.goto("/user");
|
||||||
await expect(page.getByRole('link', { name: 'log in' })).toBeVisible();
|
await expect(page.getByRole("link", { name: "log in" })).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
import { test, expect } from './fixtures.js';
|
import { test, expect } from "./fixtures.js";
|
||||||
|
|
||||||
test('Users can filter', async ({ page }) => {
|
test("Users can filter", async ({ page }) => {
|
||||||
await page.goto('/user');
|
await page.goto("/user");
|
||||||
|
|
||||||
await page.getByRole('combobox').filter({ hasText: 'Select a themeAll' }).locator('i').click();
|
await page.getByRole("combobox").filter({ hasText: "Select a themeAll" }).locator("i").click();
|
||||||
await page.getByText('Nature and climate').click();
|
await page.getByText("Nature and climate").click();
|
||||||
await page.getByRole('combobox').filter({ hasText: 'Select ageAll agesSelect age' }).locator('i').click();
|
await page.getByRole("combobox").filter({ hasText: "Select ageAll agesSelect age" }).locator("i").click();
|
||||||
await page.getByText('and older').click();
|
await page.getByText("and older").click();
|
||||||
|
|
||||||
await expect(page.getByRole('link', { name: 'AI and Climate Students in' })).toBeVisible();
|
await expect(page.getByRole("link", { name: "AI and Climate Students in" })).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { test, expect } from './fixtures.js';
|
import { test, expect } from "./fixtures.js";
|
||||||
|
|
||||||
test('myTest', async ({ page }) => {
|
test("myTest", async ({ page }) => {
|
||||||
await expect(page).toHaveURL('/');
|
await expect(page).toHaveURL("/");
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
/* eslint-disable no-await-in-loop */
|
/* eslint-disable no-await-in-loop */
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
import { test as baseTest, expect } from '@playwright/test';
|
import { test as baseTest, expect } from "@playwright/test";
|
||||||
import type { Browser } from 'playwright-core';
|
import type { Browser } from "playwright-core";
|
||||||
import fs from 'fs';
|
import fs from "fs";
|
||||||
import path from 'path';
|
import path from "path";
|
||||||
|
|
||||||
/* Based on https://playwright.dev/docs/auth#moderate-one-account-per-parallel-worker */
|
/* Based on https://playwright.dev/docs/auth#moderate-one-account-per-parallel-worker */
|
||||||
|
|
||||||
export * from '@playwright/test';
|
export * from "@playwright/test";
|
||||||
export const ROOT_URL = 'http://localhost:5173';
|
export const ROOT_URL = "http://localhost:5173";
|
||||||
|
|
||||||
interface Account {
|
interface Account {
|
||||||
username: string;
|
username: string;
|
||||||
|
@ -23,40 +23,40 @@ interface Account {
|
||||||
async function acquireAccount(id: number, browser: Browser): Promise<Account> {
|
async function acquireAccount(id: number, browser: Browser): Promise<Account> {
|
||||||
const account = {
|
const account = {
|
||||||
username: `worker${id}`,
|
username: `worker${id}`,
|
||||||
password: 'password',
|
password: "password",
|
||||||
}
|
};
|
||||||
|
|
||||||
const page = await browser.newPage();
|
const page = await browser.newPage();
|
||||||
await page.goto(ROOT_URL);
|
await page.goto(ROOT_URL);
|
||||||
|
|
||||||
await page.getByRole('link', { name: 'log in' }).click();
|
await page.getByRole("link", { name: "log in" }).click();
|
||||||
await page.getByRole('button', { name: 'student' }).click();
|
await page.getByRole("button", { name: "student" }).click();
|
||||||
|
|
||||||
await page.getByRole('textbox', { name: 'Username' }).fill(account.username);
|
await page.getByRole("textbox", { name: "Username" }).fill(account.username);
|
||||||
await page.getByRole('textbox', { name: 'Password', exact: true }).fill(account.password);
|
await page.getByRole("textbox", { name: "Password", exact: true }).fill(account.password);
|
||||||
await page.getByRole('button', { name: 'Sign In' }).click();
|
await page.getByRole("button", { name: "Sign In" }).click();
|
||||||
|
|
||||||
let failed = await page.getByText('Invalid username or password.').isVisible();
|
let failed = await page.getByText("Invalid username or password.").isVisible();
|
||||||
|
|
||||||
if (failed) {
|
if (failed) {
|
||||||
await page.getByRole('link', { name: 'Register' }).click();
|
await page.getByRole("link", { name: "Register" }).click();
|
||||||
}
|
}
|
||||||
|
|
||||||
while (failed) {
|
while (failed) {
|
||||||
// Retry with a different username, based on Unix timestamp.
|
// Retry with a different username, based on Unix timestamp.
|
||||||
account.username = `worker${id}-${Date.now()}`;
|
account.username = `worker${id}-${Date.now()}`;
|
||||||
|
|
||||||
await page.getByRole('textbox', { name: 'Username' }).fill(account.username);
|
await page.getByRole("textbox", { name: "Username" }).fill(account.username);
|
||||||
await page.getByRole('textbox', { name: 'Password', exact: true }).fill(account.password);
|
await page.getByRole("textbox", { name: "Password", exact: true }).fill(account.password);
|
||||||
await page.getByRole('textbox', { name: 'Confirm password' }).fill(account.password);
|
await page.getByRole("textbox", { name: "Confirm password" }).fill(account.password);
|
||||||
await page.getByRole('textbox', { name: 'Email' }).fill(`${account.username}@dwengo.org`);
|
await page.getByRole("textbox", { name: "Email" }).fill(`${account.username}@dwengo.org`);
|
||||||
await page.getByRole('textbox', { name: 'First name' }).fill('Worker');
|
await page.getByRole("textbox", { name: "First name" }).fill("Worker");
|
||||||
await page.getByRole('textbox', { name: 'Last name' }).fill(id.toString());
|
await page.getByRole("textbox", { name: "Last name" }).fill(id.toString());
|
||||||
await page.getByRole('button', { name: 'Register' }).click();
|
await page.getByRole("button", { name: "Register" }).click();
|
||||||
|
|
||||||
await page.waitForURL(/localhost/);
|
await page.waitForURL(/localhost/);
|
||||||
|
|
||||||
failed = await page.getByText('Username already exists.').isVisible();
|
failed = await page.getByText("Username already exists.").isVisible();
|
||||||
}
|
}
|
||||||
|
|
||||||
await page.waitForURL(/localhost/);
|
await page.waitForURL(/localhost/);
|
||||||
|
@ -70,41 +70,44 @@ export const test = baseTest.extend<object, { workerStorageState: string }>({
|
||||||
storageState: async ({ workerStorageState }, use) => use(workerStorageState),
|
storageState: async ({ workerStorageState }, use) => use(workerStorageState),
|
||||||
|
|
||||||
// Authenticate once per worker with a worker-scoped fixture.
|
// Authenticate once per worker with a worker-scoped fixture.
|
||||||
workerStorageState: [async ({ browser }, use): Promise<void> => {
|
workerStorageState: [
|
||||||
// Use parallelIndex as a unique identifier for each worker.
|
async ({ browser }, use): Promise<void> => {
|
||||||
const id = test.info().parallelIndex;
|
// Use parallelIndex as a unique identifier for each worker.
|
||||||
const fileName = path.resolve(test.info().project.outputDir, `.auth/${id}.json`);
|
const id = test.info().parallelIndex;
|
||||||
|
const fileName = path.resolve(test.info().project.outputDir, `.auth/${id}.json`);
|
||||||
|
|
||||||
if (fs.existsSync(fileName)) {
|
if (fs.existsSync(fileName)) {
|
||||||
// Reuse existing authentication state if any.
|
// Reuse existing authentication state if any.
|
||||||
|
await use(fileName);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Important: make sure we authenticate in a clean environment by unsetting storage state.
|
||||||
|
const page = await browser.newPage({ storageState: undefined });
|
||||||
|
|
||||||
|
// Acquire a unique account by creating a new one.
|
||||||
|
const account = await acquireAccount(id, browser);
|
||||||
|
|
||||||
|
// Perform authentication steps. Replace these actions with your own.
|
||||||
|
await page.goto(ROOT_URL);
|
||||||
|
await page.getByRole("link", { name: "log in" }).click();
|
||||||
|
await page.getByRole("button", { name: "student" }).click();
|
||||||
|
await page.getByRole("textbox", { name: "Username or email" }).fill(account.username);
|
||||||
|
await page.getByRole("textbox", { name: "Password" }).fill(account.password);
|
||||||
|
await page.getByRole("button", { name: "Sign In" }).click();
|
||||||
|
// Wait until the page receives the cookies.
|
||||||
|
//
|
||||||
|
// Sometimes login flow sets cookies in the process of several redirects.
|
||||||
|
// Wait for the final URL to ensure that the cookies are actually set.
|
||||||
|
await page.waitForLoadState("domcontentloaded");
|
||||||
|
// Alternatively, you can wait until the page reaches a state where all cookies are set.
|
||||||
|
|
||||||
|
// End of authentication steps.
|
||||||
|
|
||||||
|
await page.context().storageState({ path: fileName });
|
||||||
|
await page.close();
|
||||||
await use(fileName);
|
await use(fileName);
|
||||||
return;
|
},
|
||||||
}
|
{ scope: "worker" },
|
||||||
|
],
|
||||||
// Important: make sure we authenticate in a clean environment by unsetting storage state.
|
|
||||||
const page = await browser.newPage({ storageState: undefined });
|
|
||||||
|
|
||||||
// Acquire a unique account by creating a new one.
|
|
||||||
const account = await acquireAccount(id, browser);
|
|
||||||
|
|
||||||
// Perform authentication steps. Replace these actions with your own.
|
|
||||||
await page.goto(ROOT_URL);
|
|
||||||
await page.getByRole('link', { name: 'log in' }).click();
|
|
||||||
await page.getByRole('button', { name: 'student' }).click();
|
|
||||||
await page.getByRole('textbox', { name: 'Username or email' }).fill(account.username);
|
|
||||||
await page.getByRole('textbox', { name: 'Password' }).fill(account.password);
|
|
||||||
await page.getByRole('button', { name: 'Sign In' }).click();
|
|
||||||
// Wait until the page receives the cookies.
|
|
||||||
//
|
|
||||||
// Sometimes login flow sets cookies in the process of several redirects.
|
|
||||||
// Wait for the final URL to ensure that the cookies are actually set.
|
|
||||||
await page.waitForLoadState("domcontentloaded");
|
|
||||||
// Alternatively, you can wait until the page reaches a state where all cookies are set.
|
|
||||||
|
|
||||||
// End of authentication steps.
|
|
||||||
|
|
||||||
await page.context().storageState({ path: fileName });
|
|
||||||
await page.close();
|
|
||||||
await use(fileName);
|
|
||||||
}, { scope: 'worker' }],
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -66,16 +66,16 @@ export default defineConfig({
|
||||||
|
|
||||||
/* Test against mobile viewports. */
|
/* Test against mobile viewports. */
|
||||||
{
|
{
|
||||||
name: 'Mobile Chrome',
|
name: "Mobile Chrome",
|
||||||
use: {
|
use: {
|
||||||
...devices['Pixel 5'],
|
...devices["Pixel 5"],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Mobile Safari',
|
name: "Mobile Safari",
|
||||||
use: {
|
use: {
|
||||||
...devices['iPhone 12'],
|
...devices["iPhone 12"],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
/* Test against branded browsers. */
|
/* Test against branded browsers. */
|
||||||
|
@ -109,7 +109,7 @@ export default defineConfig({
|
||||||
gracefulShutdown: {
|
gracefulShutdown: {
|
||||||
signal: "SIGTERM",
|
signal: "SIGTERM",
|
||||||
timeout: 5000,
|
timeout: 5000,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
command: process.env.CI ? "cd ../ && npm run dev -w backend" : "cd ../ && npm run start -w backend",
|
command: process.env.CI ? "cd ../ && npm run dev -w backend" : "cd ../ && npm run start -w backend",
|
||||||
|
@ -119,6 +119,6 @@ export default defineConfig({
|
||||||
{
|
{
|
||||||
command: "wait-on http://localhost:7080",
|
command: "wait-on http://localhost:7080",
|
||||||
timeout: 120000,
|
timeout: 120000,
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue