creevey 0.10.0-beta.1 → 0.10.0-beta.11

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.
Files changed (137) hide show
  1. package/dist/client/addon/components/Panel.js +2 -2
  2. package/dist/client/addon/components/Panel.js.map +1 -1
  3. package/dist/client/addon/controller.js +4 -5
  4. package/dist/client/addon/controller.js.map +1 -1
  5. package/dist/client/addon/withCreevey.js +18 -34
  6. package/dist/client/addon/withCreevey.js.map +1 -1
  7. package/dist/client/shared/components/ImagesView/SwapView.js +12 -0
  8. package/dist/client/shared/components/ImagesView/SwapView.js.map +1 -1
  9. package/dist/client/shared/components/PageHeader/ImagePreview.js +1 -0
  10. package/dist/client/shared/components/PageHeader/ImagePreview.js.map +1 -1
  11. package/dist/client/shared/components/ResultsPage.js +23 -5
  12. package/dist/client/shared/components/ResultsPage.js.map +1 -1
  13. package/dist/client/web/CreeveyApp.js +22 -6
  14. package/dist/client/web/CreeveyApp.js.map +1 -1
  15. package/dist/client/web/CreeveyContext.d.ts +5 -0
  16. package/dist/client/web/CreeveyContext.js +3 -0
  17. package/dist/client/web/CreeveyContext.js.map +1 -1
  18. package/dist/client/web/CreeveyView/SideBar/Search.js +2 -2
  19. package/dist/client/web/CreeveyView/SideBar/Search.js.map +1 -1
  20. package/dist/client/web/CreeveyView/SideBar/SideBar.js +1 -0
  21. package/dist/client/web/CreeveyView/SideBar/SideBar.js.map +1 -1
  22. package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js +49 -6
  23. package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js.map +1 -1
  24. package/dist/client/web/CreeveyView/SideBar/SuiteLink.js +1 -3
  25. package/dist/client/web/CreeveyView/SideBar/SuiteLink.js.map +1 -1
  26. package/dist/client/web/CreeveyView/SideBar/TestLink.js +1 -3
  27. package/dist/client/web/CreeveyView/SideBar/TestLink.js.map +1 -1
  28. package/dist/client/web/KeyboardEventsContext.d.ts +1 -8
  29. package/dist/client/web/KeyboardEventsContext.js +62 -57
  30. package/dist/client/web/KeyboardEventsContext.js.map +1 -1
  31. package/dist/client/web/assets/{index-DkmZfG9C.js → index-BE9CL5_G.js} +94 -94
  32. package/dist/client/web/index.html +1 -1
  33. package/dist/creevey.js +13 -5
  34. package/dist/creevey.js.map +1 -1
  35. package/dist/server/config.js +4 -3
  36. package/dist/server/config.js.map +1 -1
  37. package/dist/server/docker.js +2 -2
  38. package/dist/server/docker.js.map +1 -1
  39. package/dist/server/index.js +29 -3
  40. package/dist/server/index.js.map +1 -1
  41. package/dist/server/logger.d.ts +2 -1
  42. package/dist/server/logger.js +7 -3
  43. package/dist/server/logger.js.map +1 -1
  44. package/dist/server/master/api.js +1 -1
  45. package/dist/server/master/api.js.map +1 -1
  46. package/dist/server/master/pool.d.ts +3 -3
  47. package/dist/server/master/pool.js +10 -63
  48. package/dist/server/master/pool.js.map +1 -1
  49. package/dist/server/master/queue.d.ts +13 -0
  50. package/dist/server/master/queue.js +64 -0
  51. package/dist/server/master/queue.js.map +1 -0
  52. package/dist/server/master/runner.d.ts +1 -0
  53. package/dist/server/master/runner.js +4 -1
  54. package/dist/server/master/runner.js.map +1 -1
  55. package/dist/server/master/server.js +1 -1
  56. package/dist/server/master/server.js.map +1 -1
  57. package/dist/server/master/start.js +4 -4
  58. package/dist/server/master/start.js.map +1 -1
  59. package/dist/server/playwright/docker-file.js +12 -2
  60. package/dist/server/playwright/docker-file.js.map +1 -1
  61. package/dist/server/playwright/internal.d.ts +2 -2
  62. package/dist/server/playwright/internal.js +56 -44
  63. package/dist/server/playwright/internal.js.map +1 -1
  64. package/dist/server/playwright/webdriver.js +1 -1
  65. package/dist/server/playwright/webdriver.js.map +1 -1
  66. package/dist/server/providers/browser.js +2 -1
  67. package/dist/server/providers/browser.js.map +1 -1
  68. package/dist/server/providers/hybrid.js +1 -1
  69. package/dist/server/providers/hybrid.js.map +1 -1
  70. package/dist/server/reporter.js +8 -4
  71. package/dist/server/reporter.js.map +1 -1
  72. package/dist/server/selenium/internal.d.ts +2 -3
  73. package/dist/server/selenium/internal.js +116 -90
  74. package/dist/server/selenium/internal.js.map +1 -1
  75. package/dist/server/selenium/selenoid.js +2 -2
  76. package/dist/server/selenium/selenoid.js.map +1 -1
  77. package/dist/server/selenium/webdriver.js +1 -1
  78. package/dist/server/selenium/webdriver.js.map +1 -1
  79. package/dist/server/telemetry.js +7 -3
  80. package/dist/server/telemetry.js.map +1 -1
  81. package/dist/server/utils.d.ts +2 -1
  82. package/dist/server/utils.js +13 -3
  83. package/dist/server/utils.js.map +1 -1
  84. package/dist/server/webdriver.d.ts +2 -3
  85. package/dist/server/webdriver.js +10 -9
  86. package/dist/server/webdriver.js.map +1 -1
  87. package/dist/server/worker/chai-image.d.ts +1 -2
  88. package/dist/server/worker/chai-image.js +4 -3
  89. package/dist/server/worker/chai-image.js.map +1 -1
  90. package/dist/server/worker/start.js +24 -14
  91. package/dist/server/worker/start.js.map +1 -1
  92. package/dist/types.d.ts +30 -11
  93. package/dist/types.js +13 -1
  94. package/dist/types.js.map +1 -1
  95. package/package.json +36 -42
  96. package/src/client/addon/components/Panel.tsx +2 -2
  97. package/src/client/addon/controller.ts +13 -6
  98. package/src/client/addon/withCreevey.ts +25 -13
  99. package/src/client/shared/components/ImagesView/SwapView.tsx +18 -0
  100. package/src/client/shared/components/PageHeader/ImagePreview.tsx +1 -0
  101. package/src/client/shared/components/ResultsPage.tsx +28 -7
  102. package/src/client/web/CreeveyApp.tsx +25 -7
  103. package/src/client/web/CreeveyContext.tsx +9 -0
  104. package/src/client/web/CreeveyView/SideBar/Search.tsx +3 -3
  105. package/src/client/web/CreeveyView/SideBar/SideBar.tsx +1 -0
  106. package/src/client/web/CreeveyView/SideBar/SideBarFooter.tsx +37 -6
  107. package/src/client/web/CreeveyView/SideBar/SuiteLink.tsx +3 -5
  108. package/src/client/web/CreeveyView/SideBar/TestLink.tsx +2 -4
  109. package/src/client/web/KeyboardEventsContext.tsx +61 -73
  110. package/src/creevey.ts +13 -6
  111. package/src/server/config.ts +4 -3
  112. package/src/server/docker.ts +2 -2
  113. package/src/server/index.ts +27 -4
  114. package/src/server/logger.ts +6 -2
  115. package/src/server/master/api.ts +1 -1
  116. package/src/server/master/pool.ts +18 -56
  117. package/src/server/master/queue.ts +64 -0
  118. package/src/server/master/runner.ts +4 -1
  119. package/src/server/master/server.ts +1 -1
  120. package/src/server/master/start.ts +7 -4
  121. package/src/server/playwright/docker-file.ts +14 -2
  122. package/src/server/playwright/internal.ts +76 -49
  123. package/src/server/playwright/webdriver.ts +1 -1
  124. package/src/server/providers/browser.ts +2 -1
  125. package/src/server/providers/hybrid.ts +1 -1
  126. package/src/server/reporter.ts +9 -3
  127. package/src/server/selenium/internal.ts +119 -92
  128. package/src/server/selenium/selenoid.ts +2 -2
  129. package/src/server/selenium/webdriver.ts +1 -1
  130. package/src/server/telemetry.ts +7 -3
  131. package/src/server/utils.ts +14 -4
  132. package/src/server/webdriver.ts +10 -15
  133. package/src/server/worker/chai-image.ts +4 -4
  134. package/src/server/worker/start.ts +25 -16
  135. package/src/types.ts +32 -13
  136. package/.yarnrc.yml +0 -1
  137. package/chromatic.config.json +0 -5
@@ -1,6 +1,4 @@
1
1
  import chai from 'chai';
2
- import chalk from 'chalk';
3
- import Logger from 'loglevel';
4
2
  import EventEmitter from 'events';
5
3
  import {
6
4
  BaseCreeveyTestContext,
@@ -86,7 +84,7 @@ function runHandler(browserName: string, images: Partial<Record<string, Images>>
86
84
 
87
85
  async function setupWebdriver(webdriver: CreeveyWebdriver): Promise<[string, CreeveyWebdriver] | undefined> {
88
86
  if ((await webdriver.openBrowser(true)) == null) {
89
- logger.error('Failed to start browser');
87
+ logger().error('Failed to start browser');
90
88
  emitWorkerMessage({
91
89
  type: 'error',
92
90
  payload: { subtype: 'browser', error: 'Failed to start browser' },
@@ -125,8 +123,6 @@ export async function start(browser: string, gridUrl: string, config: Config, op
125
123
 
126
124
  if (!webdriver || !sessionId) return;
127
125
 
128
- const workerLogger = Logger.getLogger(`${browser}:${chalk.gray(sessionId)}`);
129
-
130
126
  const reporterOptions = {
131
127
  ...config.reporterOptions,
132
128
  creevey: {
@@ -150,13 +146,13 @@ export async function start(browser: string, gridUrl: string, config: Config, op
150
146
  const { matchImage, matchImages } = options.odiff
151
147
  ? getOdiffMatchers(imagesContext, config)
152
148
  : await getMatchers(imagesContext, config);
153
- chai.use(chaiImage(matchImage, matchImages, workerLogger));
149
+ chai.use(chaiImage(matchImage, matchImages));
154
150
 
155
151
  const tests = await (async () => {
156
152
  try {
157
153
  return await getTestsFromStories(config, browser, webdriver);
158
154
  } catch (error) {
159
- workerLogger.error('Failed to get tests from stories:', error);
155
+ logger().error('Failed to get tests from stories:', error);
160
156
  emitWorkerMessage({
161
157
  type: 'error',
162
158
  payload: { subtype: 'browser', error: serializeError(error) },
@@ -174,7 +170,7 @@ export async function start(browser: string, gridUrl: string, config: Config, op
174
170
 
175
171
  if (!test) {
176
172
  const error = `Test with id ${message.payload.id} not found`;
177
- workerLogger.error(error);
173
+ logger().error(error);
178
174
  emitWorkerMessage({
179
175
  type: 'error',
180
176
  payload: { subtype: 'test', error },
@@ -226,16 +222,20 @@ export async function start(browser: string, gridUrl: string, config: Config, op
226
222
  runner.emit(TEST_EVENTS.RUN_BEGIN);
227
223
  runner.emit(TEST_EVENTS.TEST_BEGIN, fakeTest);
228
224
 
225
+ let timeout;
226
+ let isRejected = false;
229
227
  const start = Date.now();
230
228
  try {
231
229
  await Promise.race([
232
- new Promise((reject) =>
233
- setTimeout(() => {
234
- reject(`Timeout of ${config.testTimeout}ms exceeded`);
235
- }, config.testTimeout),
230
+ new Promise(
231
+ (_, reject) =>
232
+ (timeout = setTimeout(() => {
233
+ isRejected = true;
234
+ reject(new Error(`Timeout of ${config.testTimeout}ms exceeded`));
235
+ }, config.testTimeout)),
236
236
  ),
237
237
  (async () => {
238
- const context = await webdriver.switchStory(test.story, baseContext, workerLogger);
238
+ const context = await webdriver.switchStory(test.story, baseContext);
239
239
  await test.fn(context);
240
240
  })(),
241
241
  ]);
@@ -244,6 +244,7 @@ export async function start(browser: string, gridUrl: string, config: Config, op
244
244
  fakeTest.err = error;
245
245
  }
246
246
  const duration = Date.now() - start;
247
+ clearTimeout(timeout);
247
248
  fakeTest.attachments = imagesContext.attachments;
248
249
  fakeTest.state = error ? 'failed' : 'passed';
249
250
  fakeTest.duration = duration;
@@ -259,9 +260,17 @@ export async function start(browser: string, gridUrl: string, config: Config, op
259
260
 
260
261
  await webdriver.afterTest(test);
261
262
 
262
- runHandler(baseContext.browserName, imagesContext.images, error);
263
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
264
+ if (isRejected) {
265
+ emitWorkerMessage({
266
+ type: 'error',
267
+ payload: { subtype: 'unknown', error: serializeError(error) },
268
+ });
269
+ } else {
270
+ runHandler(baseContext.browserName, imagesContext.images, error);
271
+ }
263
272
  })().catch((error: unknown) => {
264
- workerLogger.error('Unexpected error:', error);
273
+ logger().error('Unexpected error:', error);
265
274
  emitWorkerMessage({
266
275
  type: 'error',
267
276
  payload: { subtype: 'test', error: serializeError(error) },
@@ -269,7 +278,7 @@ export async function start(browser: string, gridUrl: string, config: Config, op
269
278
  });
270
279
  });
271
280
 
272
- workerLogger.info('Browser is ready');
281
+ logger().info('Browser is ready');
273
282
 
274
283
  emitWorkerMessage({ type: 'ready' });
275
284
  }
package/src/types.ts CHANGED
@@ -4,7 +4,7 @@ import type Pixelmatch from 'pixelmatch';
4
4
  import type { ODiffOptions } from 'odiff-bin';
5
5
  import type { expect } from 'chai';
6
6
  import type EventEmitter from 'events';
7
- import type Logger from 'loglevel';
7
+ import { LaunchOptions } from 'playwright-core';
8
8
  // import type { Browser } from 'playwright-core';
9
9
 
10
10
  /* eslint-disable @typescript-eslint/no-explicit-any */
@@ -41,6 +41,18 @@ export interface StoryMeta {
41
41
  };
42
42
  }
43
43
 
44
+ export enum StorybookEvents {
45
+ SET_STORIES = 'setStories',
46
+ SET_CURRENT_STORY = 'setCurrentStory',
47
+ FORCE_REMOUNT = 'forceRemount',
48
+ STORY_RENDERED = 'storyRendered',
49
+ STORY_ERRORED = 'storyErrored',
50
+ STORY_THREW_EXCEPTION = 'storyThrewException',
51
+ UPDATE_STORY_ARGS = 'updateStoryArgs',
52
+ SET_GLOBALS = 'setGlobals',
53
+ UPDATE_GLOBALS = 'updateGlobals',
54
+ }
55
+
44
56
  export interface CreeveyMeta {
45
57
  parameters?: {
46
58
  creevey?: CreeveyStoryParams;
@@ -91,14 +103,6 @@ export class ChromeConfig {
91
103
  */
92
104
  export interface BrowserConfigObject {
93
105
  browserName: string;
94
- /**
95
- * Browser version. Ignored with Playwright webdriver
96
- */
97
- browserVersion?: string;
98
- /**
99
- * Operation system name. Ignored with Playwright webdriver
100
- */
101
- platformName?: string;
102
106
  // customizeBuilder?: (builder: Builder) => Builder;
103
107
  limit?: number;
104
108
  /**
@@ -122,15 +126,25 @@ export interface BrowserConfigObject {
122
126
  * Used only with `useDocker == false`
123
127
  */
124
128
  webdriverCommand?: string[];
125
- // TODO Check version compatibility
126
- // playwrightVersion?: string;
127
129
  // /**
128
130
  // * Use to start standalone playwright browser
129
131
  // */
130
132
  // playwrightBrowser?: () => Promise<Browser>;
131
133
  viewport?: { width: number; height: number };
132
134
 
133
- [name: string]: unknown;
135
+ seleniumCapabilities?: {
136
+ /**
137
+ * Browser version. Ignored with Playwright webdriver
138
+ */
139
+ browserVersion?: string;
140
+ /**
141
+ * Operation system name. Ignored with Playwright webdriver
142
+ */
143
+ platformName?: string;
144
+ [name: string]: unknown;
145
+ };
146
+
147
+ playwrightOptions?: Omit<LaunchOptions, 'logger'>;
134
148
  }
135
149
 
136
150
  export type StorybookGlobals = Record<string, unknown>;
@@ -149,7 +163,7 @@ export interface CreeveyWebdriver {
149
163
  openBrowser(fresh?: boolean): Promise<CreeveyWebdriver | null>;
150
164
  closeBrowser(): Promise<void>;
151
165
  loadStoriesFromBrowser(): Promise<StoriesRaw>;
152
- switchStory(story: StoryInput, context: BaseCreeveyTestContext, logger: Logger.Logger): Promise<CreeveyTestContext>;
166
+ switchStory(story: StoryInput, context: BaseCreeveyTestContext): Promise<CreeveyTestContext>;
153
167
  afterTest(test: ServerTest): Promise<void>;
154
168
  }
155
169
 
@@ -292,6 +306,11 @@ export interface Config {
292
306
  * The `--ui` CLI option ignores this option
293
307
  */
294
308
  failFast: boolean;
309
+ /**
310
+ * Start workers in sequential queue
311
+ * @default false
312
+ */
313
+ useWorkerQueue: boolean;
295
314
  /**
296
315
  * Specify platform for docker images
297
316
  */
package/.yarnrc.yml DELETED
@@ -1 +0,0 @@
1
- nodeLinker: node-modules
@@ -1,5 +0,0 @@
1
- {
2
- "onlyChanged": true,
3
- "projectId": "Project:5fd73972015e660021b97564",
4
- "zip": true
5
- }