@testingbot/cli 1.0.8 → 1.1.0
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/README.md +25 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +29 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +1 -1
- package/dist/models/maestro_options.d.ts +16 -0
- package/dist/models/maestro_options.d.ts.map +1 -1
- package/dist/models/maestro_options.js +36 -0
- package/dist/models/xcuitest_options.d.ts +3 -0
- package/dist/models/xcuitest_options.d.ts.map +1 -1
- package/dist/models/xcuitest_options.js +6 -0
- package/dist/providers/base_provider.d.ts +9 -0
- package/dist/providers/base_provider.d.ts.map +1 -1
- package/dist/providers/base_provider.js +11 -0
- package/dist/providers/espresso.d.ts +1 -1
- package/dist/providers/espresso.d.ts.map +1 -1
- package/dist/providers/espresso.js +3 -3
- package/dist/providers/maestro.d.ts +97 -0
- package/dist/providers/maestro.d.ts.map +1 -1
- package/dist/providers/maestro.js +641 -153
- package/dist/providers/xcuitest.d.ts +5 -1
- package/dist/providers/xcuitest.d.ts.map +1 -1
- package/dist/providers/xcuitest.js +23 -11
- package/dist/upload.d.ts +1 -0
- package/dist/upload.d.ts.map +1 -1
- package/dist/upload.js +6 -1
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -92,6 +92,13 @@ testingbot maestro <app> <flows...> [options]
|
|
|
92
92
|
- `app` - Path to your app file (.apk, .ipa, .app, or .zip)
|
|
93
93
|
- `flows` - One or more paths to flow files (.yaml/.yml), directories, .zip files, or glob patterns
|
|
94
94
|
|
|
95
|
+
**App Options:**
|
|
96
|
+
|
|
97
|
+
| Option | Description |
|
|
98
|
+
|--------|-------------|
|
|
99
|
+
| `--app <path>` | Path to the application under test (alternative to the positional `app` argument) |
|
|
100
|
+
| `--other-app <path-or-url>` | Additional companion app to install on the device alongside `--app`. Accepts a local file path (`.apk`, `.ipa`, `.app`, `.zip`) **or** a `tb://<appkey>` / `http(s)://...` URL — local paths are uploaded; URLs are passed through to the run as-is. Repeatable, **max 4** entries. |
|
|
101
|
+
|
|
95
102
|
**Device Options:**
|
|
96
103
|
|
|
97
104
|
| Option | Description |
|
|
@@ -110,6 +117,7 @@ testingbot maestro <app> <flows...> [options]
|
|
|
110
117
|
|--------|-------------|
|
|
111
118
|
| `--name <name>` | Test name for dashboard identification |
|
|
112
119
|
| `--build <build>` | Build identifier for grouping test runs |
|
|
120
|
+
| `--groups <names>` | Tag the test session with one or more groups (comma-separated). Groups appear on the test in the TestingBot dashboard |
|
|
113
121
|
| `--include-tags <tags>` | Only run flows with these tags (comma-separated) |
|
|
114
122
|
| `--exclude-tags <tags>` | Exclude flows with these tags (comma-separated) |
|
|
115
123
|
| `-e, --env <KEY=VALUE>` | Environment variable for flows (can be repeated) |
|
|
@@ -146,8 +154,11 @@ testingbot maestro <app> <flows...> [options]
|
|
|
146
154
|
| Option | Description |
|
|
147
155
|
|--------|-------------|
|
|
148
156
|
| `--shard-split <number>` | Split flows into N parallel sessions for faster execution |
|
|
157
|
+
| `--retry <count>` | Retry failed flows up to N times (0-2, default 0). Re-runs only the flows (or shards) that failed, the moment they fail, while the rest of the run continues. Cannot be combined with `--async`. |
|
|
149
158
|
| `--ignore-checksum-check` | Skip checksum verification and always upload the app |
|
|
150
159
|
|
|
160
|
+
> **Note on `--retry`:** a failed flow/shard is retried immediately — as soon as it fails — without waiting for the other flows in the run to finish. Retry attempts appear live in the flow table marked with a `↻` icon. Each flow is retried independently up to N times, stopping as soon as that flow passes. Pass/fail uses the result of the **last** attempt per flow (last-attempt-wins), consistently across the CLI exit code, the TestingBot dashboard, and reports downloaded via `--report`.
|
|
161
|
+
|
|
151
162
|
**CI/CD Integration:**
|
|
152
163
|
|
|
153
164
|
| Option | Description |
|
|
@@ -172,9 +183,20 @@ testingbot maestro app.apk ./flows --device "Pixel 8" --deviceVersion "14"
|
|
|
172
183
|
# Android app on real device with tags
|
|
173
184
|
testingbot maestro app.apk ./flows --device "Samsung Galaxy S24" --real-device --include-tags "smoke,regression"
|
|
174
185
|
|
|
186
|
+
# Tag the test session with groups (visible in the dashboard)
|
|
187
|
+
testingbot maestro app.apk ./flows --groups "smoke,critical"
|
|
188
|
+
|
|
175
189
|
# With environment variables
|
|
176
190
|
testingbot maestro app.apk ./flows -e API_URL=https://staging.example.com -e API_KEY=secret
|
|
177
191
|
|
|
192
|
+
# With companion apps installed alongside the main app (up to 4)
|
|
193
|
+
# Each --other-app can be a local file (uploaded) or a tb:// / http(s):// URL (passed through)
|
|
194
|
+
testingbot maestro --app main.apk \
|
|
195
|
+
--other-app helper.apk \
|
|
196
|
+
--other-app tb://existing-appkey \
|
|
197
|
+
--other-app https://example.com/mock-server.apk \
|
|
198
|
+
./flows
|
|
199
|
+
|
|
178
200
|
# Download JUnit report
|
|
179
201
|
testingbot maestro app.apk ./flows --report junit --report-output-dir ./reports
|
|
180
202
|
|
|
@@ -193,6 +215,9 @@ testingbot maestro app.apk ./flows --async
|
|
|
193
215
|
# Split flows across 3 shards, grouping all flows over 3 parallel sessions
|
|
194
216
|
testingbot maestro app.apk ./flows --shard-split 3
|
|
195
217
|
|
|
218
|
+
# Retry failed flows up to 2 times (re-runs only the flows that failed)
|
|
219
|
+
testingbot maestro app.apk ./flows --retry 2
|
|
220
|
+
|
|
196
221
|
# CI/CD integration with Git metadata
|
|
197
222
|
testingbot maestro app.apk ./flows \
|
|
198
223
|
--commit-sha "abc123def" \
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,QAAA,MAAM,OAAO,SAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AA4rB9B,eAAe,OAAO,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -185,16 +185,25 @@ program
|
|
|
185
185
|
.argument('[flows...]', 'Paths to flow files, directories, or glob patterns (can specify multiple)')
|
|
186
186
|
// App and flows options
|
|
187
187
|
.option('--app <path>', 'Path to application under test (.apk, .ipa, .app, or .zip).')
|
|
188
|
+
.option('--other-app <path>', 'Additional app to install alongside --app (.apk, .ipa, .app, or .zip). Repeatable, max 4.', (val, acc) => {
|
|
189
|
+
acc.push(val);
|
|
190
|
+
return acc;
|
|
191
|
+
}, [])
|
|
188
192
|
// Device configuration
|
|
189
193
|
.option('--device <device>', 'Device name to use for testing (e.g., "Pixel 9", "iPhone 17").')
|
|
190
194
|
.option('--platform <platform>', 'Platform name: Android or iOS.', (val) => val)
|
|
191
195
|
.option('--deviceVersion <version>', 'OS version (e.g., "14", "17.2").')
|
|
192
196
|
.option('--real-device', 'Use a real device instead of an emulator/simulator.')
|
|
197
|
+
.option('--google-play', 'Use the Google Play Store-enabled version (Android emulator only).')
|
|
193
198
|
.option('--orientation <orientation>', 'Screen orientation: PORTRAIT or LANDSCAPE.', (val) => val.toUpperCase())
|
|
194
199
|
.option('--device-locale <locale>', 'Device locale (e.g., "en_US", "de_DE").')
|
|
195
200
|
.option('--timezone <timezone>', 'Device timezone (e.g., "America/New_York", "Europe/London").')
|
|
196
201
|
// Test metadata
|
|
197
202
|
.option('--name <name>', 'Name for this Maestro run.')
|
|
203
|
+
.option('--groups <names>', 'Tag the test session with one or more groups (comma-separated).', (val) => val
|
|
204
|
+
.split(',')
|
|
205
|
+
.map((g) => g.trim())
|
|
206
|
+
.filter((g) => g.length > 0))
|
|
198
207
|
// Network and geo
|
|
199
208
|
.option('--throttle-network <speed>', 'Network throttling: 4G, 3G, Edge, airplane, or disable.', (val) => val)
|
|
200
209
|
.option('--geo-country-code <code>', 'Geographic IP location (ISO country code, e.g., "US", "DE").')
|
|
@@ -211,6 +220,7 @@ program
|
|
|
211
220
|
.option('--maestro-version <version>', 'Maestro version to use (e.g., "2.0.10").')
|
|
212
221
|
// Execution mode
|
|
213
222
|
.option('-q, --quiet', 'Quieter console output without progress updates.')
|
|
223
|
+
.option('--retry <count>', 'Retry failed flows up to N times (0-2, default 0). Stops as soon as a flow passes.', (val) => parseInt(val, 10), 0)
|
|
214
224
|
.option('--async', 'Start tests and exit immediately without waiting for results.')
|
|
215
225
|
.option('--dry-run', 'Validate and prepare everything but skip HTTP calls. Shows what would be sent.')
|
|
216
226
|
// Tunnel
|
|
@@ -257,6 +267,16 @@ program
|
|
|
257
267
|
if (missing.length > 0) {
|
|
258
268
|
throw new testingbot_error_1.default(`Missing required argument: ${missing.join(', ')}. Run "testingbot maestro --help" for usage.`);
|
|
259
269
|
}
|
|
270
|
+
const otherApps = Array.isArray(args.otherApp)
|
|
271
|
+
? args.otherApp.slice()
|
|
272
|
+
: [];
|
|
273
|
+
// Commander stores the accumulator on a shared default array; reset it so
|
|
274
|
+
// values do not leak across repeated parses (e.g. in tests).
|
|
275
|
+
if (Array.isArray(args.otherApp))
|
|
276
|
+
args.otherApp.length = 0;
|
|
277
|
+
if (otherApps.length > 4) {
|
|
278
|
+
throw new testingbot_error_1.default(`Too many --other-app entries (${otherApps.length}). Maximum is 4.`);
|
|
279
|
+
}
|
|
260
280
|
const credentials = await auth_1.default.getCredentials({
|
|
261
281
|
apiKey: args.apiKey,
|
|
262
282
|
apiSecret: args.apiSecret,
|
|
@@ -313,9 +333,13 @@ program
|
|
|
313
333
|
artifactsOutputDir: args.artifactsOutputDir,
|
|
314
334
|
ignoreChecksumCheck: args.ignoreChecksumCheck,
|
|
315
335
|
shardSplit: args.shardSplit,
|
|
336
|
+
retry: args.retry,
|
|
316
337
|
debug: args.debug,
|
|
338
|
+
googlePlayStore: args.googlePlay,
|
|
317
339
|
configFile: args.config,
|
|
340
|
+
groups: args.groups,
|
|
318
341
|
metadata,
|
|
342
|
+
otherApps,
|
|
319
343
|
});
|
|
320
344
|
if (args.debug) {
|
|
321
345
|
(0, logger_1.enableDebugLogging)();
|
|
@@ -376,6 +400,7 @@ program
|
|
|
376
400
|
// Authentication
|
|
377
401
|
.option('--api-key <key>', 'TestingBot API key.')
|
|
378
402
|
.option('--api-secret <secret>', 'TestingBot API secret.')
|
|
403
|
+
.option('--debug', 'Enable debug logging of API responses.')
|
|
379
404
|
.action(async (appFileArg, testAppFileArg, args) => {
|
|
380
405
|
try {
|
|
381
406
|
// Positional arguments take precedence, fall back to options
|
|
@@ -428,8 +453,12 @@ program
|
|
|
428
453
|
dryRun: args.dryRun,
|
|
429
454
|
report: args.report,
|
|
430
455
|
reportOutputDir: args.reportOutputDir,
|
|
456
|
+
debug: args.debug,
|
|
431
457
|
metadata,
|
|
432
458
|
});
|
|
459
|
+
if (args.debug) {
|
|
460
|
+
(0, logger_1.enableDebugLogging)();
|
|
461
|
+
}
|
|
433
462
|
const xcuitest = new xcuitest_1.default(credentials, options);
|
|
434
463
|
const result = await xcuitest.run();
|
|
435
464
|
if (!result.success) {
|
package/dist/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,QAAA,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,QAAA,MAAM,MAAM,8BAUV,CAAC;AAIH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,eAAe,MAAM,CAAC"}
|
package/dist/logger.js
CHANGED
|
@@ -7,7 +7,6 @@ exports.enableDebugLogging = enableDebugLogging;
|
|
|
7
7
|
const picocolors_1 = __importDefault(require("picocolors"));
|
|
8
8
|
const tracer_1 = __importDefault(require("tracer"));
|
|
9
9
|
const logger = tracer_1.default.colorConsole({
|
|
10
|
-
level: 'info',
|
|
11
10
|
format: '{{timestamp}} {{message}}',
|
|
12
11
|
dateformat: 'HH:MM:ss.L',
|
|
13
12
|
filters: [
|
|
@@ -18,6 +17,7 @@ const logger = tracer_1.default.colorConsole({
|
|
|
18
17
|
},
|
|
19
18
|
],
|
|
20
19
|
});
|
|
20
|
+
tracer_1.default.setLevel('info');
|
|
21
21
|
function enableDebugLogging() {
|
|
22
22
|
tracer_1.default.setLevel('debug');
|
|
23
23
|
}
|
|
@@ -26,6 +26,8 @@ export interface MaestroCapabilities {
|
|
|
26
26
|
'testingbot.geoCountryCode'?: string;
|
|
27
27
|
tunnelIdentifier?: string;
|
|
28
28
|
realDevice?: string;
|
|
29
|
+
groups?: string[];
|
|
30
|
+
googlePlayStore?: boolean;
|
|
29
31
|
}
|
|
30
32
|
export interface MaestroRunOptions {
|
|
31
33
|
includeTags?: string[];
|
|
@@ -33,10 +35,13 @@ export interface MaestroRunOptions {
|
|
|
33
35
|
env?: Record<string, string>;
|
|
34
36
|
version?: string;
|
|
35
37
|
}
|
|
38
|
+
export declare const MAX_OTHER_APPS = 4;
|
|
39
|
+
export declare const MAX_RETRY = 2;
|
|
36
40
|
export default class MaestroOptions {
|
|
37
41
|
private static isIpaFile;
|
|
38
42
|
private _app;
|
|
39
43
|
private _flows;
|
|
44
|
+
private _otherApps;
|
|
40
45
|
private _device?;
|
|
41
46
|
private _includeTags?;
|
|
42
47
|
private _excludeTags?;
|
|
@@ -62,8 +67,11 @@ export default class MaestroOptions {
|
|
|
62
67
|
private _artifactsOutputDir?;
|
|
63
68
|
private _ignoreChecksumCheck;
|
|
64
69
|
private _shardSplit?;
|
|
70
|
+
private _retry;
|
|
65
71
|
private _debug;
|
|
66
72
|
private _configFile?;
|
|
73
|
+
private _groups?;
|
|
74
|
+
private _googlePlayStore;
|
|
67
75
|
private _metadata?;
|
|
68
76
|
constructor(app: string, flows: string | string[], device?: string, options?: {
|
|
69
77
|
includeTags?: string[];
|
|
@@ -90,12 +98,17 @@ export default class MaestroOptions {
|
|
|
90
98
|
artifactsOutputDir?: string;
|
|
91
99
|
ignoreChecksumCheck?: boolean;
|
|
92
100
|
shardSplit?: number;
|
|
101
|
+
retry?: number;
|
|
93
102
|
debug?: boolean;
|
|
94
103
|
configFile?: string;
|
|
104
|
+
groups?: string[];
|
|
105
|
+
googlePlayStore?: boolean;
|
|
95
106
|
metadata?: RunMetadata;
|
|
107
|
+
otherApps?: string[];
|
|
96
108
|
});
|
|
97
109
|
get app(): string;
|
|
98
110
|
get flows(): string[];
|
|
111
|
+
get otherApps(): string[];
|
|
99
112
|
get device(): string | undefined;
|
|
100
113
|
get includeTags(): string[] | undefined;
|
|
101
114
|
get excludeTags(): string[] | undefined;
|
|
@@ -121,9 +134,12 @@ export default class MaestroOptions {
|
|
|
121
134
|
get artifactsOutputDir(): string | undefined;
|
|
122
135
|
get ignoreChecksumCheck(): boolean;
|
|
123
136
|
get shardSplit(): number | undefined;
|
|
137
|
+
get retry(): number;
|
|
124
138
|
get debug(): boolean;
|
|
125
139
|
get configFile(): string | undefined;
|
|
126
140
|
get metadata(): RunMetadata | undefined;
|
|
141
|
+
get groups(): string[] | undefined;
|
|
142
|
+
get googlePlayStore(): boolean;
|
|
127
143
|
getMaestroOptions(): MaestroRunOptions | undefined;
|
|
128
144
|
getCapabilities(detectedPlatform?: 'Android' | 'iOS'): MaestroCapabilities;
|
|
129
145
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maestro_options.d.ts","sourceRoot":"","sources":["../../src/models/maestro_options.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;CACtC;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,WAAW,CAAC;AACnD,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AAC5E,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC;AAC9D,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEpD,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,eAAe,CAAC;IACnC,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"maestro_options.d.ts","sourceRoot":"","sources":["../../src/models/maestro_options.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;CACtC;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,WAAW,CAAC;AACnD,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AAC5E,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC;AAC9D,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEpD,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,eAAe,CAAC;IACnC,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,cAAc,IAAI,CAAC;AAGhC,eAAO,MAAM,SAAS,IAAI,CAAC;AAE3B,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC,OAAO,CAAC,MAAM,CAAC,SAAS;IAIxB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,UAAU,CAAW;IAC7B,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,YAAY,CAAC,CAAW;IAChC,OAAO,CAAC,YAAY,CAAC,CAAW;IAChC,OAAO,CAAC,aAAa,CAAC,CAAoB;IAC1C,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,YAAY,CAAC,CAAc;IACnC,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAC,CAAkB;IAC3C,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,IAAI,CAAC,CAAyB;IACtC,OAAO,CAAC,eAAe,CAAC,CAAS;IAEjC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,iBAAiB,CAAC,CAAS;IACnC,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAAC,CAAe;IAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAClC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,kBAAkB,CAAC,CAAuB;IAClD,OAAO,CAAC,mBAAmB,CAAC,CAAS;IACrC,OAAO,CAAC,oBAAoB,CAAU;IACtC,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAC,CAAW;IAC3B,OAAO,CAAC,gBAAgB,CAAU;IAElC,OAAO,CAAC,SAAS,CAAC,CAAc;gBAG9B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EACxB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,YAAY,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;QACjC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,eAAe,CAAC;QAClC,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,YAAY,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,iBAAiB,CAAC,EAAE,oBAAoB,CAAC;QACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,QAAQ,CAAC,EAAE,WAAW,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;KACtB;IA0DH,IAAW,GAAG,IAAI,MAAM,CAEvB;IAED,IAAW,KAAK,IAAI,MAAM,EAAE,CAE3B;IAED,IAAW,SAAS,IAAI,MAAM,EAAE,CAE/B;IAED,IAAW,MAAM,IAAI,MAAM,GAAG,SAAS,CAEtC;IAED,IAAW,WAAW,IAAI,MAAM,EAAE,GAAG,SAAS,CAE7C;IAED,IAAW,WAAW,IAAI,MAAM,EAAE,GAAG,SAAS,CAE7C;IAED,IAAW,YAAY,IAAI,SAAS,GAAG,KAAK,GAAG,SAAS,CAEvD;IAED,IAAW,OAAO,IAAI,MAAM,GAAG,SAAS,CAEvC;IAED,IAAW,IAAI,IAAI,MAAM,GAAG,SAAS,CAEpC;IAED,IAAW,WAAW,IAAI,WAAW,GAAG,SAAS,CAEhD;IAED,IAAW,MAAM,IAAI,MAAM,GAAG,SAAS,CAEtC;IAED,IAAW,QAAQ,IAAI,MAAM,GAAG,SAAS,CAExC;IAED,IAAW,eAAe,IAAI,eAAe,GAAG,SAAS,CAExD;IAED,IAAW,cAAc,IAAI,MAAM,GAAG,SAAS,CAE9C;IAED,IAAW,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAEnD;IAED,IAAW,cAAc,IAAI,MAAM,GAAG,SAAS,CAE9C;IAED,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED,IAAW,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAEhD;IAED,IAAW,KAAK,IAAI,OAAO,CAE1B;IAED,IAAW,KAAK,IAAI,OAAO,CAE1B;IAED,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED,IAAW,MAAM,IAAI,YAAY,GAAG,SAAS,CAE5C;IAED,IAAW,eAAe,IAAI,MAAM,GAAG,SAAS,CAE/C;IAED,IAAW,UAAU,IAAI,OAAO,CAE/B;IAED,IAAW,iBAAiB,IAAI,oBAAoB,GAAG,SAAS,CAE/D;IAED,IAAW,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAElD;IAED,IAAW,mBAAmB,IAAI,OAAO,CAExC;IAED,IAAW,UAAU,IAAI,MAAM,GAAG,SAAS,CAE1C;IAED,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED,IAAW,KAAK,IAAI,OAAO,CAE1B;IAED,IAAW,UAAU,IAAI,MAAM,GAAG,SAAS,CAE1C;IAED,IAAW,QAAQ,IAAI,WAAW,GAAG,SAAS,CAE7C;IAED,IAAW,MAAM,IAAI,MAAM,EAAE,GAAG,SAAS,CAExC;IAED,IAAW,eAAe,IAAI,OAAO,CAEpC;IAEM,iBAAiB,IAAI,iBAAiB,GAAG,SAAS;IAmBlD,eAAe,CACpB,gBAAgB,CAAC,EAAE,SAAS,GAAG,KAAK,GACnC,mBAAmB;CAqCvB"}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_RETRY = exports.MAX_OTHER_APPS = void 0;
|
|
3
4
|
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
exports.MAX_OTHER_APPS = 4;
|
|
6
|
+
// Mirror devicecloud.dev: retries are capped at 2 (max 3 total runs per flow).
|
|
7
|
+
exports.MAX_RETRY = 2;
|
|
4
8
|
class MaestroOptions {
|
|
5
9
|
static isIpaFile(app) {
|
|
6
10
|
return app?.toLowerCase().endsWith('.ipa') ?? false;
|
|
7
11
|
}
|
|
8
12
|
_app;
|
|
9
13
|
_flows;
|
|
14
|
+
_otherApps;
|
|
10
15
|
_device;
|
|
11
16
|
_includeTags;
|
|
12
17
|
_excludeTags;
|
|
@@ -33,13 +38,20 @@ class MaestroOptions {
|
|
|
33
38
|
_artifactsOutputDir;
|
|
34
39
|
_ignoreChecksumCheck;
|
|
35
40
|
_shardSplit;
|
|
41
|
+
_retry;
|
|
36
42
|
_debug;
|
|
37
43
|
_configFile;
|
|
44
|
+
_groups;
|
|
45
|
+
_googlePlayStore;
|
|
38
46
|
// Metadata
|
|
39
47
|
_metadata;
|
|
40
48
|
constructor(app, flows, device, options) {
|
|
41
49
|
this._app = app;
|
|
42
50
|
this._flows = flows ? (Array.isArray(flows) ? flows : [flows]) : [];
|
|
51
|
+
this._otherApps = options?.otherApps ?? [];
|
|
52
|
+
if (this._otherApps.length > exports.MAX_OTHER_APPS) {
|
|
53
|
+
throw new Error(`Too many other apps (${this._otherApps.length}). Maximum is ${exports.MAX_OTHER_APPS}.`);
|
|
54
|
+
}
|
|
43
55
|
this._device = device;
|
|
44
56
|
this._includeTags = options?.includeTags;
|
|
45
57
|
this._excludeTags = options?.excludeTags;
|
|
@@ -71,8 +83,16 @@ class MaestroOptions {
|
|
|
71
83
|
this._artifactsOutputDir = options?.artifactsOutputDir;
|
|
72
84
|
this._ignoreChecksumCheck = options?.ignoreChecksumCheck ?? false;
|
|
73
85
|
this._shardSplit = options?.shardSplit;
|
|
86
|
+
this._retry = options?.retry ?? 0;
|
|
87
|
+
if (!Number.isInteger(this._retry) ||
|
|
88
|
+
this._retry < 0 ||
|
|
89
|
+
this._retry > exports.MAX_RETRY) {
|
|
90
|
+
throw new Error(`Invalid --retry value (${options?.retry}). It must be an integer between 0 and ${exports.MAX_RETRY}.`);
|
|
91
|
+
}
|
|
74
92
|
this._debug = options?.debug ?? false;
|
|
75
93
|
this._configFile = options?.configFile;
|
|
94
|
+
this._groups = options?.groups;
|
|
95
|
+
this._googlePlayStore = options?.googlePlayStore ?? false;
|
|
76
96
|
this._metadata = options?.metadata;
|
|
77
97
|
}
|
|
78
98
|
get app() {
|
|
@@ -81,6 +101,9 @@ class MaestroOptions {
|
|
|
81
101
|
get flows() {
|
|
82
102
|
return this._flows;
|
|
83
103
|
}
|
|
104
|
+
get otherApps() {
|
|
105
|
+
return this._otherApps;
|
|
106
|
+
}
|
|
84
107
|
get device() {
|
|
85
108
|
return this._device;
|
|
86
109
|
}
|
|
@@ -156,6 +179,9 @@ class MaestroOptions {
|
|
|
156
179
|
get shardSplit() {
|
|
157
180
|
return this._shardSplit;
|
|
158
181
|
}
|
|
182
|
+
get retry() {
|
|
183
|
+
return this._retry;
|
|
184
|
+
}
|
|
159
185
|
get debug() {
|
|
160
186
|
return this._debug;
|
|
161
187
|
}
|
|
@@ -165,6 +191,12 @@ class MaestroOptions {
|
|
|
165
191
|
get metadata() {
|
|
166
192
|
return this._metadata;
|
|
167
193
|
}
|
|
194
|
+
get groups() {
|
|
195
|
+
return this._groups;
|
|
196
|
+
}
|
|
197
|
+
get googlePlayStore() {
|
|
198
|
+
return this._googlePlayStore;
|
|
199
|
+
}
|
|
168
200
|
getMaestroOptions() {
|
|
169
201
|
const opts = {};
|
|
170
202
|
if (this._includeTags && this._includeTags.length > 0) {
|
|
@@ -217,6 +249,10 @@ class MaestroOptions {
|
|
|
217
249
|
caps.tunnelIdentifier = this._tunnelIdentifier;
|
|
218
250
|
if (this._realDevice)
|
|
219
251
|
caps.realDevice = 'true';
|
|
252
|
+
if (this._groups && this._groups.length > 0)
|
|
253
|
+
caps.groups = this._groups;
|
|
254
|
+
if (this._googlePlayStore)
|
|
255
|
+
caps.googlePlayStore = true;
|
|
220
256
|
return caps;
|
|
221
257
|
}
|
|
222
258
|
}
|
|
@@ -55,6 +55,7 @@ export default class XCUITestOptions {
|
|
|
55
55
|
private _dryRun;
|
|
56
56
|
private _report?;
|
|
57
57
|
private _reportOutputDir?;
|
|
58
|
+
private _debug;
|
|
58
59
|
private _metadata?;
|
|
59
60
|
constructor(app: string, testApp: string, device?: string, options?: {
|
|
60
61
|
version?: string;
|
|
@@ -76,6 +77,7 @@ export default class XCUITestOptions {
|
|
|
76
77
|
dryRun?: boolean;
|
|
77
78
|
report?: ReportFormat;
|
|
78
79
|
reportOutputDir?: string;
|
|
80
|
+
debug?: boolean;
|
|
79
81
|
metadata?: RunMetadata;
|
|
80
82
|
});
|
|
81
83
|
get app(): string;
|
|
@@ -100,6 +102,7 @@ export default class XCUITestOptions {
|
|
|
100
102
|
get dryRun(): boolean;
|
|
101
103
|
get report(): ReportFormat | undefined;
|
|
102
104
|
get reportOutputDir(): string | undefined;
|
|
105
|
+
get debug(): boolean;
|
|
103
106
|
get metadata(): RunMetadata | undefined;
|
|
104
107
|
getCapabilities(): XCUITestCapabilities;
|
|
105
108
|
getXCUITestOptions(): XCUITestRunOptions | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xcuitest_options.d.ts","sourceRoot":"","sources":["../../src/models/xcuitest_options.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"xcuitest_options.d.ts","sourceRoot":"","sources":["../../src/models/xcuitest_options.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,8 @@ class XCUITestOptions {
|
|
|
34
34
|
_dryRun;
|
|
35
35
|
_report;
|
|
36
36
|
_reportOutputDir;
|
|
37
|
+
// Debugging
|
|
38
|
+
_debug;
|
|
37
39
|
// Metadata
|
|
38
40
|
_metadata;
|
|
39
41
|
constructor(app, testApp, device, options) {
|
|
@@ -67,6 +69,7 @@ class XCUITestOptions {
|
|
|
67
69
|
this._dryRun = options?.dryRun ?? false;
|
|
68
70
|
this._report = options?.report;
|
|
69
71
|
this._reportOutputDir = options?.reportOutputDir;
|
|
72
|
+
this._debug = options?.debug ?? false;
|
|
70
73
|
this._metadata = options?.metadata;
|
|
71
74
|
}
|
|
72
75
|
get app() {
|
|
@@ -135,6 +138,9 @@ class XCUITestOptions {
|
|
|
135
138
|
get reportOutputDir() {
|
|
136
139
|
return this._reportOutputDir;
|
|
137
140
|
}
|
|
141
|
+
get debug() {
|
|
142
|
+
return this._debug;
|
|
143
|
+
}
|
|
138
144
|
get metadata() {
|
|
139
145
|
return this._metadata;
|
|
140
146
|
}
|
|
@@ -35,6 +35,15 @@ export default abstract class BaseProvider<TOptions extends BaseProviderOptions>
|
|
|
35
35
|
protected readonly MAX_POLL_INTERVAL_MS: number;
|
|
36
36
|
protected readonly POLL_BACKOFF_MULTIPLIER: number;
|
|
37
37
|
protected readonly MAX_POLL_DURATION_MS: number;
|
|
38
|
+
/**
|
|
39
|
+
* Whether a run/flow `success` field reported by the API indicates success.
|
|
40
|
+
* The API is inconsistent about the representation: some endpoints return a
|
|
41
|
+
* boolean (`true`/`false`) and others a number (`1`/`0`). A strict
|
|
42
|
+
* `success === 1` check silently treats a passing run reported as `true` as a
|
|
43
|
+
* failure, which is why a test that passes on TestingBot was shown as failed
|
|
44
|
+
* by the CLI. Accept both representations.
|
|
45
|
+
*/
|
|
46
|
+
protected isRunSuccessful(success: number | boolean | undefined): boolean;
|
|
38
47
|
/**
|
|
39
48
|
* Returns the next polling interval based on whether the status payload
|
|
40
49
|
* changed since the last poll. Resets to the minimum on change; otherwise
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base_provider.d.ts","sourceRoot":"","sources":["../../src/providers/base_provider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"base_provider.d.ts","sourceRoot":"","sources":["../../src/providers/base_provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,17 @@ class BaseProvider {
|
|
|
24
24
|
MAX_POLL_INTERVAL_MS = constants_1.POLLING.MAX_INTERVAL_MS;
|
|
25
25
|
POLL_BACKOFF_MULTIPLIER = constants_1.POLLING.BACKOFF_MULTIPLIER;
|
|
26
26
|
MAX_POLL_DURATION_MS = constants_1.POLLING.MAX_DURATION_MS;
|
|
27
|
+
/**
|
|
28
|
+
* Whether a run/flow `success` field reported by the API indicates success.
|
|
29
|
+
* The API is inconsistent about the representation: some endpoints return a
|
|
30
|
+
* boolean (`true`/`false`) and others a number (`1`/`0`). A strict
|
|
31
|
+
* `success === 1` check silently treats a passing run reported as `true` as a
|
|
32
|
+
* failure, which is why a test that passes on TestingBot was shown as failed
|
|
33
|
+
* by the CLI. Accept both representations.
|
|
34
|
+
*/
|
|
35
|
+
isRunSuccessful(success) {
|
|
36
|
+
return success === 1 || success === true;
|
|
37
|
+
}
|
|
27
38
|
/**
|
|
28
39
|
* Returns the next polling interval based on whether the status payload
|
|
29
40
|
* changed since the last poll. Resets to the minimum on change; otherwise
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"espresso.d.ts","sourceRoot":"","sources":["../../src/providers/espresso.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,4BAA4B,CAAC;AAEzD,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAQhD,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAI3C,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAChD,YAAY,EAAE;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,WAAW,CAAC,EAAE,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"espresso.d.ts","sourceRoot":"","sources":["../../src/providers/espresso.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,4BAA4B,CAAC;AAEzD,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAQhD,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAI3C,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAChD,YAAY,EAAE;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,WAAW,CAAC,EAAE,sBAAsB,CAAC;IAGrC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,eAAe,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,YAAY,CAAC,eAAe,CAAC;IACjE,SAAS,CAAC,QAAQ,CAAC,GAAG,yDACkC;IAExD,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,oBAAoB,CAAS;gBAElB,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe;YAIvD,QAAQ;IAuCT,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC;YA6G7B,SAAS;YAcT,aAAa;YAab,QAAQ;YA0DR,SAAS;YA4BT,iBAAiB;IAmG/B,OAAO,CAAC,gBAAgB;IA0CxB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,aAAa;YAkBP,YAAY;IAwD1B,OAAO,CAAC,qBAAqB;IA6C7B,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,mBAAmB;CAa5B"}
|
|
@@ -259,7 +259,7 @@ class Espresso extends base_provider_1.default {
|
|
|
259
259
|
if (!this.options.quiet) {
|
|
260
260
|
this.spinner.stop();
|
|
261
261
|
for (const run of status.runs) {
|
|
262
|
-
const passed = run.success
|
|
262
|
+
const passed = this.isRunSuccessful(run.success);
|
|
263
263
|
const symbol = passed ? picocolors_1.default.green('✔') : picocolors_1.default.red('✘');
|
|
264
264
|
const statusText = passed
|
|
265
265
|
? picocolors_1.default.green('Test completed successfully')
|
|
@@ -267,7 +267,7 @@ class Espresso extends base_provider_1.default {
|
|
|
267
267
|
console.log(` ${symbol} Run ${run.id} ${picocolors_1.default.dim(`(${this.getRunDisplayName(run)})`)}: ${statusText}`);
|
|
268
268
|
}
|
|
269
269
|
}
|
|
270
|
-
const allSucceeded = status.runs.every((run) => run.success
|
|
270
|
+
const allSucceeded = status.runs.every((run) => this.isRunSuccessful(run.success));
|
|
271
271
|
if (allSucceeded) {
|
|
272
272
|
(0, terminal_title_1.setTitle)('espresso · ✔ passed');
|
|
273
273
|
if (!this.options.quiet) {
|
|
@@ -275,7 +275,7 @@ class Espresso extends base_provider_1.default {
|
|
|
275
275
|
}
|
|
276
276
|
}
|
|
277
277
|
else {
|
|
278
|
-
const failedRuns = status.runs.filter((run) => run.success
|
|
278
|
+
const failedRuns = status.runs.filter((run) => !this.isRunSuccessful(run.success));
|
|
279
279
|
(0, terminal_title_1.setTitle)(`espresso · ✘ ${failedRuns.length} failed`);
|
|
280
280
|
logger_1.default.error(`${failedRuns.length} test run(s) failed:`);
|
|
281
281
|
for (const run of failedRuns) {
|