creevey 0.10.0-beta.9 → 0.10.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AUTHORS +2 -0
- package/CHANGELOG.md +281 -0
- package/README.md +19 -41
- package/dist/client/addon/components/Addon.js +18 -8
- package/dist/client/addon/components/Addon.js.map +1 -1
- package/dist/client/addon/components/Panel.js +2 -2
- package/dist/client/addon/components/Panel.js.map +1 -1
- package/dist/client/addon/components/TestSelect.js +2 -2
- package/dist/client/addon/components/TestSelect.js.map +1 -1
- package/dist/client/addon/components/Tools.js +19 -9
- package/dist/client/addon/components/Tools.js.map +1 -1
- package/dist/client/addon/controller.d.ts +1 -1
- package/dist/client/addon/controller.js +3 -3
- package/dist/client/addon/controller.js.map +1 -1
- package/dist/client/addon/decorator.d.ts +1 -1
- package/dist/client/addon/makeDecorator.d.ts +9 -0
- package/dist/client/addon/makeDecorator.js +48 -0
- package/dist/client/addon/makeDecorator.js.map +1 -0
- package/dist/client/addon/manager.js +38 -39
- package/dist/client/addon/manager.js.map +1 -1
- package/dist/client/addon/preset.d.ts +0 -1
- package/dist/client/addon/preset.js +3 -2
- package/dist/client/addon/preset.js.map +1 -1
- package/dist/client/addon/preview.d.ts +1 -1
- package/dist/client/addon/withCreevey.d.ts +5 -3
- package/dist/client/addon/withCreevey.js +5 -20
- package/dist/client/addon/withCreevey.js.map +1 -1
- package/dist/client/shared/components/ImagesView/BlendView.d.ts +2 -2
- package/dist/client/shared/components/ImagesView/BlendView.js +18 -8
- package/dist/client/shared/components/ImagesView/BlendView.js.map +1 -1
- package/dist/client/shared/components/ImagesView/ImagesView.js +1 -1
- package/dist/client/shared/components/ImagesView/ImagesView.js.map +1 -1
- package/dist/client/shared/components/ImagesView/SideBySideView.d.ts +2 -2
- package/dist/client/shared/components/ImagesView/SideBySideView.js +19 -9
- package/dist/client/shared/components/ImagesView/SideBySideView.js.map +1 -1
- package/dist/client/shared/components/ImagesView/SlideView.d.ts +2 -2
- package/dist/client/shared/components/ImagesView/SlideView.js +19 -9
- package/dist/client/shared/components/ImagesView/SlideView.js.map +1 -1
- package/dist/client/shared/components/ImagesView/SwapView.d.ts +2 -2
- package/dist/client/shared/components/ImagesView/SwapView.js +19 -9
- package/dist/client/shared/components/ImagesView/SwapView.js.map +1 -1
- package/dist/client/shared/components/ImagesView/common.d.ts +1 -1
- package/dist/client/shared/components/PageFooter/PageFooter.js +1 -1
- package/dist/client/shared/components/PageFooter/PageFooter.js.map +1 -1
- package/dist/client/shared/components/PageFooter/Paging.js +1 -1
- package/dist/client/shared/components/PageFooter/Paging.js.map +1 -1
- package/dist/client/shared/components/PageHeader/ImagePreview.d.ts +2 -2
- package/dist/client/shared/components/PageHeader/ImagePreview.js +1 -1
- package/dist/client/shared/components/PageHeader/ImagePreview.js.map +1 -1
- package/dist/client/shared/components/PageHeader/PageHeader.js +34 -13
- package/dist/client/shared/components/PageHeader/PageHeader.js.map +1 -1
- package/dist/client/shared/components/ResultsPage.d.ts +2 -2
- package/dist/client/shared/components/ResultsPage.js +22 -10
- package/dist/client/shared/components/ResultsPage.js.map +1 -1
- package/dist/client/shared/creeveyClientApi.js +18 -1
- package/dist/client/shared/creeveyClientApi.js.map +1 -1
- package/dist/client/shared/helpers.d.ts +1 -3
- package/dist/client/shared/helpers.js +4 -19
- package/dist/client/shared/helpers.js.map +1 -1
- package/dist/client/web/CreeveyApp.d.ts +1 -0
- package/dist/client/web/CreeveyApp.js +22 -9
- package/dist/client/web/CreeveyApp.js.map +1 -1
- package/dist/client/web/CreeveyContext.d.ts +1 -0
- package/dist/client/web/CreeveyContext.js +18 -7
- package/dist/client/web/CreeveyContext.js.map +1 -1
- package/dist/client/web/CreeveyLoader.d.ts +1 -1
- package/dist/client/web/CreeveyLoader.js +3 -3
- package/dist/client/web/CreeveyLoader.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/Checkbox.d.ts +4 -4
- package/dist/client/web/CreeveyView/SideBar/Checkbox.js +36 -6
- package/dist/client/web/CreeveyView/SideBar/Checkbox.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/Search.js +18 -8
- package/dist/client/web/CreeveyView/SideBar/Search.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SideBar.js +26 -12
- package/dist/client/web/CreeveyView/SideBar/SideBar.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js +28 -17
- package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SideBarHeader.js +32 -12
- package/dist/client/web/CreeveyView/SideBar/SideBarHeader.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SuiteLink.d.ts +6 -6
- package/dist/client/web/CreeveyView/SideBar/SuiteLink.js +20 -11
- package/dist/client/web/CreeveyView/SideBar/SuiteLink.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/TestLink.js +20 -11
- package/dist/client/web/CreeveyView/SideBar/TestLink.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +2 -2
- package/dist/client/web/CreeveyView/SideBar/TestStatusIcon.js +2 -2
- package/dist/client/web/CreeveyView/SideBar/TestStatusIcon.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/TestsStatus.d.ts +2 -2
- package/dist/client/web/CreeveyView/SideBar/TestsStatus.js +3 -2
- package/dist/client/web/CreeveyView/SideBar/TestsStatus.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/Toggle.js +1 -1
- package/dist/client/web/CreeveyView/SideBar/Toggle.js.map +1 -1
- package/dist/client/web/KeyboardEventsContext.js +17 -7
- package/dist/client/web/KeyboardEventsContext.js.map +1 -1
- package/dist/client/web/assets/index-CtSq3IhG.js +518 -0
- package/dist/client/web/index.html +1 -1
- package/dist/client/web/index.js +26 -11
- package/dist/client/web/index.js.map +1 -1
- package/dist/client/web/themes.d.ts +2 -0
- package/dist/client/web/themes.js +22 -0
- package/dist/client/web/themes.js.map +1 -0
- package/dist/creevey.d.ts +1 -1
- package/dist/creevey.js +122 -41
- package/dist/creevey.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/playwright/generator.d.ts +34 -0
- package/dist/playwright/generator.js +267 -0
- package/dist/playwright/generator.js.map +1 -0
- package/dist/playwright/helpers.d.ts +2 -0
- package/dist/playwright/helpers.js +29 -0
- package/dist/playwright/helpers.js.map +1 -0
- package/dist/playwright/reporter.d.ts +83 -0
- package/dist/playwright/reporter.js +334 -0
- package/dist/playwright/reporter.js.map +1 -0
- package/dist/playwright/setup.d.ts +3 -0
- package/dist/playwright/setup.js +72 -0
- package/dist/playwright/setup.js.map +1 -0
- package/dist/playwright.d.ts +1 -0
- package/dist/playwright.js +3 -1
- package/dist/playwright.js.map +1 -1
- package/dist/server/compare.d.ts +18 -0
- package/dist/server/compare.js +182 -0
- package/dist/server/compare.js.map +1 -0
- package/dist/server/config.d.ts +3 -3
- package/dist/server/config.js +75 -8
- package/dist/server/config.js.map +1 -1
- package/dist/server/connection.d.ts +3 -0
- package/dist/server/connection.js +28 -0
- package/dist/server/connection.js.map +1 -0
- package/dist/server/docker.d.ts +1 -1
- package/dist/server/docker.js +54 -32
- package/dist/server/docker.js.map +1 -1
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.js +166 -64
- package/dist/server/index.js.map +1 -1
- package/dist/server/master/api.d.ts +11 -6
- package/dist/server/master/api.js +88 -25
- package/dist/server/master/api.js.map +1 -1
- package/dist/server/master/handlers/capture-handler.d.ts +5 -0
- package/dist/server/master/handlers/capture-handler.js +25 -0
- package/dist/server/master/handlers/capture-handler.js.map +1 -0
- package/dist/server/master/handlers/index.d.ts +4 -0
- package/dist/server/master/handlers/index.js +21 -0
- package/dist/server/master/handlers/index.js.map +1 -0
- package/dist/server/master/handlers/ping-handler.d.ts +2 -0
- package/dist/server/master/handlers/ping-handler.js +8 -0
- package/dist/server/master/handlers/ping-handler.js.map +1 -0
- package/dist/server/master/handlers/static-handler.d.ts +1 -0
- package/dist/server/master/handlers/static-handler.js +20 -0
- package/dist/server/master/handlers/static-handler.js.map +1 -0
- package/dist/server/master/handlers/stories-handler.d.ts +4 -0
- package/dist/server/master/handlers/stories-handler.js +24 -0
- package/dist/server/master/handlers/stories-handler.js.map +1 -0
- package/dist/server/master/master.js +7 -24
- package/dist/server/master/master.js.map +1 -1
- package/dist/server/master/pool.d.ts +1 -0
- package/dist/server/master/pool.js +5 -3
- package/dist/server/master/pool.js.map +1 -1
- package/dist/server/master/queue.d.ts +1 -1
- package/dist/server/master/queue.js +14 -6
- package/dist/server/master/queue.js.map +1 -1
- package/dist/server/master/runner.d.ts +6 -6
- package/dist/server/master/runner.js +98 -130
- package/dist/server/master/runner.js.map +1 -1
- package/dist/server/master/server.d.ts +1 -1
- package/dist/server/master/server.js +193 -88
- package/dist/server/master/server.js.map +1 -1
- package/dist/server/master/start.d.ts +1 -2
- package/dist/server/master/start.js +13 -29
- package/dist/server/master/start.js.map +1 -1
- package/dist/server/master/testsManager.d.ts +81 -0
- package/dist/server/master/testsManager.js +282 -0
- package/dist/server/master/testsManager.js.map +1 -0
- package/dist/server/playwright/docker-file.d.ts +1 -1
- package/dist/server/playwright/docker-file.js +17 -8
- package/dist/server/playwright/docker-file.js.map +1 -1
- package/dist/server/playwright/docker.d.ts +2 -1
- package/dist/server/playwright/docker.js +10 -2
- package/dist/server/playwright/docker.js.map +1 -1
- package/dist/server/playwright/index-source.mjs +16 -0
- package/dist/server/playwright/internal.d.ts +7 -7
- package/dist/server/playwright/internal.js +137 -79
- package/dist/server/playwright/internal.js.map +1 -1
- package/dist/server/playwright/webdriver.d.ts +3 -3
- package/dist/server/playwright/webdriver.js +0 -6
- package/dist/server/playwright/webdriver.js.map +1 -1
- package/dist/server/providers/browser.js +4 -3
- package/dist/server/providers/browser.js.map +1 -1
- package/dist/server/providers/hybrid.js +2 -2
- package/dist/server/providers/hybrid.js.map +1 -1
- package/dist/server/report.d.ts +10 -0
- package/dist/server/report.js +45 -0
- package/dist/server/report.js.map +1 -0
- package/dist/server/reporters/creevey.d.ts +7 -0
- package/dist/server/reporters/creevey.js +63 -0
- package/dist/server/reporters/creevey.js.map +1 -0
- package/dist/server/reporters/index.d.ts +2 -0
- package/dist/server/reporters/index.js +16 -0
- package/dist/server/reporters/index.js.map +1 -0
- package/dist/server/reporters/junit.d.ts +16 -0
- package/dist/server/reporters/junit.js +167 -0
- package/dist/server/reporters/junit.js.map +1 -0
- package/dist/server/reporters/teamcity.d.ts +7 -0
- package/dist/server/reporters/teamcity.js +60 -0
- package/dist/server/reporters/teamcity.js.map +1 -0
- package/dist/server/selenium/internal.d.ts +3 -3
- package/dist/server/selenium/internal.js +48 -34
- package/dist/server/selenium/internal.js.map +1 -1
- package/dist/server/selenium/selenoid.js +12 -6
- package/dist/server/selenium/selenoid.js.map +1 -1
- package/dist/server/selenium/webdriver.d.ts +3 -3
- package/dist/server/selenium/webdriver.js +4 -8
- package/dist/server/selenium/webdriver.js.map +1 -1
- package/dist/server/shutdown.d.ts +1 -0
- package/dist/server/shutdown.js +23 -0
- package/dist/server/shutdown.js.map +1 -0
- package/dist/server/stories.d.ts +0 -1
- package/dist/server/stories.js +0 -12
- package/dist/server/stories.js.map +1 -1
- package/dist/server/telemetry.js +3 -3
- package/dist/server/telemetry.js.map +1 -1
- package/dist/server/testsFiles/parser.js +45 -5
- package/dist/server/testsFiles/parser.js.map +1 -1
- package/dist/server/utils.d.ts +23 -0
- package/dist/server/utils.js +113 -13
- package/dist/server/utils.js.map +1 -1
- package/dist/server/webdriver.d.ts +1 -1
- package/dist/server/worker/context.d.ts +3 -0
- package/dist/server/worker/context.js +15 -0
- package/dist/server/worker/context.js.map +1 -0
- package/dist/server/worker/match-image.d.ts +8 -12
- package/dist/server/worker/match-image.js +11 -178
- package/dist/server/worker/match-image.js.map +1 -1
- package/dist/server/worker/start.d.ts +2 -2
- package/dist/server/worker/start.js +27 -63
- package/dist/server/worker/start.js.map +1 -1
- package/dist/shared/index.d.ts +1 -1
- package/dist/shared/index.js +9 -7
- package/dist/shared/index.js.map +1 -1
- package/dist/types.d.ts +84 -43
- package/dist/types.js +65 -1
- package/dist/types.js.map +1 -1
- package/docs/cli.md +80 -0
- package/docs/config.md +179 -165
- package/docs/examples/playwright-reporer/playwright.config.ts +36 -0
- package/docs/migration-0.9-to-0.10.md +182 -0
- package/docs/playwright-reporter.md +170 -0
- package/docs/storybook.md +60 -0
- package/docs/tests.md +50 -45
- package/package.json +78 -83
- package/playwright.config.mts +46 -0
- package/src/client/addon/components/Addon.tsx +1 -1
- package/src/client/addon/components/Panel.tsx +2 -2
- package/src/client/addon/components/TestSelect.tsx +2 -2
- package/src/client/addon/components/Tools.tsx +2 -2
- package/src/client/addon/controller.ts +4 -4
- package/src/client/addon/makeDecorator.ts +69 -0
- package/src/client/addon/manager.ts +38 -37
- package/src/client/addon/preset.ts +2 -1
- package/src/client/addon/withCreevey.ts +10 -18
- package/src/client/shared/components/ImagesView/BlendView.tsx +1 -1
- package/src/client/shared/components/ImagesView/ImagesView.tsx +1 -1
- package/src/client/shared/components/ImagesView/SideBySideView.tsx +2 -2
- package/src/client/shared/components/ImagesView/SlideView.tsx +2 -2
- package/src/client/shared/components/ImagesView/SwapView.tsx +2 -2
- package/src/client/shared/components/ImagesView/common.ts +1 -1
- package/src/client/shared/components/PageFooter/PageFooter.tsx +1 -1
- package/src/client/shared/components/PageFooter/Paging.tsx +1 -1
- package/src/client/shared/components/PageHeader/ImagePreview.tsx +1 -1
- package/src/client/shared/components/PageHeader/PageHeader.tsx +23 -7
- package/src/client/shared/components/ResultsPage.tsx +6 -4
- package/src/client/shared/creeveyClientApi.ts +19 -1
- package/src/client/shared/helpers.ts +4 -24
- package/src/client/web/CreeveyApp.tsx +5 -2
- package/src/client/web/CreeveyContext.tsx +2 -0
- package/src/client/web/CreeveyLoader.tsx +2 -2
- package/src/client/web/CreeveyView/SideBar/Checkbox.tsx +3 -3
- package/src/client/web/CreeveyView/SideBar/Search.tsx +1 -1
- package/src/client/web/CreeveyView/SideBar/SideBar.tsx +11 -6
- package/src/client/web/CreeveyView/SideBar/SideBarFooter.tsx +21 -19
- package/src/client/web/CreeveyView/SideBar/SideBarHeader.tsx +20 -5
- package/src/client/web/CreeveyView/SideBar/SuiteLink.tsx +10 -8
- package/src/client/web/CreeveyView/SideBar/TestLink.tsx +9 -7
- package/src/client/web/CreeveyView/SideBar/TestStatusIcon.tsx +2 -2
- package/src/client/web/CreeveyView/SideBar/TestsStatus.tsx +3 -2
- package/src/client/web/CreeveyView/SideBar/Toggle.tsx +1 -1
- package/src/client/web/index.tsx +10 -5
- package/src/client/web/themes.ts +24 -0
- package/src/creevey.ts +92 -38
- package/src/playwright/generator.ts +360 -0
- package/src/playwright/helpers.ts +31 -0
- package/src/playwright/reporter.ts +381 -0
- package/src/playwright/setup.ts +84 -0
- package/src/playwright.ts +1 -0
- package/src/server/compare.ts +260 -0
- package/src/server/config.ts +52 -9
- package/src/server/connection.ts +26 -0
- package/src/server/docker.ts +62 -34
- package/src/server/index.ts +165 -79
- package/src/server/master/api.ts +94 -28
- package/src/server/master/handlers/capture-handler.ts +20 -0
- package/src/server/master/handlers/index.ts +4 -0
- package/src/server/master/handlers/ping-handler.ts +6 -0
- package/src/server/master/handlers/static-handler.ts +16 -0
- package/src/server/master/handlers/stories-handler.ts +20 -0
- package/src/server/master/master.ts +10 -27
- package/src/server/master/pool.ts +7 -3
- package/src/server/master/queue.ts +21 -7
- package/src/server/master/runner.ts +123 -134
- package/src/server/master/server.ts +214 -101
- package/src/server/master/start.ts +19 -41
- package/src/server/master/testsManager.ts +316 -0
- package/src/server/playwright/docker-file.ts +20 -8
- package/src/server/playwright/docker.ts +16 -3
- package/src/server/playwright/index-source.mjs +16 -0
- package/src/server/playwright/internal.ts +169 -96
- package/src/server/playwright/webdriver.ts +4 -10
- package/src/server/providers/browser.ts +4 -3
- package/src/server/providers/hybrid.ts +2 -3
- package/src/server/report.ts +51 -0
- package/src/server/reporters/creevey.ts +74 -0
- package/src/server/reporters/index.ts +11 -0
- package/src/server/reporters/junit.ts +207 -0
- package/src/server/reporters/teamcity.ts +74 -0
- package/src/server/selenium/internal.ts +62 -45
- package/src/server/selenium/selenoid.ts +13 -6
- package/src/server/selenium/webdriver.ts +8 -12
- package/src/server/shutdown.ts +19 -0
- package/src/server/stories.ts +1 -12
- package/src/server/telemetry.ts +3 -3
- package/src/server/testsFiles/parser.ts +52 -4
- package/src/server/utils.ts +123 -14
- package/src/server/webdriver.ts +1 -1
- package/src/server/worker/context.ts +14 -0
- package/src/server/worker/match-image.ts +16 -248
- package/src/server/worker/start.ts +32 -75
- package/src/shared/index.ts +10 -8
- package/src/types.ts +91 -58
- package/types/global.d.ts +1 -0
- package/dist/client/web/assets/index-BE9CL5_G.js +0 -591
- package/dist/server/reporter.d.ts +0 -26
- package/dist/server/reporter.js +0 -108
- package/dist/server/reporter.js.map +0 -1
- package/dist/server/update.d.ts +0 -2
- package/dist/server/update.js +0 -53
- package/dist/server/update.js.map +0 -1
- package/src/server/reporter.ts +0 -139
- package/src/server/update.ts +0 -74
@@ -0,0 +1,267 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.definePlaywrightTests = definePlaywrightTests;
|
7
|
+
const path_1 = __importDefault(require("path"));
|
8
|
+
const assert_1 = __importDefault(require("assert"));
|
9
|
+
const fs_1 = require("fs");
|
10
|
+
const test_1 = require("@playwright/test");
|
11
|
+
const isEqual_js_1 = __importDefault(require("lodash/isEqual.js"));
|
12
|
+
const types_1 = require("../types");
|
13
|
+
const compare_1 = require("../server/compare");
|
14
|
+
const webdriver_1 = require("../server/webdriver");
|
15
|
+
const helpers_1 = require("./helpers");
|
16
|
+
const cacheDir = process.env.CREEVEY_CACHE_DIR;
|
17
|
+
const defaultConfig = {
|
18
|
+
diffOptions: { threshold: 0.1, includeAA: false },
|
19
|
+
odiffOptions: { threshold: 0.1, antialiasing: true },
|
20
|
+
comparisonLibrary: 'pixelmatch',
|
21
|
+
reusePageContext: true,
|
22
|
+
trace: false,
|
23
|
+
};
|
24
|
+
// TODO: Use this Storybook function for building args for query params
|
25
|
+
// export const buildArgsParam = (initialArgs: Args | undefined, args: Args): string => {
|
26
|
+
// TODO: Pass globals to story
|
27
|
+
function appendStoryQueryParams(url, storyId) {
|
28
|
+
return `${url}?args=&globals=&id=${storyId}`;
|
29
|
+
}
|
30
|
+
function assertWrapper(assert) {
|
31
|
+
return async function assertImage(actual, imageName) {
|
32
|
+
try {
|
33
|
+
const errorMessage = await assert(actual, imageName);
|
34
|
+
if (errorMessage) {
|
35
|
+
throw new Error(errorMessage);
|
36
|
+
}
|
37
|
+
}
|
38
|
+
catch (error) {
|
39
|
+
if (error instanceof Error) {
|
40
|
+
error.stack = error.stack
|
41
|
+
?.split('\n')
|
42
|
+
.filter((line) => !line.includes('at assertImage'))
|
43
|
+
.join('\n');
|
44
|
+
}
|
45
|
+
throw error;
|
46
|
+
}
|
47
|
+
};
|
48
|
+
}
|
49
|
+
async function takeScreenshot(page, storyId, captureElement, ignoreElements) {
|
50
|
+
const ignore = ignoreElements ? (Array.isArray(ignoreElements) ? ignoreElements : [ignoreElements]) : [];
|
51
|
+
const mask = ignore.map((selector) => page.locator(selector));
|
52
|
+
if (captureElement) {
|
53
|
+
// TODO Use page.locator(captureElement) instead of page.$(captureElement)
|
54
|
+
// TODO Test `#storybook-root > *` selector, probably we don't need `> *` and use `#storybook-root >*:first-child` instead
|
55
|
+
const element = await page.$(captureElement);
|
56
|
+
if (!element)
|
57
|
+
throw new Error(`Capture element '${captureElement}' not found for story '${storyId}'`);
|
58
|
+
return element.screenshot({
|
59
|
+
style: ':root { overflow: hidden !important; }',
|
60
|
+
animations: 'disabled',
|
61
|
+
mask,
|
62
|
+
});
|
63
|
+
}
|
64
|
+
else {
|
65
|
+
return page.screenshot({
|
66
|
+
animations: 'disabled',
|
67
|
+
mask,
|
68
|
+
});
|
69
|
+
}
|
70
|
+
}
|
71
|
+
// TODO: To support parallel tests, we need to define each test suite in separate file
|
72
|
+
// TODO: How to support custom interactions for different tests
|
73
|
+
// Main function to define tests using Playwright's API
|
74
|
+
function definePlaywrightTests(config) {
|
75
|
+
(0, assert_1.default)(cacheDir, 'Cache directory not found');
|
76
|
+
const stories = JSON.parse((0, fs_1.readFileSync)(path_1.default.join(cacheDir, 'stories.json'), 'utf-8'));
|
77
|
+
let globals = {};
|
78
|
+
let reusedContext;
|
79
|
+
let reusedPage;
|
80
|
+
const { diffOptions, odiffOptions, comparisonLibrary, reusePageContext, trace } = {
|
81
|
+
...defaultConfig,
|
82
|
+
...config,
|
83
|
+
};
|
84
|
+
async function updateGlobals(page, storybookGlobals) {
|
85
|
+
if (storybookGlobals && typeof storybookGlobals === 'object' && !(0, isEqual_js_1.default)(globals, storybookGlobals)) {
|
86
|
+
globals = storybookGlobals;
|
87
|
+
await page.evaluate((globals) => {
|
88
|
+
window.__STORYBOOK_ADDONS_CHANNEL__.emit(types_1.StorybookEvents.UPDATE_GLOBALS, { globals });
|
89
|
+
}, globals);
|
90
|
+
}
|
91
|
+
}
|
92
|
+
test_1.test.describe('Creevey Tests', () => {
|
93
|
+
const imagesContext = {
|
94
|
+
attachments: [],
|
95
|
+
testFullPath: [],
|
96
|
+
images: {},
|
97
|
+
};
|
98
|
+
let assertImage;
|
99
|
+
test_1.test.beforeAll('Setup images context', async ({ browser }, { project }) => {
|
100
|
+
const { snapshotDir, outputDir, use: { viewport }, } = project;
|
101
|
+
if (reusePageContext) {
|
102
|
+
const storybookUrl = project.use.baseURL;
|
103
|
+
(0, assert_1.default)(storybookUrl, 'Storybook URL not found');
|
104
|
+
// TODO Record video
|
105
|
+
reusedContext = await browser.newContext({ viewport, screen: viewport ?? undefined });
|
106
|
+
if (trace) {
|
107
|
+
await reusedContext.tracing.start(typeof trace === 'object' ? trace : { screenshots: true, snapshots: true, sources: true });
|
108
|
+
}
|
109
|
+
reusedPage = await reusedContext.newPage();
|
110
|
+
await reusedPage.goto((0, webdriver_1.appendIframePath)(storybookUrl), { timeout: 60000 });
|
111
|
+
await reusedPage.waitForLoadState('networkidle');
|
112
|
+
await (0, helpers_1.waitForStorybookReady)(reusedPage);
|
113
|
+
}
|
114
|
+
if (comparisonLibrary === 'pixelmatch') {
|
115
|
+
const { default: pixelmatch } = await import('pixelmatch');
|
116
|
+
assertImage = assertWrapper((0, compare_1.getPixelmatchAssert)(pixelmatch, imagesContext, { screenDir: snapshotDir, reportDir: outputDir, diffOptions }));
|
117
|
+
}
|
118
|
+
else {
|
119
|
+
const { compare } = await import('odiff-bin');
|
120
|
+
assertImage = assertWrapper((0, compare_1.getOdiffAssert)(compare, imagesContext, { screenDir: snapshotDir, reportDir: outputDir, odiffOptions }));
|
121
|
+
}
|
122
|
+
});
|
123
|
+
test_1.test.beforeEach('Switch story', async ({ page }, { annotations, project }) => {
|
124
|
+
const { description: storyId } = annotations.find((annotation) => annotation.type === 'storyId') ?? {};
|
125
|
+
(0, assert_1.default)(storyId, 'Cannot get storyId. It seems like inner test annotation is missing');
|
126
|
+
const story = stories[storyId];
|
127
|
+
(0, assert_1.default)(story, `Story '${storyId}' not found in stories cache`);
|
128
|
+
const { title, name, parameters } = story;
|
129
|
+
const { waitForReady: shouldWaitForReady } = (parameters.creevey ?? {});
|
130
|
+
const storybookGlobals = project.metadata.storybookGlobals;
|
131
|
+
imagesContext.attachments = [];
|
132
|
+
imagesContext.testFullPath = [...title.split('/').map((x) => x.trim()), name, project.name];
|
133
|
+
imagesContext.images = {};
|
134
|
+
if (!reusePageContext) {
|
135
|
+
const storybookUrl = project.use.baseURL;
|
136
|
+
(0, assert_1.default)(storybookUrl, 'Storybook URL not found');
|
137
|
+
await page.goto(appendStoryQueryParams((0, webdriver_1.appendIframePath)(storybookUrl), storyId), { timeout: 60000 });
|
138
|
+
await page.waitForLoadState('networkidle');
|
139
|
+
await (0, helpers_1.waitForStorybookReady)(page);
|
140
|
+
// TODO: Pass globals to story
|
141
|
+
await updateGlobals(page, storybookGlobals);
|
142
|
+
return;
|
143
|
+
}
|
144
|
+
// 1. Update Storybook Globals
|
145
|
+
await updateGlobals(reusedPage, storybookGlobals);
|
146
|
+
// 2. Reset Mouse Position
|
147
|
+
await reusedPage.mouse.move(0, 0);
|
148
|
+
// 3. Select Story
|
149
|
+
const errorMessage = await reusedPage.evaluate(async ({ storyId, StorybookEvents, shouldWaitForReady }) => {
|
150
|
+
// TODO: DRY with withCreevey.ts
|
151
|
+
// NOTE: Copy-pasted from withCreevey.ts
|
152
|
+
const channel = window.__STORYBOOK_ADDONS_CHANNEL__;
|
153
|
+
async function sequence(fns) {
|
154
|
+
for (const fn of fns) {
|
155
|
+
await fn();
|
156
|
+
}
|
157
|
+
}
|
158
|
+
const waitForReady = shouldWaitForReady
|
159
|
+
? new Promise((resolve) => (window.__CREEVEY_SET_READY_FOR_CAPTURE__ = resolve))
|
160
|
+
: Promise.resolve();
|
161
|
+
let rejectCallback;
|
162
|
+
const renderErrorPromise = new Promise((_resolve, reject) => (rejectCallback = reject));
|
163
|
+
function errorHandler({ title, description }) {
|
164
|
+
rejectCallback({
|
165
|
+
message: title,
|
166
|
+
stack: description,
|
167
|
+
});
|
168
|
+
}
|
169
|
+
function exceptionHandler(exception) {
|
170
|
+
rejectCallback(exception);
|
171
|
+
}
|
172
|
+
function removeErrorHandlers() {
|
173
|
+
channel.off(StorybookEvents.STORY_ERRORED, errorHandler);
|
174
|
+
channel.off(StorybookEvents.STORY_THREW_EXCEPTION, errorHandler);
|
175
|
+
}
|
176
|
+
channel.once(StorybookEvents.STORY_ERRORED, errorHandler);
|
177
|
+
channel.once(StorybookEvents.STORY_THREW_EXCEPTION, exceptionHandler);
|
178
|
+
let resolveCallback;
|
179
|
+
const storyRenderedPromise = new Promise((resolve) => (resolveCallback = resolve));
|
180
|
+
function renderHandler() {
|
181
|
+
resolveCallback();
|
182
|
+
}
|
183
|
+
function removeRenderHandlers() {
|
184
|
+
channel.off(StorybookEvents.STORY_RENDERED, renderHandler);
|
185
|
+
}
|
186
|
+
channel.once(StorybookEvents.STORY_RENDERED, renderHandler);
|
187
|
+
setTimeout(() => {
|
188
|
+
channel.emit(StorybookEvents.SET_CURRENT_STORY, { storyId });
|
189
|
+
}, 0);
|
190
|
+
try {
|
191
|
+
await Promise.race([
|
192
|
+
renderErrorPromise,
|
193
|
+
sequence([() => storyRenderedPromise, () => document.fonts.ready, () => waitForReady]),
|
194
|
+
]);
|
195
|
+
}
|
196
|
+
catch (reason) {
|
197
|
+
// NOTE Event `STORY_THREW_EXCEPTION` triggered only in react and vue frameworks and return Error instance
|
198
|
+
// NOTE Event `STORY_ERRORED` return error-like object without `name` field
|
199
|
+
const errorMessage = reason instanceof Error
|
200
|
+
? (reason.stack ?? reason.message)
|
201
|
+
: (0, types_1.isObject)(reason)
|
202
|
+
? `${reason.message}\n ${reason.stack}`
|
203
|
+
: reason;
|
204
|
+
return errorMessage;
|
205
|
+
}
|
206
|
+
finally {
|
207
|
+
removeErrorHandlers();
|
208
|
+
removeRenderHandlers();
|
209
|
+
}
|
210
|
+
return null;
|
211
|
+
}, { storyId: story.id, StorybookEvents: types_1.StorybookEvents, shouldWaitForReady });
|
212
|
+
if (errorMessage) {
|
213
|
+
throw new Error(`Failed to select story '${story.id}': ${errorMessage}`);
|
214
|
+
}
|
215
|
+
});
|
216
|
+
test_1.test.afterEach('Save screenshot', () => {
|
217
|
+
const { name: projectName } = test_1.test.info().project;
|
218
|
+
// TODO: Use another way to handle attachments
|
219
|
+
// NOTE: Don't need to copy files for assertImage, because it's done internally
|
220
|
+
const { actual, diff, expect } = imagesContext.images[projectName] ?? {};
|
221
|
+
for (const image of imagesContext.attachments) {
|
222
|
+
switch (true) {
|
223
|
+
case image.includes('actual') && !!actual: {
|
224
|
+
test_1.test.info().attachments.push({ name: actual, path: image, contentType: 'image/png' });
|
225
|
+
// await test.info().attach(actual, { path: image });
|
226
|
+
break;
|
227
|
+
}
|
228
|
+
case image.includes('expect') && !!expect: {
|
229
|
+
test_1.test.info().attachments.push({ name: expect, path: image, contentType: 'image/png' });
|
230
|
+
// await test.info().attach(expect, { path: image });
|
231
|
+
break;
|
232
|
+
}
|
233
|
+
case image.includes('diff') && !!diff: {
|
234
|
+
test_1.test.info().attachments.push({ name: diff, path: image, contentType: 'image/png' });
|
235
|
+
// await test.info().attach(diff, { path: image });
|
236
|
+
break;
|
237
|
+
}
|
238
|
+
}
|
239
|
+
}
|
240
|
+
});
|
241
|
+
if (trace && reusePageContext) {
|
242
|
+
test_1.test.afterAll('Save trace', async (_, { project }) => {
|
243
|
+
const { outputDir, name: projectName } = project;
|
244
|
+
await reusedContext.tracing.stop({
|
245
|
+
path: `${outputDir}/traces/${projectName}-${process.pid}.zip`,
|
246
|
+
});
|
247
|
+
});
|
248
|
+
}
|
249
|
+
for (const story of Object.values(stories)) {
|
250
|
+
const { name, title, parameters } = story;
|
251
|
+
const { captureElement, ignoreElements } = (parameters.creevey ?? {});
|
252
|
+
test_1.test.describe(title, () => {
|
253
|
+
// TODO: Support creevey.skip
|
254
|
+
(0, test_1.test)(name, { annotation: [{ type: 'storyId', description: story.id }] }, async ({ page }) => {
|
255
|
+
// 4. Take Screenshot
|
256
|
+
const screenshot = await takeScreenshot(reusePageContext ? reusedPage : page, story.id, captureElement, ignoreElements);
|
257
|
+
// TODO: Support this
|
258
|
+
// NOTE: Bear in mind that page.locator('#root > *') is not working
|
259
|
+
// await expect(page.locator(captureElement)).toHaveScreenshot(name);
|
260
|
+
// 5. Assert Image
|
261
|
+
await assertImage(screenshot);
|
262
|
+
});
|
263
|
+
});
|
264
|
+
}
|
265
|
+
});
|
266
|
+
}
|
267
|
+
//# sourceMappingURL=generator.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/playwright/generator.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.waitForStorybookReady = waitForStorybookReady;
|
4
|
+
const types_1 = require("../types");
|
5
|
+
async function waitForStorybookReady(page, timeout = 60000) {
|
6
|
+
const isStorybookInitialized = await page.evaluate(({ timeout, event }) => {
|
7
|
+
return new Promise((resolve, reject) => {
|
8
|
+
let attempts = 0;
|
9
|
+
const maxAttempts = timeout / 100;
|
10
|
+
function check() {
|
11
|
+
if (typeof window.__STORYBOOK_ADDONS_CHANNEL__ !== 'undefined' &&
|
12
|
+
window.__STORYBOOK_ADDONS_CHANNEL__.last(event) !== undefined) {
|
13
|
+
resolve(true);
|
14
|
+
}
|
15
|
+
else if (attempts++ < maxAttempts) {
|
16
|
+
setTimeout(check, 100);
|
17
|
+
}
|
18
|
+
else {
|
19
|
+
reject(new Error('Storybook initialization timed out. Required Storybook functions not found on window.'));
|
20
|
+
}
|
21
|
+
}
|
22
|
+
check();
|
23
|
+
});
|
24
|
+
}, { timeout, event: types_1.StorybookEvents.SET_GLOBALS });
|
25
|
+
if (!isStorybookInitialized) {
|
26
|
+
throw new Error('Failed to confirm Storybook API is ready after extended wait.');
|
27
|
+
}
|
28
|
+
}
|
29
|
+
//# sourceMappingURL=helpers.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/playwright/helpers.ts"],"names":[],"mappings":";;AAGA,sDA2BC;AA9BD,oCAA2C;AAGpC,KAAK,UAAU,qBAAqB,CAAC,IAAU,EAAE,OAAO,GAAG,KAAK;IACrE,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,QAAQ,CAChD,CAAC,EAAE,OAAO,EAAE,KAAK,EAAsC,EAAE,EAAE;QACzD,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9C,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,MAAM,WAAW,GAAG,OAAO,GAAG,GAAG,CAAC;YAClC,SAAS,KAAK;gBACZ,IACE,OAAO,MAAM,CAAC,4BAA4B,KAAK,WAAW;oBAC1D,MAAM,CAAC,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,EAC7D,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC;qBAAM,IAAI,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;oBACpC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBACzB,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAC,CAAC;gBAC7G,CAAC;YACH,CAAC;YACD,KAAK,EAAE,CAAC;QACV,CAAC,CAAC,CAAC;IACL,CAAC,EACD,EAAE,OAAO,EAAE,KAAK,EAAE,uBAAe,CAAC,WAAW,EAAE,CAChD,CAAC;IAEF,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;AACH,CAAC"}
|
@@ -0,0 +1,83 @@
|
|
1
|
+
import type { Reporter, FullConfig, Suite, TestCase, TestResult, TestStep } from '@playwright/test/reporter';
|
2
|
+
/**
|
3
|
+
* CreeveyPlaywrightReporter is a Playwright reporter that integrates with Creevey
|
4
|
+
* to provide visual testing capabilities and use Creevey's UI for reviewing and approving screenshots.
|
5
|
+
*/
|
6
|
+
declare class CreeveyPlaywrightReporter implements Reporter {
|
7
|
+
private testsManager;
|
8
|
+
private api;
|
9
|
+
private port;
|
10
|
+
private debug;
|
11
|
+
private testIdMap;
|
12
|
+
private asyncQueue;
|
13
|
+
/**
|
14
|
+
* Creates a new instance of the CreeveyPlaywrightReporter
|
15
|
+
* @param options Configuration options for the reporter
|
16
|
+
*/
|
17
|
+
constructor(options?: {
|
18
|
+
port?: number;
|
19
|
+
debug?: boolean;
|
20
|
+
});
|
21
|
+
/**
|
22
|
+
* Called when the test run starts
|
23
|
+
* @param config Playwright configuration
|
24
|
+
* @param suite Test suite information
|
25
|
+
*/
|
26
|
+
onBegin(config: FullConfig, suite: Suite): void;
|
27
|
+
/**
|
28
|
+
* Called when a test begins
|
29
|
+
* @param test Test case information
|
30
|
+
* @param result Test result (initially empty)
|
31
|
+
*/
|
32
|
+
onTestBegin(test: TestCase, _result: TestResult): void;
|
33
|
+
/**
|
34
|
+
* Called when a test step begins
|
35
|
+
* @param test Test case information
|
36
|
+
* @param result Test result
|
37
|
+
* @param step Test step information
|
38
|
+
*/
|
39
|
+
onStepBegin(test: TestCase, _result: TestResult, step: TestStep): void;
|
40
|
+
/**
|
41
|
+
* Called when a test step ends
|
42
|
+
* @param test Test case information
|
43
|
+
* @param result Test result
|
44
|
+
* @param step Test step information
|
45
|
+
*/
|
46
|
+
onStepEnd(_test: TestCase, _result: TestResult, step: TestStep): void;
|
47
|
+
/**
|
48
|
+
* Called when a test ends
|
49
|
+
* @param test Test case information
|
50
|
+
* @param result Test result
|
51
|
+
*/
|
52
|
+
onTestEnd(test: TestCase, result: TestResult): void;
|
53
|
+
/**
|
54
|
+
* Called when the test run ends
|
55
|
+
* @param result The overall test run result
|
56
|
+
*/
|
57
|
+
onEnd(result: {
|
58
|
+
status: 'passed' | 'failed' | 'timedout' | 'interrupted';
|
59
|
+
}): Promise<void>;
|
60
|
+
/**
|
61
|
+
* Maps a Playwright test to a Creevey test format
|
62
|
+
* @param test Playwright test case
|
63
|
+
* @returns Creevey test object or null if mapping fails
|
64
|
+
*/
|
65
|
+
private mapToCreeveyTest;
|
66
|
+
/**
|
67
|
+
* Process a test result and any attachments
|
68
|
+
* @param test Playwright test case
|
69
|
+
* @param result Playwright test result
|
70
|
+
*/
|
71
|
+
private processTestResult;
|
72
|
+
/**
|
73
|
+
* Logs a debug message if debug mode is enabled
|
74
|
+
* @param message Message to log
|
75
|
+
*/
|
76
|
+
private logDebug;
|
77
|
+
/**
|
78
|
+
* Logs an error message
|
79
|
+
* @param message Error message to log
|
80
|
+
*/
|
81
|
+
private logError;
|
82
|
+
}
|
83
|
+
export default CreeveyPlaywrightReporter;
|