mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-02-07 18:56:35 -05:00
![Otto Richter](/assets/img/avatar_default.png)
As per https://codeberg.org/forgejo/forgejo/pulls/6400, the after hook runs for every test, resulting in duplicated screenshots.
Not all tests are supposed to generate screenshots, especially because they could be flaky (also see 206d4cfb7a
).
Additionally, the implicit behaviour might have caused confusion, so we now create screenshots explicitly, adding the statements from the tests that already generated screenshots.
50 lines
2.1 KiB
TypeScript
50 lines
2.1 KiB
TypeScript
// @watch start
|
|
// templates/user/auth/**
|
|
// web_src/js/features/user-**
|
|
// modules/{user,auth}/**
|
|
// @watch end
|
|
|
|
import {expect} from '@playwright/test';
|
|
import {save_visual, test} from './utils_e2e.ts';
|
|
|
|
test('Load Homepage', async ({page}) => {
|
|
const response = await page.goto('/');
|
|
expect(response?.status()).toBe(200); // Status OK
|
|
await expect(page).toHaveTitle(/^Forgejo: Beyond coding. We Forge.\s*$/);
|
|
await expect(page.locator('.logo')).toHaveAttribute('src', '/assets/img/logo.svg');
|
|
});
|
|
|
|
test('Register Form', async ({page}, workerInfo) => {
|
|
const response = await page.goto('/user/sign_up');
|
|
expect(response?.status()).toBe(200); // Status OK
|
|
await page.fill('input[name=user_name]', `e2e-test-${workerInfo.workerIndex}`);
|
|
await page.fill('input[name=email]', `e2e-test-${workerInfo.workerIndex}@test.com`);
|
|
await page.fill('input[name=password]', 'test123test123');
|
|
await page.fill('input[name=retype]', 'test123test123');
|
|
await page.click('form button.ui.primary.button:visible');
|
|
// Make sure we routed to the home page. Else login failed.
|
|
expect(page.url()).toBe(`${workerInfo.project.use.baseURL}/`);
|
|
await expect(page.locator('.secondary-nav span>img.ui.avatar')).toBeVisible();
|
|
await expect(page.locator('.ui.positive.message.flash-success')).toHaveText('Account was successfully created. Welcome!');
|
|
await save_visual(page);
|
|
});
|
|
|
|
// eslint-disable-next-line playwright/no-skipped-test
|
|
test.describe.skip('example with different viewports (not actually run)', () => {
|
|
// only necessary when the default web / mobile devices are not enough.
|
|
// If you need to use a single fixed viewport, you can also use:
|
|
// test.use({viewport: {width: 400, height: 800}});
|
|
// also see https://playwright.dev/docs/test-parameterize
|
|
for (const width of [400, 1000]) {
|
|
// do not actually run (skip) this test
|
|
test(`Do x on width: ${width}px`, async ({page}) => {
|
|
await page.setViewportSize({
|
|
width,
|
|
height: 800,
|
|
});
|
|
// do something, then check that an element is fully in viewport
|
|
// (i.e. not overflowing)
|
|
await expect(page.locator('#my-element')).toBeInViewport({ratio: 1});
|
|
});
|
|
}
|
|
});
|