@samsara-dev/appwright 0.9.9 → 0.9.10

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/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # appwright
2
2
 
3
+ ## 0.9.10
4
+
5
+ ### Patch Changes
6
+
7
+ - 851d551: Fix reporter error when persistent device worker has no session
8
+
9
+ Previously, the VideoDownloader reporter threw an error when a worker's info
10
+ file existed but had no `providerName` or `sessionId` (e.g., when a test was
11
+ skipped before establishing a BrowserStack session). This caused misleading
12
+ "Failed to get worker end time" error logs.
13
+
14
+ Now gracefully skips video download for workers without sessions instead of
15
+ throwing.
16
+
3
17
  ## 0.9.9
4
18
 
5
19
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAUhF,cAAM,eAAgB,YAAW,QAAQ;IACvC,OAAO,CAAC,gBAAgB,CAAsB;IAE9C,OAAO;IAQP,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;IAU9C,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;IAsGtC,KAAK;YAKG,kCAAkC;IA6ChD,OAAO,CAAC,4BAA4B;IAyBpC,OAAO,CAAC,qBAAqB;CAU9B;AAwHD,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAUhF,cAAM,eAAgB,YAAW,QAAQ;IACvC,OAAO,CAAC,gBAAgB,CAAsB;IAE9C,OAAO;IAQP,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;IAU9C,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;IAuGtC,KAAK;YAKG,kCAAkC;IA6ChD,OAAO,CAAC,4BAA4B;IAyBpC,OAAO,CAAC,qBAAqB;CAU9B;AAwHD,eAAe,eAAe,CAAC"}
package/dist/reporter.js CHANGED
@@ -70,7 +70,8 @@ class VideoDownloader {
70
70
  }
71
71
  const { providerName, sessionId, endTime } = workerInfo;
72
72
  if (!providerName || !sessionId) {
73
- throw new Error(`Provider name or session id not found for worker: ${workerIndex}`);
73
+ logger_1.logger.log(`No provider/session for worker ${workerIndex}, skipping video`);
74
+ return;
74
75
  }
75
76
  if (!this.providerSupportsVideo(providerName)) {
76
77
  return; // Nothing to do here
@@ -263,4 +263,45 @@ let VideoDownloader;
263
263
  (0, vitest_1.expect)(downloadVideoMock).not.toHaveBeenCalled();
264
264
  (0, vitest_1.expect)(testResult.attachments).toEqual([]);
265
265
  });
266
+ (0, vitest_1.test)("skips video gracefully when worker has no session (e.g., skipped test)", async () => {
267
+ vitest_1.vi.useFakeTimers();
268
+ mockBasePath = await promises_1.default.mkdtemp(path_1.default.join(os_1.default.tmpdir(), "appwright-videos-"));
269
+ const workerIndex = 1;
270
+ // Worker info exists but has no providerName or sessionId
271
+ // (worker was assigned but test was skipped before session creation)
272
+ await promises_1.default.writeFile(path_1.default.join(mockBasePath, `worker-info-${workerIndex}.json`), JSON.stringify({
273
+ idx: workerIndex,
274
+ startTime: {
275
+ beforeAppiumSession: new Date().toISOString(),
276
+ afterAppiumSession: new Date().toISOString(),
277
+ },
278
+ tests: [],
279
+ }, null, 2));
280
+ const { logger } = await import("../logger.js");
281
+ // Clear any state from previous tests
282
+ vitest_1.vi.mocked(logger.error).mockClear();
283
+ vitest_1.vi.mocked(logger.log).mockClear();
284
+ const reporter = new VideoDownloader();
285
+ const testCase = {
286
+ id: "test-skipped",
287
+ title: "skipped test on worker without session",
288
+ annotations: [],
289
+ };
290
+ const testResult = {
291
+ workerIndex,
292
+ duration: 100,
293
+ startTime: new Date(),
294
+ attachments: [],
295
+ };
296
+ reporter.onTestEnd(testCase, testResult);
297
+ await vitest_1.vi.advanceTimersByTimeAsync(5000);
298
+ await reporter.onEnd();
299
+ // Should not attempt to download any video
300
+ (0, vitest_1.expect)(downloadVideoMock).not.toHaveBeenCalled();
301
+ (0, vitest_1.expect)(testResult.attachments).toEqual([]);
302
+ // Should NOT log an error (previously threw and was caught as error)
303
+ (0, vitest_1.expect)(logger.error).not.toHaveBeenCalled();
304
+ // Should log an informational skip message
305
+ (0, vitest_1.expect)(logger.log).toHaveBeenCalledWith(vitest_1.expect.stringContaining("skipping video"));
306
+ });
266
307
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@samsara-dev/appwright",
3
- "version": "0.9.9",
3
+ "version": "0.9.10",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org/",
6
6
  "access": "public"