1
0
mirror of https://github.com/matrix-org/matrix-react-sdk.git synced 2025-07-28 15:22:05 +03:00

Add test reporter to prevent stale screenshots (#12743)

* Split up slow Playwright tests

To optimise parallelism

Deals with:

```
Slow test file: read-receipts/redactions.spec.ts (5.4m)
Slow test file: read-receipts/new-messages.spec.ts (3.9m)
Slow test file: read-receipts/high-level.spec.ts (3.6m)
Slow test file: read-receipts/editing-messages.spec.ts (3.1m)
Slow test file: read-receipts/reactions.spec.ts (2.2m)
Slow test file: crypto/crypto.spec.ts (2.4m)
Slow test file: settings/appearance-user-settings-tab/appearance-user-settings-tab.spec.ts (1.2m)
Slow test file: composer/composer.spec.ts (1.1m)
Slow test file: crypto/verification.spec.ts (1.1m)
```

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Move around snapshots

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Add test reporter to prevent stale screenshots

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Iterate

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Fix test

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Iterate

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Remove darwin screenshots which should not have been checked in

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Fix absolute vs relative path mismatch

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Revert "Remove darwin screenshots which should not have been checked in"

This reverts commit 1e189977fa.

* Iterate

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Revert "Revert "Remove darwin screenshots which should not have been checked in""

This reverts commit 5144b9b28e.

* Iterate

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Remove stale screenshots

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Revert "Remove stale screenshots"

This reverts commit 9beae99745.

* Apply same sanitization as Playwright for file name consistency

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* add dev dep

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Remove stale screenshots

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Discard changes to playwright/flaky-reporter.ts

* Update end-to-end-tests.yaml

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
Michael Telatynski
2024-07-15 19:23:20 +01:00
committed by GitHub
parent 7863de653a
commit e6d9eccf1b
21 changed files with 131 additions and 10 deletions

View File

@ -15,9 +15,10 @@ limitations under the License.
*/
import { test as base, expect as baseExpect, Locator, Page, ExpectMatcherState, ElementHandle } from "@playwright/test";
import { sanitizeForFilePath } from "playwright-core/lib/utils";
import AxeBuilder from "@axe-core/playwright";
import _ from "lodash";
import { basename } from "node:path";
import { basename, extname } from "node:path";
import type mailhog from "mailhog";
import type { IConfigOptions } from "../src/IConfigOptions";
@ -298,11 +299,18 @@ export const test = base.extend<{
},
});
// Based on https://github.com/microsoft/playwright/blob/2b77ed4d7aafa85a600caa0b0d101b72c8437eeb/packages/playwright/src/util.ts#L206C8-L210C2
function sanitizeFilePathBeforeExtension(filePath: string): string {
const ext = extname(filePath);
const base = filePath.substring(0, filePath.length - ext.length);
return sanitizeForFilePath(base) + ext;
}
export const expect = baseExpect.extend({
async toMatchScreenshot(
this: ExpectMatcherState,
receiver: Page | Locator,
name?: `${string}.png`,
name: `${string}.png`,
options?: {
mask?: Array<Locator>;
omitBackground?: boolean;
@ -311,6 +319,9 @@ export const expect = baseExpect.extend({
css?: string;
},
) {
const testInfo = test.info();
if (!testInfo) throw new Error(`toMatchScreenshot() must be called during the test`);
const page = "page" in receiver ? receiver.page() : receiver;
let hideTooltipsCss: string | undefined;
@ -354,9 +365,18 @@ export const expect = baseExpect.extend({
`,
})) as ElementHandle<Element>;
await baseExpect(receiver).toHaveScreenshot(name, options);
const screenshotName = sanitizeFilePathBeforeExtension(name);
await baseExpect(receiver).toHaveScreenshot(screenshotName, options);
await style.evaluate((tag) => tag.remove());
testInfo.annotations.push({
// `_` prefix hides it from the HTML reporter
type: "_screenshot",
// include a path relative to `playwright/snapshots/`
description: testInfo.snapshotPath(screenshotName).split("/playwright/snapshots/", 2)[1],
});
return { pass: true, message: () => "", name: "toMatchScreenshot" };
},
});