diff --git a/web/playwright.config.ts b/web/playwright.config.ts index 3f972085..b9f29048 100644 --- a/web/playwright.config.ts +++ b/web/playwright.config.ts @@ -33,6 +33,12 @@ export default defineConfig({ /* Configure projects for major browsers */ projects: [ { name: 'setup', testMatch: /.*\.setup\.ts/ }, + { + name: 'teardown', testMatch: /.*\.teardown\.ts/, use: + { + storageState: 'playwright/.auth/user.json', + } + }, // { // name: 'firefox', @@ -46,6 +52,7 @@ export default defineConfig({ { name: 'chromium', + // dependencies: ['setup'], use: { ...devices['Desktop Chrome'], storageState: 'playwright/.auth/user.json', diff --git a/web/src/lib/components/base/button.svelte b/web/src/lib/components/base/button.svelte index 2fcd43d9..e4ec0bac 100644 --- a/web/src/lib/components/base/button.svelte +++ b/web/src/lib/components/base/button.svelte @@ -8,7 +8,8 @@ export let large: boolean = false; export let loading: boolean = false; export let disabled: boolean = false; - export let tooltip: string = ""; + export let tooltip: string | undefined = undefined; + export let id: string | undefined = undefined - diff --git a/web/tests/playwright/auth.setup.ts b/web/tests/playwright/auth.setup.ts index 91e7d127..b2f68288 100644 --- a/web/tests/playwright/auth.setup.ts +++ b/web/tests/playwright/auth.setup.ts @@ -2,11 +2,36 @@ import { test as setup } from '@playwright/test'; const authFile = 'playwright/.auth/user.json'; -setup('authenticate', async ({ page }) => { +setup('create user', async ({ page }) => { await page.goto('/login', { waitUntil: 'networkidle' }); await page.locator('input[name="username"]').fill('Test'); await page.locator('input[name="password"]').fill('password'); + const loginPromise = page.waitForResponse('**/api/v1/auth/login') await page.getByRole('button', { name: 'Login' }).click(); + const response = await loginPromise; + + let responseJson; + try { + responseJson = await response.json(); + + } catch (e) { + if (e instanceof Error && e.message.includes("No resource with given identifier found")) { + console.log("Already logged in!") + } else { + throw e + } + } + + if (responseJson?.message === "Failed to authenticate.") { + await page.goto('/register', { waitUntil: 'networkidle' }); + await page.locator('input[name="username"]').fill('Test'); + await page.locator('input[name="email"]').fill('test@test.de'); + await page.locator('input[name="password"]').fill('password'); + await page.locator('#submit').click(); + } + + + // Wait until the page receives the cookies. // // Sometimes login flow sets cookies in the process of several redirects. diff --git a/web/tests/playwright/auth.teardown.ts b/web/tests/playwright/auth.teardown.ts new file mode 100644 index 00000000..eaaf6780 --- /dev/null +++ b/web/tests/playwright/auth.teardown.ts @@ -0,0 +1,9 @@ +import { test as teardown } from '@playwright/test'; + +teardown('delete user', async ({ page }) => { + await page.goto('/settings/account', { waitUntil: 'networkidle' }); + await page.locator("#delete-account").click(); + await page.locator("#confirm").click(); + + await page.waitForURL('/'); +}); \ No newline at end of file diff --git a/web/tests/playwright/e2e/index/index.spec.ts b/web/tests/playwright/e2e/index/index.spec.ts index 94046489..52d8348e 100644 --- a/web/tests/playwright/e2e/index/index.spec.ts +++ b/web/tests/playwright/e2e/index/index.spec.ts @@ -6,3 +6,10 @@ test('index page does not show error', async ({ page }) => { await indexPage.goto() await indexPage.hasNoError() }); + +test('location search works', async ({ page }) => { + const indexPage = new IndexPage(page); + await indexPage.goto() + await indexPage.search() +}); + diff --git a/web/tests/playwright/pages/index_page.ts b/web/tests/playwright/pages/index_page.ts index fabc8a34..b302f4dc 100644 --- a/web/tests/playwright/pages/index_page.ts +++ b/web/tests/playwright/pages/index_page.ts @@ -13,6 +13,15 @@ export class IndexPage { await this.page.goto('/'); } + async search() { + await this.page.locator('input[name="q"]').fill('Munich'); + await this.page.waitForResponse('**/api/v1/search/multi'); + await this.page.locator('.menu-item').first().click(); + await this.page.waitForURL('/map?lat=48.13743&lon=11.57549'); + + } + + async hasNoError() { await expect(this.error).toHaveCount(0); } diff --git a/web/tests/playwright/pages/lists_page.ts b/web/tests/playwright/pages/lists_page.ts index ad33209f..9773e944 100644 --- a/web/tests/playwright/pages/lists_page.ts +++ b/web/tests/playwright/pages/lists_page.ts @@ -20,7 +20,7 @@ export class ListsPage { constructor(page: Page) { this.page = page; - this.createListButton = page.locator("#create-list-button"); + this.createListButton = page.locator("#create-list"); this.listModal = page.locator("#list-modal"); this.listModalAvatar = this.listModal.locator('input[name="avatar"]')