@testingbot/mobilewright-driver 0.1.0 → 0.3.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.
@@ -7,23 +7,58 @@ export interface ReportableSession {
7
7
  /** Wall-clock bounds of the recorded cycles, when any exist. */
8
8
  startedAt?: number;
9
9
  endedAt?: number;
10
+ /** Worker process that ran this session's test, when unambiguous. */
11
+ workerIndex?: number;
12
+ }
13
+ export interface GitInfo {
14
+ commit?: string;
15
+ branch?: string;
16
+ author?: string;
17
+ subject?: string;
10
18
  }
11
19
  export interface ObserverContext {
12
20
  /** Every TestingBot session of this run (allocated + worker-rotated). */
13
21
  sessions(): ReportableSession[];
14
22
  build?: string;
23
+ /** The driver's `extra` option, merged with git metadata when reporting. */
24
+ extra?: string;
15
25
  /** Local-video requests made via startRecording({ output }). */
16
26
  recordings?(): {
17
27
  sessionId: string;
18
28
  output: string;
19
29
  }[];
20
30
  }
31
+ interface TestOutcome {
32
+ /** Playwright's stable test id — also the JSON report's `spec.id`. */
33
+ id: string;
34
+ title: string;
35
+ failed: boolean;
36
+ summary?: string;
37
+ /** Wall-clock interval of the (final) attempt: reconstructed at onTestEnd,
38
+ * replaced by the worker's own stamps when the run report supplies them. */
39
+ startedAt: number;
40
+ endedAt: number;
41
+ /** Worker process that ran the final attempt, per the run report. */
42
+ workerIndex?: number;
43
+ /** Interval came from the run report — i.e. from the worker's own clock. */
44
+ fromReport?: boolean;
45
+ }
46
+ /** What the run report adds to an outcome the reporter events cannot. */
47
+ interface ReportedTiming {
48
+ workerIndex?: number;
49
+ startedAt: number;
50
+ endedAt: number;
51
+ }
21
52
  /**
22
53
  * Reports outcomes to TestingBot. Sessions whose wall-clock interval maps to
23
54
  * exactly one test (sessionPerTest mode) get that test's name and verdict;
24
- * everything else — reused pool sessions hosting many tests, or ambiguous
25
- * overlaps under high concurrency — gets the run-level verdict. Strictly
26
- * best-effort: reporting failures never fail the test run.
55
+ * a reused pool session hosting many tests gets the run-level verdict, which
56
+ * genuinely describes it. A session that is neither — an ambiguous overlap
57
+ * under high concurrency, or one whose test span never reached the run file —
58
+ * gets build/extra/tags only: an unknown verdict is reported as unknown
59
+ * rather than as the run's, which on a failed run would mark a session failed
60
+ * on another test's behalf. Strictly best-effort throughout: reporting
61
+ * failures never fail the test run.
27
62
  */
28
63
  export declare class TestingBotTestObserver implements TestObserver {
29
64
  private readonly api;
@@ -43,13 +78,55 @@ export declare class TestingBotTestObserver implements TestObserver {
43
78
  */
44
79
  private downloadRecordings;
45
80
  /**
46
- * The single test that ran inside this session, when unambiguous.
81
+ * Map each session to the single test that ran inside it, when unambiguous.
82
+ *
47
83
  * Direction matters: connect() and disconnect() happen INSIDE the test, so
48
84
  * the session interval is a sub-interval of its test's — but a test's
49
85
  * reported duration also covers fixture setup (device allocation), so the
50
- * test interval is much wider than the session's. The session midpoint must
51
- * therefore be looked up in the test intervals, never the other way around.
86
+ * test interval is much wider than the session's. Sessions are therefore
87
+ * scored by how much of the SESSION each test interval covers, never the
88
+ * other way around.
89
+ *
90
+ * Wall clock is the only join available: the worker process that owns the
91
+ * session never learns which test it is running (`ConnectionConfig` carries
92
+ * no test identity), so the coordinator has to line the two up after the
93
+ * fact. Everything below is therefore built to abstain rather than guess —
94
+ * a session with no confident, exclusive match gets no verdict at all.
52
95
  */
53
- private testForSession;
96
+ private attribute;
54
97
  }
98
+ /**
99
+ * Playwright's JSON report for this run, when mobilewright exposes one.
100
+ * Documented upstream as a transitional escape hatch, so every reader below is
101
+ * feature-detected and silent on failure: the report may sharpen reporting,
102
+ * but nothing may depend on it. Read once per run and shared.
103
+ */
104
+ export declare function readJsonReport(result: RunResultInfo): Promise<Record<string, unknown> | undefined>;
105
+ /**
106
+ * Per-test worker index and interval, keyed by `spec.id` — which is the same
107
+ * id `onTestEnd` receives as `TestInfo.id`. Two things the reporter events
108
+ * cannot give us:
109
+ *
110
+ * - **which worker process ran the test.** The driver stamps that same index
111
+ * on its run-file session records from inside the worker, so this is a real
112
+ * identity join, not a heuristic — it rules out every test that provably ran
113
+ * somewhere else, which is what makes concurrent runs attributable at all.
114
+ * - **the worker's own timestamps.** `onTestEnd` can only reconstruct the
115
+ * interval from `Date.now()` in the coordinator, after reporter dispatch;
116
+ * any delay there shifts the whole interval away from the session's.
117
+ *
118
+ * Later attempts win, matching how `onTestEnd` overwrites retried tests.
119
+ */
120
+ export declare function readTestTimings(report: Record<string, unknown> | undefined): Map<string, ReportedTiming>;
121
+ /** Overlay report timings onto the outcomes collected from the event hooks. */
122
+ export declare function applyReportedTimings(outcomes: TestOutcome[], timings: Map<string, ReportedTiming>): TestOutcome[];
123
+ /**
124
+ * Git metadata mobilewright captures into the Playwright report
125
+ * (`config.metadata.gitCommit`, populated when `captureGitInfo` is on —
126
+ * Playwright does this automatically on CI).
127
+ */
128
+ export declare function readGitInfo(report: Record<string, unknown> | undefined): GitInfo | undefined;
129
+ /** Merge the user's `extra` with git metadata for the dashboard's extra field. */
130
+ export declare function buildExtra(userExtra: string | undefined, git: GitInfo | undefined): string | undefined;
131
+ export {};
55
132
  //# sourceMappingURL=observer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,QAAQ,IAAI,iBAAiB,EAAE,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,UAAU,CAAC,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACxD;AAWD;;;;;;GAMG;AACH,qBAAa,sBAAuB,YAAW,YAAY;IACzD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,UAAU,CAAK;IACvB;+DAC2D;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;gBAE/C,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe;IAKxD,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;IAKlC,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IAajD,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA2CpD;;;;OAIG;YACW,kBAAkB;IAoChC;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc;CAgBvB"}
1
+ {"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":"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"}
package/dist/observer.js CHANGED
@@ -4,9 +4,13 @@ const debug = createDebug('testingbot:observer');
4
4
  /**
5
5
  * Reports outcomes to TestingBot. Sessions whose wall-clock interval maps to
6
6
  * exactly one test (sessionPerTest mode) get that test's name and verdict;
7
- * everything else — reused pool sessions hosting many tests, or ambiguous
8
- * overlaps under high concurrency — gets the run-level verdict. Strictly
9
- * best-effort: reporting failures never fail the test run.
7
+ * a reused pool session hosting many tests gets the run-level verdict, which
8
+ * genuinely describes it. A session that is neither — an ambiguous overlap
9
+ * under high concurrency, or one whose test span never reached the run file —
10
+ * gets build/extra/tags only: an unknown verdict is reported as unknown
11
+ * rather than as the run's, which on a failed run would mark a session failed
12
+ * on another test's behalf. Strictly best-effort throughout: reporting
13
+ * failures never fail the test run.
10
14
  */
11
15
  export class TestingBotTestObserver {
12
16
  api;
@@ -28,6 +32,7 @@ export class TestingBotTestObserver {
28
32
  const error = result.errors[0]?.split('\n')[0] ?? result.status;
29
33
  const endedAt = Date.now();
30
34
  this.outcomes.set(test.id, {
35
+ id: test.id,
31
36
  title: test.title,
32
37
  failed,
33
38
  summary: failed ? `${test.title}: ${error}`.slice(0, 200) : undefined,
@@ -43,15 +48,29 @@ export class TestingBotTestObserver {
43
48
  return;
44
49
  }
45
50
  const success = result.status === 'passed';
46
- const outcomes = [...this.outcomes.values()];
51
+ // One read of the run report serves both git metadata and the attribution
52
+ // join below.
53
+ const report = await readJsonReport(result);
54
+ const outcomes = applyReportedTimings([...this.outcomes.values()], readTestTimings(report));
47
55
  const failures = outcomes.filter((o) => o.failed).map((o) => o.summary).filter(Boolean).slice(0, 10);
48
56
  const runMessage = success
49
57
  ? `${outcomes.length}/${this.totalTests} tests passed`
50
58
  : `${failures.length} of ${outcomes.length} tests failed. ${failures.join(' | ')}`.slice(0, 500);
59
+ const git = readGitInfo(report);
60
+ const extra = buildExtra(this.context.extra, git);
61
+ const groups = ['mobilewright', ...(git?.branch ? [git.branch] : [])];
51
62
  const sessions = this.context.sessions();
52
- debug('run ended (%s), reporting to %d session(s)', result.status, sessions.length);
63
+ debug('run ended (%s), reporting to %d session(s)%s', result.status, sessions.length, git ? ` with git ${git.commit?.slice(0, 8) ?? '?'} (${git.branch ?? 'no branch'})` : '');
64
+ const attributed = this.attribute(sessions, outcomes);
53
65
  for (const session of sessions) {
54
- const test = this.testForSession(session, outcomes);
66
+ const test = attributed.get(session.sessionId);
67
+ // An unattributable session must never inherit the run's failure: on a
68
+ // failed run that would stamp another test's verdict onto a session
69
+ // whose own test passed. The aggregate is only safe when the failing
70
+ // test cannot have run anywhere else — a session that hosted several
71
+ // tests, or the run's only session — or when the run passed, where
72
+ // every session's verdict is "passed" anyway.
73
+ const mayInheritRunVerdict = success || session.spans > 1 || sessions.length === 1;
55
74
  try {
56
75
  await this.api.updateTest(session.sessionId, test
57
76
  ? {
@@ -59,15 +78,18 @@ export class TestingBotTestObserver {
59
78
  name: test.title,
60
79
  statusMessage: test.failed ? (test.summary ?? 'failed') : 'passed',
61
80
  build: this.context.build,
62
- groups: ['mobilewright'],
81
+ extra,
82
+ groups,
63
83
  }
64
84
  : {
65
- success,
66
- statusMessage: runMessage,
85
+ ...(mayInheritRunVerdict ? { success, statusMessage: runMessage } : {}),
67
86
  build: this.context.build,
68
- groups: ['mobilewright'],
87
+ extra,
88
+ groups,
69
89
  });
70
- debug('reported %s -> %s', session.sessionId, test ? `test "${test.title}"` : `run success=${success}`);
90
+ debug('reported %s -> %s', session.sessionId, test
91
+ ? `test "${test.title}"`
92
+ : mayInheritRunVerdict ? `run success=${success}` : 'metadata only (verdict left untouched)');
71
93
  }
72
94
  catch (err) {
73
95
  // Never fail the run over reporting.
@@ -120,29 +142,209 @@ export class TestingBotTestObserver {
120
142
  }
121
143
  }
122
144
  /**
123
- * The single test that ran inside this session, when unambiguous.
145
+ * Map each session to the single test that ran inside it, when unambiguous.
146
+ *
124
147
  * Direction matters: connect() and disconnect() happen INSIDE the test, so
125
148
  * the session interval is a sub-interval of its test's — but a test's
126
149
  * reported duration also covers fixture setup (device allocation), so the
127
- * test interval is much wider than the session's. The session midpoint must
128
- * therefore be looked up in the test intervals, never the other way around.
150
+ * test interval is much wider than the session's. Sessions are therefore
151
+ * scored by how much of the SESSION each test interval covers, never the
152
+ * other way around.
153
+ *
154
+ * Wall clock is the only join available: the worker process that owns the
155
+ * session never learns which test it is running (`ConnectionConfig` carries
156
+ * no test identity), so the coordinator has to line the two up after the
157
+ * fact. Everything below is therefore built to abstain rather than guess —
158
+ * a session with no confident, exclusive match gets no verdict at all.
129
159
  */
130
- testForSession(session, outcomes) {
131
- // A session that hosted several tests has no single correct name/verdict.
132
- if (session.spans !== 1)
133
- return undefined;
134
- if (session.startedAt === undefined || session.endedAt === undefined)
135
- return undefined;
136
- const midpoint = (session.startedAt + session.endedAt) / 2;
137
- // Clock skew tolerance between the worker's stamps and ours.
160
+ attribute(sessions, outcomes) {
161
+ // Clock skew tolerance between the worker's stamps and ours. Report-sourced
162
+ // intervals need none: the worker measured both ends of the comparison.
138
163
  const SLACK_MS = 2_000;
139
- const containing = outcomes.filter((o) => midpoint >= o.startedAt - SLACK_MS && midpoint <= o.endedAt + SLACK_MS);
140
- if (containing.length === 1)
141
- return containing[0];
142
- if (containing.length > 1) {
143
- debug('%d tests overlap session %s — falling back to the run verdict', containing.length, session.sessionId);
164
+ const slackFor = (outcome) => outcome.fromReport ? 0 : SLACK_MS;
165
+ // A test must cover at least this much of the session to claim it.
166
+ const MIN_COVERAGE = 0.5;
167
+ const claims = [];
168
+ for (const session of sessions) {
169
+ // A session that hosted several tests has no single correct name/verdict.
170
+ if (session.spans > 1) {
171
+ debug('%s hosted %d tests — no single verdict', session.sessionId, session.spans);
172
+ continue;
173
+ }
174
+ if (session.spans === 0) {
175
+ debug('%s has no recorded test span — unattributable', session.sessionId);
176
+ continue;
177
+ }
178
+ if (session.startedAt === undefined || session.endedAt === undefined) {
179
+ debug('%s has no recorded interval — unattributable', session.sessionId);
180
+ continue;
181
+ }
182
+ // Connect and disconnect can land in the same millisecond (a fast test on
183
+ // an already-warm session), and a zero-length interval overlaps nothing.
184
+ // Give every interval — session and test alike — at least 1ms of width so
185
+ // a degenerate one stays comparable instead of scoring zero against all.
186
+ const sessionEnd = Math.max(session.endedAt, session.startedAt + 1);
187
+ const span = sessionEnd - session.startedAt;
188
+ // Identity first: a test the report places in another worker process
189
+ // cannot have run in this session, whatever the clocks say. Pairs where
190
+ // either side's worker is unknown stay eligible and fall through to the
191
+ // timing join below.
192
+ const eligible = outcomes.filter((outcome) => session.workerIndex === undefined || outcome.workerIndex === undefined ||
193
+ outcome.workerIndex === session.workerIndex);
194
+ if (eligible.length < outcomes.length) {
195
+ debug('%s ran in worker %d — %d of %d tests eligible', session.sessionId, session.workerIndex, eligible.length, outcomes.length);
196
+ }
197
+ const scored = eligible
198
+ .map((outcome) => ({
199
+ outcome,
200
+ coverage: Math.max(0, Math.min(sessionEnd, Math.max(outcome.endedAt, outcome.startedAt + 1) + slackFor(outcome)) -
201
+ Math.max(session.startedAt, outcome.startedAt - slackFor(outcome))) / span,
202
+ }))
203
+ .filter((c) => c.coverage >= MIN_COVERAGE)
204
+ .sort((a, b) => b.coverage - a.coverage);
205
+ if (scored.length === 0) {
206
+ debug('%s overlaps no test interval — unattributable', session.sessionId);
207
+ continue;
208
+ }
209
+ if (scored.length > 1 && scored[1].coverage >= scored[0].coverage) {
210
+ debug('%d tests overlap session %s equally — unattributable', scored.length, session.sessionId);
211
+ continue;
212
+ }
213
+ claims.push({ sessionId: session.sessionId, outcome: scored[0].outcome, coverage: scored[0].coverage });
214
+ }
215
+ // One test ran in one session: when several sessions claim the same test,
216
+ // the best-covered one wins, and a tie means neither may have it.
217
+ const attributed = new Map();
218
+ for (const outcome of new Set(claims.map((c) => c.outcome))) {
219
+ const rivals = claims.filter((c) => c.outcome === outcome).sort((a, b) => b.coverage - a.coverage);
220
+ if (rivals.length > 1 && rivals[1].coverage >= rivals[0].coverage) {
221
+ debug('%d sessions claim test "%s" equally — none attributed', rivals.length, outcome.title);
222
+ continue;
223
+ }
224
+ if (rivals.length > 1) {
225
+ debug('%d sessions claim test "%s" — %s wins', rivals.length, outcome.title, rivals[0].sessionId);
226
+ }
227
+ attributed.set(rivals[0].sessionId, outcome);
228
+ }
229
+ return attributed;
230
+ }
231
+ }
232
+ /**
233
+ * Playwright's JSON report for this run, when mobilewright exposes one.
234
+ * Documented upstream as a transitional escape hatch, so every reader below is
235
+ * feature-detected and silent on failure: the report may sharpen reporting,
236
+ * but nothing may depend on it. Read once per run and shared.
237
+ */
238
+ export async function readJsonReport(result) {
239
+ try {
240
+ return await result.jsonReport?.();
241
+ }
242
+ catch (err) {
243
+ debug('could not read the run report: %s', err);
244
+ return undefined;
245
+ }
246
+ }
247
+ /**
248
+ * Per-test worker index and interval, keyed by `spec.id` — which is the same
249
+ * id `onTestEnd` receives as `TestInfo.id`. Two things the reporter events
250
+ * cannot give us:
251
+ *
252
+ * - **which worker process ran the test.** The driver stamps that same index
253
+ * on its run-file session records from inside the worker, so this is a real
254
+ * identity join, not a heuristic — it rules out every test that provably ran
255
+ * somewhere else, which is what makes concurrent runs attributable at all.
256
+ * - **the worker's own timestamps.** `onTestEnd` can only reconstruct the
257
+ * interval from `Date.now()` in the coordinator, after reporter dispatch;
258
+ * any delay there shifts the whole interval away from the session's.
259
+ *
260
+ * Later attempts win, matching how `onTestEnd` overwrites retried tests.
261
+ */
262
+ export function readTestTimings(report) {
263
+ const timings = new Map();
264
+ const walk = (suite) => {
265
+ for (const spec of arr(suite['specs'])) {
266
+ const id = str(spec['id']);
267
+ const results = arr(spec['tests']).flatMap((test) => arr(test['results']));
268
+ const final = results[results.length - 1];
269
+ if (id === undefined || final === undefined)
270
+ continue;
271
+ const startedAt = Date.parse(str(final['startTime']) ?? '');
272
+ const duration = final['duration'];
273
+ if (!Number.isFinite(startedAt) || typeof duration !== 'number')
274
+ continue;
275
+ // Playwright reports workerIndex -1 for tests it never got to run.
276
+ const workerIndex = typeof final['workerIndex'] === 'number' && final['workerIndex'] >= 0
277
+ ? final['workerIndex']
278
+ : undefined;
279
+ timings.set(id, { workerIndex, startedAt, endedAt: startedAt + duration });
144
280
  }
281
+ for (const child of arr(suite['suites']))
282
+ walk(child);
283
+ };
284
+ try {
285
+ for (const suite of arr(report?.['suites']))
286
+ walk(suite);
287
+ }
288
+ catch (err) {
289
+ debug('could not read test timings from the run report: %s', err);
290
+ return new Map();
291
+ }
292
+ return timings;
293
+ }
294
+ /** Overlay report timings onto the outcomes collected from the event hooks. */
295
+ export function applyReportedTimings(outcomes, timings) {
296
+ if (timings.size === 0)
297
+ return outcomes;
298
+ let joined = 0;
299
+ const merged = outcomes.map((outcome) => {
300
+ const timing = timings.get(outcome.id);
301
+ if (!timing)
302
+ return outcome;
303
+ joined += 1;
304
+ return { ...outcome, ...timing, fromReport: true };
305
+ });
306
+ debug('run report supplied worker identity and timings for %d/%d tests', joined, outcomes.length);
307
+ return merged;
308
+ }
309
+ /**
310
+ * Git metadata mobilewright captures into the Playwright report
311
+ * (`config.metadata.gitCommit`, populated when `captureGitInfo` is on —
312
+ * Playwright does this automatically on CI).
313
+ */
314
+ export function readGitInfo(report) {
315
+ try {
316
+ const config = report?.['config'];
317
+ const metadata = config?.['metadata'];
318
+ const commit = metadata?.['gitCommit'];
319
+ if (!commit)
320
+ return undefined;
321
+ const author = commit['author'];
322
+ const info = {
323
+ commit: str(commit['hash']),
324
+ branch: str(commit['branch']),
325
+ author: str(author?.['name']),
326
+ subject: str(commit['subject']),
327
+ };
328
+ return Object.values(info).some((v) => v !== undefined) ? info : undefined;
329
+ }
330
+ catch (err) {
331
+ debug('could not read git metadata from the report: %s', err);
145
332
  return undefined;
146
333
  }
147
334
  }
335
+ /** Merge the user's `extra` with git metadata for the dashboard's extra field. */
336
+ export function buildExtra(userExtra, git) {
337
+ if (!git)
338
+ return userExtra;
339
+ const payload = { ...git };
340
+ if (userExtra !== undefined)
341
+ payload['extra'] = userExtra;
342
+ return JSON.stringify(payload);
343
+ }
344
+ function str(value) {
345
+ return typeof value === 'string' && value ? value : undefined;
346
+ }
347
+ function arr(value) {
348
+ return Array.isArray(value) ? value : [];
349
+ }
148
350
  //# sourceMappingURL=observer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"observer.js","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"observer.js","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":"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"}
package/dist/options.d.ts CHANGED
@@ -12,8 +12,13 @@ export interface TestingBotDriverOptions {
12
12
  * existing storage URLs ("tb://...").
13
13
  *
14
14
  * apps: { android: './build/app.apk', 'ios-simulator': './build/app.zip', 'ios-real': './build/app.ipa' }
15
+ *
16
+ * Pass an array to install helper apps alongside the app under test (they
17
+ * ride along as `appium:otherApps`); the FIRST entry is the app under test:
18
+ *
19
+ * apps: { android: ['./build/app.apk', './build/mock-server.apk'] }
15
20
  */
16
- apps?: Partial<Record<AppSlot, string>>;
21
+ apps?: Partial<Record<AppSlot, string | string[]>>;
17
22
  /** TestingBot API key. Default: TESTINGBOT_KEY (or TB_KEY) env variable. */
18
23
  key?: string;
19
24
  /** TestingBot API secret. Default: TESTINGBOT_SECRET (or TB_SECRET) env variable. */
@@ -70,6 +75,10 @@ export interface TestingBotDriverOptions {
70
75
  public?: boolean;
71
76
  /** Custom metadata (release, commit hash, ...) shown on the test detail page. */
72
77
  extra?: string;
78
+ /** Android: auto-grant all app permission dialogs (`appium:autoGrantPermissions`). */
79
+ autoGrantPermissions?: boolean;
80
+ /** iOS: auto-accept system permission alerts (`appium:autoAcceptAlerts`). */
81
+ autoAcceptAlerts?: boolean;
73
82
  /** Restrict allocation to tablets only. */
74
83
  tabletOnly?: boolean;
75
84
  /** Restrict allocation to phones only. */
@@ -105,7 +114,7 @@ export interface TestingBotDriverOptions {
105
114
  sessionPerTest?: boolean;
106
115
  }
107
116
  export interface ResolvedOptions {
108
- apps: Partial<Record<AppSlot, string>>;
117
+ apps: Partial<Record<AppSlot, string | string[]>>;
109
118
  key: string;
110
119
  secret: string;
111
120
  hubUrl: string;
@@ -130,6 +139,8 @@ export interface ResolvedOptions {
130
139
  recordLogs: boolean | 'strip-parameters' | undefined;
131
140
  public: boolean | undefined;
132
141
  extra: string | undefined;
142
+ autoGrantPermissions: boolean | undefined;
143
+ autoAcceptAlerts: boolean | undefined;
133
144
  tabletOnly: boolean | undefined;
134
145
  phoneOnly: boolean | undefined;
135
146
  tunnelIdentifier: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
package/dist/options.js CHANGED
@@ -28,6 +28,8 @@ export function resolveOptions(options = {}) {
28
28
  recordLogs: options.recordLogs,
29
29
  public: options.public,
30
30
  extra: options.extra,
31
+ autoGrantPermissions: options.autoGrantPermissions,
32
+ autoAcceptAlerts: options.autoAcceptAlerts,
31
33
  tabletOnly: options.tabletOnly,
32
34
  phoneOnly: options.phoneOnly,
33
35
  tunnelIdentifier: options.tunnelIdentifier ?? (typeof options.tunnel === 'object' ? options.tunnel.identifier : undefined),
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AA4IxC;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,UAAmC,EAAE;IAClE,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;QACxB,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;QAChF,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE;QAC5F,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,mCAAmC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACnF,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,+BAA+B,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QAC/E,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,OAAO;QACvD,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,MAAM;QAChD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG;QACvC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,aAAa,EAAE;QACvC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;QAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,CAAC,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1H,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;QAChE,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;QACxC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE;QAClC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;QACxC,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,KAAK;KAChD,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAAC,IAAqB;IACtD,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,+EAA+E;YAC/E,+EAA+E;YAC/E,mEAAmE,CACpE,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAuJxC;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,UAAmC,EAAE;IAClE,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;QACxB,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;QAChF,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE;QAC5F,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,mCAAmC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACnF,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,+BAA+B,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QAC/E,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,OAAO;QACvD,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,MAAM;QAChD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG;QACvC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,aAAa,EAAE;QACvC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;QAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;QAClD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,CAAC,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1H,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;QAChE,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;QACxC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE;QAClC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;QACxC,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,KAAK;KAChD,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAAC,IAAqB;IACtD,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,+EAA+E;YAC/E,+EAA+E;YAC/E,mEAAmE,CACpE,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1,4 +1,12 @@
1
1
  import type { FetchFn } from './webdriver-client.js';
2
+ export interface UserInfo {
3
+ plan?: string;
4
+ /** Plan cap on parallel VM (simulator/emulator) sessions. */
5
+ max_concurrent?: number;
6
+ /** Plan cap on parallel physical-device sessions. */
7
+ max_concurrent_mobile?: number;
8
+ [key: string]: unknown;
9
+ }
2
10
  export interface TestingBotDevice {
3
11
  id: number;
4
12
  name: string;
@@ -46,7 +54,7 @@ export declare class RestApiClient {
46
54
  private readonly fetchFn;
47
55
  constructor(apiUrl: string, key: string, secret: string, fetchFn?: FetchFn);
48
56
  /** Validate credentials; used by prepare() to fail fast. */
49
- getUser(): Promise<Record<string, unknown>>;
57
+ getUser(): Promise<UserInfo>;
50
58
  /** Physical devices. `available` restricts to currently-acquirable ones. */
51
59
  getDevices(available: boolean): Promise<TestingBotDevice[]>;
52
60
  /** Simulator/emulator (and desktop-browser) combos; mobile rows carry platformName + deviceName + OS version. */
@@ -1 +1 @@
1
- {"version":3,"file":"rest-api.d.ts","sourceRoot":"","sources":["../src/rest-api.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAKrD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,SAAS,GAAG,KAAK,CAAC;IACjC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACvB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,0EAA0E;AAC1E,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAEtB,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,OAAe;IAMjF,4DAA4D;IACtD,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIjD,4EAA4E;IACtE,UAAU,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IASjE,iHAAiH;IAC3G,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAMtC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAK/D,0EAA0E;IACpE,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAalD,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAK5D,6EAA6E;IACvE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAWhE,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAItD,0EAA0E;IACpE,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAIlC,OAAO;YAeP,KAAK;CAgBpB;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3C"}
1
+ {"version":3,"file":"rest-api.d.ts","sourceRoot":"","sources":["../src/rest-api.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rest-api.js","sourceRoot":"","sources":["../src/rest-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rest-api.js","sourceRoot":"","sources":["../src/rest-api.ts"],"names":[],"mappings":"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"}