@mobilewright/driver-mobilenext 0.0.41 → 0.0.42
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/dist/driver.d.ts +2 -0
- package/dist/driver.d.ts.map +1 -1
- package/dist/driver.js +3 -2
- package/dist/driver.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/reporter.d.ts +37 -0
- package/dist/reporter.d.ts.map +1 -0
- package/dist/reporter.js +122 -0
- package/dist/reporter.js.map +1 -0
- package/dist/reporter.test.d.ts +2 -0
- package/dist/reporter.test.d.ts.map +1 -0
- package/dist/reporter.test.js +215 -0
- package/dist/reporter.test.js.map +1 -0
- package/dist/upload-client.d.ts +24 -0
- package/dist/upload-client.d.ts.map +1 -0
- package/dist/upload-client.js +137 -0
- package/dist/upload-client.js.map +1 -0
- package/dist/upload-client.test.d.ts +2 -0
- package/dist/upload-client.test.d.ts.map +1 -0
- package/dist/upload-client.test.js +294 -0
- package/dist/upload-client.test.js.map +1 -0
- package/package.json +6 -2
package/dist/driver.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ export declare const DEFAULT_URL = "wss://api.mobilenext.ai/ws";
|
|
|
3
3
|
export interface MobileNextDriverOptions {
|
|
4
4
|
region?: string;
|
|
5
5
|
apiKey?: string;
|
|
6
|
+
/** Timeout waiting for cloud device allocation in ms. Default: 300000 (5 min). */
|
|
7
|
+
allocationTimeout?: number;
|
|
6
8
|
}
|
|
7
9
|
export interface MobileNextDeviceInfo {
|
|
8
10
|
model?: string;
|
package/dist/driver.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,OAAO,EACP,gBAAgB,EAChB,UAAU,EAEV,UAAU,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EAEX,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,OAAO,EACP,cAAc,EACd,YAAY,EACZ,QAAQ,EACT,MAAM,wBAAwB,CAAC;AAGhC,eAAO,MAAM,WAAW,+BAA+B,CAAC;AA+DxD,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"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"}
|
package/dist/driver.js
CHANGED
|
@@ -96,7 +96,7 @@ export class MobileNextDriver {
|
|
|
96
96
|
let type;
|
|
97
97
|
if (result?.state === 'allocating' && result.sessionId) {
|
|
98
98
|
debug('device is provisioning, waiting for allocation (session=%s)', result.sessionId);
|
|
99
|
-
const device = await this.waitForAllocation(rpc, result.sessionId
|
|
99
|
+
const device = await this.waitForAllocation(rpc, result.sessionId);
|
|
100
100
|
debug('allocated device %s (session=%s, model=%s)', device.id, result.sessionId, device.model);
|
|
101
101
|
deviceId = device.id;
|
|
102
102
|
model = device.model;
|
|
@@ -116,7 +116,8 @@ export class MobileNextDriver {
|
|
|
116
116
|
this.session = { deviceId, platform, rpc, model, osVersion, type };
|
|
117
117
|
return { deviceId, platform };
|
|
118
118
|
}
|
|
119
|
-
async waitForAllocation(rpc, sessionId
|
|
119
|
+
async waitForAllocation(rpc, sessionId) {
|
|
120
|
+
const timeout = this.options.allocationTimeout ?? 300_000;
|
|
120
121
|
const pollInterval = 5_000;
|
|
121
122
|
const deadline = Date.now() + timeout;
|
|
122
123
|
while (Date.now() < deadline) {
|
package/dist/driver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.js","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"driver.js","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,WAAW,MAAM,OAAO,CAAC;AAuBhC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,CAAC,MAAM,WAAW,GAAG,4BAA4B,CAAC;AAsExD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;AAC5D,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAS,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;AAC9E,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAEnE,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAiB,CAAC,CAAC,CAAC,SAAS,CAAC;AACpE,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAmB,CAAC,CAAC,CAAC,MAAM,CAAC;AACtE,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAoB,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAqB;IAC9C,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAC9D,OAAO;QACL,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,SAAS;QAC1B,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,SAAS;QAC5B,UAAU,EAAE,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,IAAI,IAAI,SAAS;QACjD,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,SAAS;QAC5B,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,SAAS;QAC1B,WAAW,EAAE,EAAE,CAAC,WAAW,IAAI,SAAS;QACxC,SAAS,EAAE,OAAO,EAAE,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAC/F,SAAS,EAAE,EAAE,CAAC,OAAO,IAAI,IAAI;QAC7B,MAAM;QACN,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE;QACnD,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE;KACf,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW,EAAE,GAAW,EAAE,KAAa;IAC/D,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAChD,OAAO,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAExD,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/B,IAAI,CAAC;QACH,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;YAAS,CAAC;QACT,SAAS,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,2BAA2B,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;AAC9C,CAAC;AA0DD,MAAM,KAAK,GAAG,WAAW,CAAC,sBAAsB,CAAC,CAAC;AAElD,MAAM,OAAO,gBAAgB;IAK3B,IAAI,UAAU;QACZ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACnG,CAAC;IAED,YAAY,UAAmC,EAAE;QAXzC,YAAO,GAAyB,IAAI,CAAC;QAErC,cAAS,GAAG,KAAK,CAAC;QAUxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,gEAAgE;IAEhE,KAAK,CAAC,OAAO,CAAC,MAAwB;QACpC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;YAC7B,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACzD,CAAC,CAAC,OAAO,CAAC;QACZ,KAAK,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACpB,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAE7B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAEjC,wEAAwE;QACxE,sEAAsE;QACtE,wEAAwE;QACxE,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,KAAK,CAAC,iCAAiC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1D,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,OAAO,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;YAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC;QACjD,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC1C,KAAK,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAwB,gBAAgB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAEpF,IAAI,QAAgB,CAAC;QACrB,IAAI,KAAyB,CAAC;QAC9B,IAAI,SAA6B,CAAC;QAClC,IAAI,IAA4B,CAAC;QACjC,IAAI,MAAM,EAAE,KAAK,KAAK,YAAY,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACvD,KAAK,CAAC,6DAA6D,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YACvF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YACnE,KAAK,CAAC,4CAA4C,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/F,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;YACrB,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YACrB,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC;YAC3B,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;aAAM,IAAI,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YAC9B,KAAK,CAAC,4CAA4C,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7G,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YAC5B,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YAClC,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QACnE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,GAAc,EACd,SAAiB;QAEjB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC;QAC1D,MAAM,YAAY,GAAG,KAAK,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;QAEtC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACvE,KAAK,CAAC,yDAAyD,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAErF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAsB,cAAc,EAAE,EAAE,CAAC,CAAC;YACvE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC;YAC/E,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,SAAS;YACX,CAAC;YACD,IAAI,MAAM,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;gBAClC,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,iDAAiD,OAAO,GAAG,IAAI,cAAc,SAAS,GAAG,CAAC,CAAC;IAC7G,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,KAAK,CAAC,qBAAqB,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,KAAK,CAAC,cAAc,CAAC,CAAC;IACxB,CAAC;IAEO,YAAY,CAAC,MAAwB;QAC3C,MAAM,OAAO,GAAmB;YAC9B,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE;SACtE,CAAC;QAEF,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;gBAChD,CAAC,CAAC,MAAM,CAAC,UAAU;gBACnB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACtF,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,+DAA+D;IAE/D,KAAK,CAAC,gBAAgB;QACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAA2B,gBAAgB,CAAC,CAAC;QAC3E,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC;IAED,+DAA+D;IAE/D,KAAK,CAAC,GAAG,CAAC,CAAS,EAAE,CAAS;QAC5B,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,CAAS,EAAE,CAAS;QAClC,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,CAAS,EAAE,CAAS,EAAE,QAAiB;QACrD,MAAM,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IAChG,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY;QACzB,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAAyB,EAAE,IAAmB;QACxD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAElC,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC;QAEvC,MAAM,YAAY,GAAG,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,OAAO,CAAC;QACnE,MAAM,eAAe,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;QAC5E,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,eAAe,CAAC;QAEnD,IAAI,IAAI,GAAG,MAAM,CAAC;QAClB,IAAI,IAAI,GAAG,MAAM,CAAC;QAClB,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,IAAI;gBAAK,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;gBAAC,MAAM;YAC9C,KAAK,MAAM;gBAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;gBAAC,MAAM;YAC9C,KAAK,MAAM;gBAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;gBAAC,MAAM;YAC9C,KAAK,OAAO;gBAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;gBAAC,MAAM;QAChD,CAAC;QAED,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACjC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YACtB,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YACtB,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACpB,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACpB,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjE,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAyB;QACrC,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAsB;QACtC,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,+DAA+D;IAE/D,KAAK,CAAC,UAAU,CAAC,IAAwB;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAA+B,mBAAmB,EAAE;YAChF,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5C,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;SAC9D,CAAC,CAAC;QACH,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;QACtB,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;YACpB,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAA+B,aAAa,CAAC,CAAC;QAC5E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;QAC3B,OAAO,IAAI,CAAC,UAAU,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACvG,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAgC,2BAA2B,CAAC,CAAC;QAC3F,OAAO,MAAM,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,WAAwB;QAC3C,MAAM,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,+DAA+D;IAE/D,KAAK,CAAC,cAAc,CAAC,IAAsB;QACzC,MAAM,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;YACrC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;SACnE,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAkB,0BAA0B,CAAC,CAAC;QAC5E,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YACf,KAAK,CAAC,mCAAmC,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,+DAA+D;IAE/D,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,IAAoB;QACpD,MAAM,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YACpC,QAAQ;YACR,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;SAChD,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAgB;QACjC,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,6DAA6D;QAC7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAwD,kBAAkB,CAAC,CAAC;QAC1G,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE;YAC/C,IAAI,EAAE,GAAG,CAAC,OAAO;YACjB,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAqB,wBAAwB,CAAC,CAAC;QAC7E,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,WAAW,IAAI,EAAE;YACrD,IAAI,EAAE,MAAM,CAAC,OAAO;YACpB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC/B,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEtD,KAAK,CAAC,mCAAmC,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAuB,gBAAgB,EAAE;YACrE,QAAQ;YACR,QAAQ,EAAE,QAAQ,CAAC,IAAI;SACxB,CAAC,CAAC;QAEH,KAAK,CAAC,kCAAkC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE;YAC7C,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,cAAc,EAAE,0BAA0B;gBAC1C,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;aACxC;YACD,IAAI;YACJ,MAAM,EAAE,MAAM;SACA,CAAC,CAAC;QAClB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,KAAK,CAAC,+CAA+C,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAExE,MAAM,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtE,KAAK,CAAC,gCAAgC,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAgB;QACjC,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,+DAA+D;IAE/D,KAAK,CAAC,WAAW,CAAC,IAAyB;QACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAA4B,aAAa,CAAC,CAAC;QACzE,IAAI,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QAElC,IAAI,IAAI,EAAE,QAAQ,EAAE,CAAC;YACnB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;YAChB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,OAAO;aACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC;aACnD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACX,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE;YACxB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAE;YACjC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1B,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC;YAC7B,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,SAAS,EAAE,CAAC,CAAC,OAAO;SACrB,CAAC,CAAC,CAAC;IACR,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW;QACvB,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,+DAA+D;IAEvD,IAAI,CAAc,MAAc,EAAE,MAAgC;QACxE,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACtC,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAI,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IAChF,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { MobileNextDriver, DEFAULT_URL, type MobileNextDriverOptions, type MobileNextDeviceInfo } from './driver.js';
|
|
2
2
|
export { RpcClient } from './rpc-client.js';
|
|
3
|
+
export { uploadTestResult, extractGitInfoFromReport, type UploadTestResultParams, type GitInfo } from './upload-client.js';
|
|
4
|
+
export { default as MobileNextUploadReporter, type MobileNextTestResultConfig } from './reporter.js';
|
|
3
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,KAAK,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACrH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,KAAK,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACrH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,KAAK,sBAAsB,EAAE,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC3H,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,KAAK,0BAA0B,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { MobileNextDriver, DEFAULT_URL } from './driver.js';
|
|
2
2
|
export { RpcClient } from './rpc-client.js';
|
|
3
|
+
export { uploadTestResult, extractGitInfoFromReport } from './upload-client.js';
|
|
4
|
+
export { default as MobileNextUploadReporter } from './reporter.js';
|
|
3
5
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAA2D,MAAM,aAAa,CAAC;AACrH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAA2D,MAAM,aAAa,CAAC;AACrH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAA6C,MAAM,oBAAoB,CAAC;AAC3H,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAmC,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Reporter, TestCase, TestResult, FullResult, FullConfig, Suite, TestStep } from '@playwright/test/reporter';
|
|
2
|
+
import { type UploadTestResultParams } from './upload-client.js';
|
|
3
|
+
export interface MobileNextTestResultConfig {
|
|
4
|
+
uploadReport?: 'on' | 'off' | 'on-failure';
|
|
5
|
+
name?: string;
|
|
6
|
+
tags?: string[];
|
|
7
|
+
environment?: string;
|
|
8
|
+
}
|
|
9
|
+
type UploadFn = (params: UploadTestResultParams) => Promise<{
|
|
10
|
+
url: string;
|
|
11
|
+
}>;
|
|
12
|
+
interface MobileNextUploadReporterOptions {
|
|
13
|
+
apiKey: string;
|
|
14
|
+
jsonResultsPath: string;
|
|
15
|
+
testResult: MobileNextTestResultConfig;
|
|
16
|
+
uploadTimeout?: number;
|
|
17
|
+
_uploadFn?: UploadFn;
|
|
18
|
+
}
|
|
19
|
+
export default class MobileNextUploadReporter implements Reporter {
|
|
20
|
+
private hasFailed;
|
|
21
|
+
private hasTests;
|
|
22
|
+
private readonly options;
|
|
23
|
+
private readonly snippetsByResult;
|
|
24
|
+
private readonly snippetsByKey;
|
|
25
|
+
private readonly sourceCache;
|
|
26
|
+
constructor(options: MobileNextUploadReporterOptions);
|
|
27
|
+
onBegin(_config: FullConfig, suite: Suite): void;
|
|
28
|
+
onStepEnd(_test: TestCase, result: TestResult, step: TestStep): void;
|
|
29
|
+
onTestEnd(test: TestCase, result: TestResult): void;
|
|
30
|
+
onEnd(_result: FullResult): Promise<void>;
|
|
31
|
+
private extractSnippet;
|
|
32
|
+
private injectSnippets;
|
|
33
|
+
private walkSuite;
|
|
34
|
+
private walkSteps;
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=reporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACzH,OAAO,EAA8C,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAI7G,MAAM,WAAW,0BAA0B;IACzC,YAAY,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,YAAY,CAAC;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,KAAK,QAAQ,GAAG,CAAC,MAAM,EAAE,sBAAsB,KAAK,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE7E,UAAU,+BAA+B;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,0BAA0B,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,QAAQ,CAAC;CACtB;AAiCD,MAAM,CAAC,OAAO,OAAO,wBAAyB,YAAW,QAAQ;IAC/D,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAC1D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmC;IACpE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA+B;IAC7D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;gBAE/C,OAAO,EAAE,+BAA+B;IAIpD,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAIhD,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI;IASpE,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAQ7C,KAAK,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B/C,OAAO,CAAC,cAAc;IAyBtB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,SAAS;CAOlB"}
|
package/dist/reporter.js
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { uploadTestResult, extractGitInfoFromReport } from './upload-client.js';
|
|
4
|
+
const _require = createRequire(import.meta.url);
|
|
5
|
+
export default class MobileNextUploadReporter {
|
|
6
|
+
constructor(options) {
|
|
7
|
+
this.hasFailed = false;
|
|
8
|
+
this.hasTests = false;
|
|
9
|
+
this.snippetsByResult = new Map();
|
|
10
|
+
this.snippetsByKey = new Map();
|
|
11
|
+
this.sourceCache = new Map();
|
|
12
|
+
this.options = options;
|
|
13
|
+
}
|
|
14
|
+
onBegin(_config, suite) {
|
|
15
|
+
this.hasTests = suite.allTests().length > 0;
|
|
16
|
+
}
|
|
17
|
+
onStepEnd(_test, result, step) {
|
|
18
|
+
if (step.category !== 'test.step')
|
|
19
|
+
return;
|
|
20
|
+
if (!this.snippetsByResult.has(result)) {
|
|
21
|
+
this.snippetsByResult.set(result, []);
|
|
22
|
+
}
|
|
23
|
+
const snippet = step.location ? this.extractSnippet(step.location) : '';
|
|
24
|
+
this.snippetsByResult.get(result).push(snippet);
|
|
25
|
+
}
|
|
26
|
+
onTestEnd(test, result) {
|
|
27
|
+
if (result.status === 'failed' || result.status === 'timedOut') {
|
|
28
|
+
this.hasFailed = true;
|
|
29
|
+
}
|
|
30
|
+
this.snippetsByKey.set(`${test.id}:${result.retry}`, this.snippetsByResult.get(result) ?? []);
|
|
31
|
+
this.snippetsByResult.delete(result);
|
|
32
|
+
}
|
|
33
|
+
async onEnd(_result) {
|
|
34
|
+
if (!this.hasTests)
|
|
35
|
+
return;
|
|
36
|
+
const { uploadReport } = this.options.testResult;
|
|
37
|
+
if (uploadReport === 'off')
|
|
38
|
+
return;
|
|
39
|
+
if (uploadReport === 'on-failure' && !this.hasFailed)
|
|
40
|
+
return;
|
|
41
|
+
const upload = this.options._uploadFn ?? uploadTestResult;
|
|
42
|
+
const pkg = _require('../package.json');
|
|
43
|
+
const userAgent = `mobilewright/${pkg.version}`;
|
|
44
|
+
const rawContent = readFileSync(this.options.jsonResultsPath, 'utf8');
|
|
45
|
+
const report = JSON.parse(rawContent);
|
|
46
|
+
this.injectSnippets(report);
|
|
47
|
+
const gitInfo = extractGitInfoFromReport(report);
|
|
48
|
+
try {
|
|
49
|
+
const uploadResult = await upload({
|
|
50
|
+
apiKey: this.options.apiKey,
|
|
51
|
+
report: report,
|
|
52
|
+
userAgent,
|
|
53
|
+
gitInfo,
|
|
54
|
+
name: this.options.testResult.name,
|
|
55
|
+
tags: this.options.testResult.tags,
|
|
56
|
+
environment: this.options.testResult.environment,
|
|
57
|
+
timeout: this.options.uploadTimeout,
|
|
58
|
+
});
|
|
59
|
+
console.log(`\n Report uploaded: ${uploadResult.url}`);
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
console.warn(`\n [mobilewright] Failed to upload test results: ${err}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
extractSnippet(location) {
|
|
66
|
+
let lines = this.sourceCache.get(location.file);
|
|
67
|
+
if (!lines) {
|
|
68
|
+
try {
|
|
69
|
+
lines = readFileSync(location.file, 'utf-8').split('\n');
|
|
70
|
+
this.sourceCache.set(location.file, lines);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return '';
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const line = location.line; // 1-based
|
|
77
|
+
if (line < 2 || line > lines.length)
|
|
78
|
+
return '';
|
|
79
|
+
const lineNumWidth = String(line + 1).length;
|
|
80
|
+
const pad = (n) => String(n).padStart(lineNumWidth, ' ');
|
|
81
|
+
const snippet = [];
|
|
82
|
+
snippet.push(` ${pad(line - 1)} | ${lines[line - 2]}`);
|
|
83
|
+
snippet.push(`> ${pad(line)} | ${lines[line - 1]}`);
|
|
84
|
+
// Arrow under the column, accounting for the "> line | " prefix
|
|
85
|
+
const arrowOffset = ` ${pad(line)} | `.length + Math.max(0, location.column - 1);
|
|
86
|
+
snippet.push(' '.repeat(arrowOffset) + '^');
|
|
87
|
+
if (line < lines.length)
|
|
88
|
+
snippet.push(` ${pad(line + 1)} | ${lines[line]}`);
|
|
89
|
+
return snippet.join('\n');
|
|
90
|
+
}
|
|
91
|
+
injectSnippets(report) {
|
|
92
|
+
for (const suite of report.suites ?? []) {
|
|
93
|
+
this.walkSuite(suite);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
walkSuite(suite) {
|
|
97
|
+
for (const sub of suite.suites ?? []) {
|
|
98
|
+
this.walkSuite(sub);
|
|
99
|
+
}
|
|
100
|
+
for (const spec of suite.specs ?? []) {
|
|
101
|
+
for (const test of spec.tests) {
|
|
102
|
+
for (const result of test.results) {
|
|
103
|
+
const snippets = this.snippetsByKey.get(`${spec.id}:${result.retry}`);
|
|
104
|
+
if (result.steps?.length && snippets?.length) {
|
|
105
|
+
this.walkSteps(result.steps, snippets.slice());
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Post-order traversal: children before parent — matches onStepEnd completion order.
|
|
112
|
+
walkSteps(steps, queue) {
|
|
113
|
+
for (const step of steps) {
|
|
114
|
+
if (step.steps?.length)
|
|
115
|
+
this.walkSteps(step.steps, queue);
|
|
116
|
+
const snippet = queue.shift();
|
|
117
|
+
if (snippet)
|
|
118
|
+
step.snippet = snippet;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=reporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reporter.test.d.ts","sourceRoot":"","sources":["../src/reporter.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { test, expect } from '@playwright/test';
|
|
2
|
+
import { writeFileSync, mkdtempSync, rmSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import MobileNextUploadReporter from './reporter.js';
|
|
6
|
+
function suiteWithTests(count) {
|
|
7
|
+
return { allTests: () => new Array(count).fill({}) };
|
|
8
|
+
}
|
|
9
|
+
function makeTempResultsFile(content = '{}') {
|
|
10
|
+
const dir = mkdtempSync(join(tmpdir(), 'mw-reporter-test-'));
|
|
11
|
+
const filePath = join(dir, 'results.json');
|
|
12
|
+
writeFileSync(filePath, content);
|
|
13
|
+
return { path: filePath, cleanup: () => rmSync(dir, { recursive: true }) };
|
|
14
|
+
}
|
|
15
|
+
test('does not upload when uploadReport is on-failure and no tests failed', async () => {
|
|
16
|
+
let uploadCalled = false;
|
|
17
|
+
const spyUpload = async (_params) => {
|
|
18
|
+
uploadCalled = true;
|
|
19
|
+
return { url: 'file:///tmp/fake' };
|
|
20
|
+
};
|
|
21
|
+
const reporter = new MobileNextUploadReporter({
|
|
22
|
+
apiKey: 'key',
|
|
23
|
+
jsonResultsPath: '/tmp/results.json',
|
|
24
|
+
testResult: { uploadReport: 'on-failure' },
|
|
25
|
+
_uploadFn: spyUpload,
|
|
26
|
+
});
|
|
27
|
+
reporter.onBegin({}, suiteWithTests(1));
|
|
28
|
+
const endResult = await reporter.onEnd({ status: 'passed' });
|
|
29
|
+
expect(uploadCalled).toBe(false);
|
|
30
|
+
expect(endResult).toBeUndefined();
|
|
31
|
+
});
|
|
32
|
+
test('uploads when uploadReport is on-failure and a test failed', async () => {
|
|
33
|
+
const { path, cleanup } = makeTempResultsFile();
|
|
34
|
+
let uploadCalled = false;
|
|
35
|
+
const spyUpload = async (_params) => {
|
|
36
|
+
uploadCalled = true;
|
|
37
|
+
return { url: 'file:///tmp/fake' };
|
|
38
|
+
};
|
|
39
|
+
const reporter = new MobileNextUploadReporter({
|
|
40
|
+
apiKey: 'key',
|
|
41
|
+
jsonResultsPath: path,
|
|
42
|
+
testResult: { uploadReport: 'on-failure' },
|
|
43
|
+
_uploadFn: spyUpload,
|
|
44
|
+
});
|
|
45
|
+
reporter.onBegin({}, suiteWithTests(1));
|
|
46
|
+
reporter.onTestEnd({}, { status: 'failed' });
|
|
47
|
+
await reporter.onEnd({ status: 'failed' });
|
|
48
|
+
expect(uploadCalled).toBe(true);
|
|
49
|
+
cleanup();
|
|
50
|
+
});
|
|
51
|
+
test('uploads when uploadReport is on-failure and a test timed out', async () => {
|
|
52
|
+
const { path, cleanup } = makeTempResultsFile();
|
|
53
|
+
let uploadCalled = false;
|
|
54
|
+
const spyUpload = async (_params) => {
|
|
55
|
+
uploadCalled = true;
|
|
56
|
+
return { url: 'file:///tmp/fake' };
|
|
57
|
+
};
|
|
58
|
+
const reporter = new MobileNextUploadReporter({
|
|
59
|
+
apiKey: 'key',
|
|
60
|
+
jsonResultsPath: path,
|
|
61
|
+
testResult: { uploadReport: 'on-failure' },
|
|
62
|
+
_uploadFn: spyUpload,
|
|
63
|
+
});
|
|
64
|
+
reporter.onBegin({}, suiteWithTests(1));
|
|
65
|
+
reporter.onTestEnd({}, { status: 'timedOut' });
|
|
66
|
+
await reporter.onEnd({ status: 'failed' });
|
|
67
|
+
expect(uploadCalled).toBe(true);
|
|
68
|
+
cleanup();
|
|
69
|
+
});
|
|
70
|
+
test('uploads by default when uploadReport is not set', async () => {
|
|
71
|
+
const { path, cleanup } = makeTempResultsFile();
|
|
72
|
+
let uploadCalled = false;
|
|
73
|
+
const spyUpload = async (_params) => {
|
|
74
|
+
uploadCalled = true;
|
|
75
|
+
return { url: 'file:///tmp/fake' };
|
|
76
|
+
};
|
|
77
|
+
const reporter = new MobileNextUploadReporter({
|
|
78
|
+
apiKey: 'key',
|
|
79
|
+
jsonResultsPath: path,
|
|
80
|
+
testResult: {},
|
|
81
|
+
_uploadFn: spyUpload,
|
|
82
|
+
});
|
|
83
|
+
reporter.onBegin({}, suiteWithTests(1));
|
|
84
|
+
await reporter.onEnd({ status: 'passed' });
|
|
85
|
+
expect(uploadCalled).toBe(true);
|
|
86
|
+
cleanup();
|
|
87
|
+
});
|
|
88
|
+
test('always uploads when uploadReport is on regardless of test outcomes', async () => {
|
|
89
|
+
const { path, cleanup } = makeTempResultsFile();
|
|
90
|
+
let uploadCalled = false;
|
|
91
|
+
const spyUpload = async (_params) => {
|
|
92
|
+
uploadCalled = true;
|
|
93
|
+
return { url: 'file:///tmp/fake' };
|
|
94
|
+
};
|
|
95
|
+
const reporter = new MobileNextUploadReporter({
|
|
96
|
+
apiKey: 'key',
|
|
97
|
+
jsonResultsPath: path,
|
|
98
|
+
testResult: { uploadReport: 'on' },
|
|
99
|
+
_uploadFn: spyUpload,
|
|
100
|
+
});
|
|
101
|
+
reporter.onBegin({}, suiteWithTests(1));
|
|
102
|
+
await reporter.onEnd({ status: 'passed' });
|
|
103
|
+
expect(uploadCalled).toBe(true);
|
|
104
|
+
cleanup();
|
|
105
|
+
});
|
|
106
|
+
test('does not upload when uploadReport is off', async () => {
|
|
107
|
+
let uploadCalled = false;
|
|
108
|
+
const spyUpload = async (_params) => {
|
|
109
|
+
uploadCalled = true;
|
|
110
|
+
return { url: 'file:///tmp/fake' };
|
|
111
|
+
};
|
|
112
|
+
const reporter = new MobileNextUploadReporter({
|
|
113
|
+
apiKey: 'key',
|
|
114
|
+
jsonResultsPath: '/tmp/results.json',
|
|
115
|
+
testResult: { uploadReport: 'off' },
|
|
116
|
+
_uploadFn: spyUpload,
|
|
117
|
+
});
|
|
118
|
+
reporter.onBegin({}, suiteWithTests(1));
|
|
119
|
+
await reporter.onEnd({ status: 'passed' });
|
|
120
|
+
expect(uploadCalled).toBe(false);
|
|
121
|
+
});
|
|
122
|
+
test('does not upload when no tests were collected', async () => {
|
|
123
|
+
let uploadCalled = false;
|
|
124
|
+
const spyUpload = async (_params) => {
|
|
125
|
+
uploadCalled = true;
|
|
126
|
+
return { url: 'file:///tmp/fake' };
|
|
127
|
+
};
|
|
128
|
+
const reporter = new MobileNextUploadReporter({
|
|
129
|
+
apiKey: 'key',
|
|
130
|
+
jsonResultsPath: '/tmp/results.json',
|
|
131
|
+
testResult: { uploadReport: 'on' },
|
|
132
|
+
_uploadFn: spyUpload,
|
|
133
|
+
});
|
|
134
|
+
reporter.onBegin({}, suiteWithTests(0));
|
|
135
|
+
await reporter.onEnd({ status: 'failed' });
|
|
136
|
+
expect(uploadCalled).toBe(false);
|
|
137
|
+
});
|
|
138
|
+
test('does not upload when onBegin was never called', async () => {
|
|
139
|
+
let uploadCalled = false;
|
|
140
|
+
const spyUpload = async (_params) => {
|
|
141
|
+
uploadCalled = true;
|
|
142
|
+
return { url: 'file:///tmp/fake' };
|
|
143
|
+
};
|
|
144
|
+
const reporter = new MobileNextUploadReporter({
|
|
145
|
+
apiKey: 'key',
|
|
146
|
+
jsonResultsPath: '/tmp/results.json',
|
|
147
|
+
testResult: { uploadReport: 'on' },
|
|
148
|
+
_uploadFn: spyUpload,
|
|
149
|
+
});
|
|
150
|
+
await reporter.onEnd({ status: 'failed' });
|
|
151
|
+
expect(uploadCalled).toBe(false);
|
|
152
|
+
});
|
|
153
|
+
test('passes apiKey, name, tags, environment, report, and userAgent to upload function', async () => {
|
|
154
|
+
const reportContent = JSON.stringify({
|
|
155
|
+
suites: [],
|
|
156
|
+
config: {
|
|
157
|
+
metadata: {
|
|
158
|
+
gitCommit: {
|
|
159
|
+
hash: 'abc123def456',
|
|
160
|
+
subject: 'test: add upload reporter',
|
|
161
|
+
author: { name: 'Test Author', email: 'test@example.com', time: 1700000000 },
|
|
162
|
+
branch: 'main',
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
const { path, cleanup } = makeTempResultsFile(reportContent);
|
|
168
|
+
let capturedParams;
|
|
169
|
+
const spyUpload = async (params) => {
|
|
170
|
+
capturedParams = params;
|
|
171
|
+
return { url: 'file:///tmp/fake' };
|
|
172
|
+
};
|
|
173
|
+
const reporter = new MobileNextUploadReporter({
|
|
174
|
+
apiKey: 'my-secret-key',
|
|
175
|
+
jsonResultsPath: path,
|
|
176
|
+
testResult: {
|
|
177
|
+
uploadReport: 'on',
|
|
178
|
+
name: 'Nightly Suite',
|
|
179
|
+
tags: ['ci', 'nightly'],
|
|
180
|
+
environment: 'staging',
|
|
181
|
+
},
|
|
182
|
+
_uploadFn: spyUpload,
|
|
183
|
+
});
|
|
184
|
+
reporter.onBegin({}, suiteWithTests(1));
|
|
185
|
+
await reporter.onEnd({ status: 'passed' });
|
|
186
|
+
expect(capturedParams?.apiKey).toBe('my-secret-key');
|
|
187
|
+
expect(capturedParams?.name).toBe('Nightly Suite');
|
|
188
|
+
expect(capturedParams?.tags).toEqual(['ci', 'nightly']);
|
|
189
|
+
expect(capturedParams?.environment).toBe('staging');
|
|
190
|
+
expect(capturedParams?.userAgent).toMatch(/^mobilewright\//);
|
|
191
|
+
expect(capturedParams?.report).toEqual(JSON.parse(reportContent));
|
|
192
|
+
expect(capturedParams?.gitInfo).toEqual({
|
|
193
|
+
commitSha: 'abc123def456',
|
|
194
|
+
commitMessage: 'test: add upload reporter',
|
|
195
|
+
authorName: 'Test Author',
|
|
196
|
+
branch: 'main',
|
|
197
|
+
});
|
|
198
|
+
cleanup();
|
|
199
|
+
});
|
|
200
|
+
test('does not throw when upload function rejects', async () => {
|
|
201
|
+
const { path, cleanup } = makeTempResultsFile();
|
|
202
|
+
const failingUpload = async (_params) => {
|
|
203
|
+
throw new Error('network error');
|
|
204
|
+
};
|
|
205
|
+
const reporter = new MobileNextUploadReporter({
|
|
206
|
+
apiKey: 'key',
|
|
207
|
+
jsonResultsPath: path,
|
|
208
|
+
testResult: { uploadReport: 'on' },
|
|
209
|
+
_uploadFn: failingUpload,
|
|
210
|
+
});
|
|
211
|
+
reporter.onBegin({}, suiteWithTests(1));
|
|
212
|
+
await expect(reporter.onEnd({ status: 'passed' })).resolves.not.toThrow();
|
|
213
|
+
cleanup();
|
|
214
|
+
});
|
|
215
|
+
//# sourceMappingURL=reporter.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reporter.test.js","sourceRoot":"","sources":["../src/reporter.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,wBAAwB,MAAM,eAAe,CAAC;AAGrD,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAsB,CAAC;AAC3E,CAAC;AAED,SAAS,mBAAmB,CAAC,UAAkB,IAAI;IACjD,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC3C,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED,IAAI,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;IACrF,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,SAAS,GAAG,KAAK,EAAE,OAA+B,EAAE,EAAE;QAC1D,YAAY,GAAG,IAAI,CAAC;QACpB,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAAC;QAC5C,MAAM,EAAE,KAAK;QACb,eAAe,EAAE,mBAAmB;QACpC,UAAU,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE;QAC1C,SAAS,EAAE,SAAS;KACrB,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,CAAC,EAAgB,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAgB,CAAC,CAAC;IAC3E,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC;AACpC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;IAC3E,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,mBAAmB,EAAE,CAAC;IAChD,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,SAAS,GAAG,KAAK,EAAE,OAA+B,EAAE,EAAE;QAC1D,YAAY,GAAG,IAAI,CAAC;QACpB,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAAC;QAC5C,MAAM,EAAE,KAAK;QACb,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE;QAC1C,SAAS,EAAE,SAAS;KACrB,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,CAAC,EAAgB,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,SAAS,CAAC,EAAW,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAgB,CAAC,CAAC;IACpE,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAgB,CAAC,CAAC;IACzD,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;IAC9E,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,mBAAmB,EAAE,CAAC;IAChD,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,SAAS,GAAG,KAAK,EAAE,OAA+B,EAAE,EAAE;QAC1D,YAAY,GAAG,IAAI,CAAC;QACpB,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAAC;QAC5C,MAAM,EAAE,KAAK;QACb,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE;QAC1C,SAAS,EAAE,SAAS;KACrB,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,CAAC,EAAgB,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,SAAS,CAAC,EAAW,EAAE,EAAE,MAAM,EAAE,UAAU,EAAgB,CAAC,CAAC;IACtE,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAgB,CAAC,CAAC;IACzD,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;IACjE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,mBAAmB,EAAE,CAAC;IAChD,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,SAAS,GAAG,KAAK,EAAE,OAA+B,EAAE,EAAE;QAC1D,YAAY,GAAG,IAAI,CAAC;QACpB,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAAC;QAC5C,MAAM,EAAE,KAAK;QACb,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,SAAS;KACrB,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,CAAC,EAAgB,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAgB,CAAC,CAAC;IACzD,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;IACpF,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,mBAAmB,EAAE,CAAC;IAChD,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,SAAS,GAAG,KAAK,EAAE,OAA+B,EAAE,EAAE;QAC1D,YAAY,GAAG,IAAI,CAAC;QACpB,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAAC;QAC5C,MAAM,EAAE,KAAK;QACb,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QAClC,SAAS,EAAE,SAAS;KACrB,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,CAAC,EAAgB,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAgB,CAAC,CAAC;IACzD,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;IAC1D,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,SAAS,GAAG,KAAK,EAAE,OAA+B,EAAE,EAAE;QAC1D,YAAY,GAAG,IAAI,CAAC;QACpB,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAAC;QAC5C,MAAM,EAAE,KAAK;QACb,eAAe,EAAE,mBAAmB;QACpC,UAAU,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;QACnC,SAAS,EAAE,SAAS;KACrB,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,CAAC,EAAgB,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAgB,CAAC,CAAC;IACzD,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;IAC9D,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,SAAS,GAAG,KAAK,EAAE,OAA+B,EAAE,EAAE;QAC1D,YAAY,GAAG,IAAI,CAAC;QACpB,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAAC;QAC5C,MAAM,EAAE,KAAK;QACb,eAAe,EAAE,mBAAmB;QACpC,UAAU,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QAClC,SAAS,EAAE,SAAS;KACrB,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,CAAC,EAAgB,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAgB,CAAC,CAAC;IACzD,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;IAC/D,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,SAAS,GAAG,KAAK,EAAE,OAA+B,EAAE,EAAE;QAC1D,YAAY,GAAG,IAAI,CAAC;QACpB,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAAC;QAC5C,MAAM,EAAE,KAAK;QACb,eAAe,EAAE,mBAAmB;QACpC,UAAU,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QAClC,SAAS,EAAE,SAAS;KACrB,CAAC,CAAC;IAEH,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAgB,CAAC,CAAC;IACzD,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;IAClG,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC;QACnC,MAAM,EAAE,EAAE;QACV,MAAM,EAAE;YACN,QAAQ,EAAE;gBACR,SAAS,EAAE;oBACT,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE,2BAA2B;oBACpC,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,UAAU,EAAE;oBAC5E,MAAM,EAAE,MAAM;iBACf;aACF;SACF;KACF,CAAC,CAAC;IACH,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAC7D,IAAI,cAAkD,CAAC;IACvD,MAAM,SAAS,GAAG,KAAK,EAAE,MAA8B,EAAE,EAAE;QACzD,cAAc,GAAG,MAAM,CAAC;QACxB,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAAC;QAC5C,MAAM,EAAE,eAAe;QACvB,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE;YACV,YAAY,EAAE,IAAI;YAClB,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC;YACvB,WAAW,EAAE,SAAS;SACvB;QACD,SAAS,EAAE,SAAS;KACrB,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,CAAC,EAAgB,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAgB,CAAC,CAAC;IAEzD,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACrD,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACnD,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IACxD,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC7D,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;IAClE,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC;QACtC,SAAS,EAAE,cAAc;QACzB,aAAa,EAAE,2BAA2B;QAC1C,UAAU,EAAE,aAAa;QACzB,MAAM,EAAE,MAAM;KACf,CAAC,CAAC;IACH,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;IAC7D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,mBAAmB,EAAE,CAAC;IAChD,MAAM,aAAa,GAAG,KAAK,EAAE,OAA+B,EAA4B,EAAE;QACxF,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAAC;QAC5C,MAAM,EAAE,KAAK;QACb,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QAClC,SAAS,EAAE,aAAa;KACzB,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,CAAC,EAAgB,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACxF,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface GitInfo {
|
|
2
|
+
repoUrl?: string;
|
|
3
|
+
branch?: string;
|
|
4
|
+
commitSha?: string;
|
|
5
|
+
authorName?: string;
|
|
6
|
+
commitMessage?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function extractGitInfoFromReport(report: Record<string, unknown>): GitInfo | undefined;
|
|
9
|
+
export interface UploadTestResultParams {
|
|
10
|
+
apiKey: string;
|
|
11
|
+
report: Record<string, unknown>;
|
|
12
|
+
userAgent: string;
|
|
13
|
+
gitInfo?: GitInfo;
|
|
14
|
+
name?: string;
|
|
15
|
+
tags?: string[];
|
|
16
|
+
environment?: string;
|
|
17
|
+
/** Timeout for the entire upload operation in ms. */
|
|
18
|
+
timeout?: number;
|
|
19
|
+
_fetchFn?: typeof fetch;
|
|
20
|
+
}
|
|
21
|
+
export declare function uploadTestResult(params: UploadTestResultParams): Promise<{
|
|
22
|
+
url: string;
|
|
23
|
+
}>;
|
|
24
|
+
//# sourceMappingURL=upload-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-client.d.ts","sourceRoot":"","sources":["../src/upload-client.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,OAAO;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,GAAG,SAAS,CAkB7F;AAOD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,KAAK,CAAC;CACzB;AAwFD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAmE/F"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import createDebug from 'debug';
|
|
3
|
+
export function extractGitInfoFromReport(report) {
|
|
4
|
+
const config = report['config'];
|
|
5
|
+
const metadata = config?.['metadata'];
|
|
6
|
+
const gitCommit = metadata?.['gitCommit'];
|
|
7
|
+
if (!gitCommit) {
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
const author = gitCommit['author'];
|
|
11
|
+
const result = {
|
|
12
|
+
commitSha: gitCommit['hash'],
|
|
13
|
+
commitMessage: gitCommit['subject'],
|
|
14
|
+
authorName: author?.['name'],
|
|
15
|
+
branch: gitCommit['branch'],
|
|
16
|
+
};
|
|
17
|
+
const hasAnyField = Object.values(result).some(v => v !== undefined);
|
|
18
|
+
return hasAnyField ? result : undefined;
|
|
19
|
+
}
|
|
20
|
+
const debug = createDebug('mw:reporter:upload');
|
|
21
|
+
const BASE_URL = 'https://api.mobilenext.ai';
|
|
22
|
+
const DASHBOARD_BASE_URL = 'https://app.mobilenext.ai';
|
|
23
|
+
const CONTENT_TYPE_EXTENSIONS = {
|
|
24
|
+
'image/png': 'png',
|
|
25
|
+
'image/jpeg': 'jpg',
|
|
26
|
+
'image/webp': 'webp',
|
|
27
|
+
'image/gif': 'gif',
|
|
28
|
+
};
|
|
29
|
+
function extensionForContentType(contentType) {
|
|
30
|
+
return CONTENT_TYPE_EXTENSIONS[contentType] ?? 'bin';
|
|
31
|
+
}
|
|
32
|
+
function makeAttachmentUploader(testResultId, apiKey, fetchFn, signal) {
|
|
33
|
+
async function uploadAndReplace(obj) {
|
|
34
|
+
if (!obj || typeof obj !== 'object') {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (Array.isArray(obj)) {
|
|
38
|
+
for (const item of obj) {
|
|
39
|
+
await uploadAndReplace(item);
|
|
40
|
+
}
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const record = obj;
|
|
44
|
+
if (Array.isArray(record['attachments'])) {
|
|
45
|
+
for (const att of record['attachments']) {
|
|
46
|
+
if (typeof att['body'] === 'string') {
|
|
47
|
+
const contentType = typeof att['contentType'] === 'string' ? att['contentType'] : 'application/octet-stream';
|
|
48
|
+
const ext = extensionForContentType(contentType);
|
|
49
|
+
const assetName = `${randomUUID()}.${ext}`;
|
|
50
|
+
const buffer = Buffer.from(att['body'], 'base64');
|
|
51
|
+
const sizeKB = (buffer.length / 1024).toFixed(1);
|
|
52
|
+
debug('uploading attachment name=%s contentType=%s size=%skB as %s', att['name'], contentType, sizeKB, assetName);
|
|
53
|
+
const form = new FormData();
|
|
54
|
+
form.append('name', assetName);
|
|
55
|
+
form.append('file', new Blob([buffer], { type: contentType }), assetName);
|
|
56
|
+
const res = await fetchFn(`${BASE_URL}/api/v1/test-results/${testResultId}/assets`, {
|
|
57
|
+
method: 'POST',
|
|
58
|
+
headers: { 'Authorization': `Bearer ${apiKey}` },
|
|
59
|
+
body: form,
|
|
60
|
+
...(signal && { signal }),
|
|
61
|
+
});
|
|
62
|
+
if (!res.ok) {
|
|
63
|
+
const body = await res.text().catch(() => '');
|
|
64
|
+
debug('upload attachment failed status=%d body=%s', res.status, body);
|
|
65
|
+
throw new Error(`Failed to upload attachment "${att['name']}": ${res.status}${body ? ` — ${body}` : ''}`);
|
|
66
|
+
}
|
|
67
|
+
const asset = await res.json();
|
|
68
|
+
delete att['body'];
|
|
69
|
+
att['assetId'] = asset.id;
|
|
70
|
+
debug('attachment uploaded assetId=%s', asset.id);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
for (const value of Object.values(record)) {
|
|
75
|
+
await uploadAndReplace(value);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return uploadAndReplace;
|
|
79
|
+
}
|
|
80
|
+
export async function uploadTestResult(params) {
|
|
81
|
+
const fetchFn = params._fetchFn ?? fetch;
|
|
82
|
+
const signal = params.timeout ? AbortSignal.timeout(params.timeout) : undefined;
|
|
83
|
+
const hasGitInfo = params.gitInfo !== undefined && Object.values(params.gitInfo).some(v => v !== undefined);
|
|
84
|
+
const stats = params.report['stats'];
|
|
85
|
+
debug('creating test result name=%s userAgent=%s', params.name ?? 'Test Run', params.userAgent);
|
|
86
|
+
const createRes = await fetchFn(`${BASE_URL}/api/v1/test-results`, {
|
|
87
|
+
method: 'POST',
|
|
88
|
+
headers: {
|
|
89
|
+
'Authorization': `Bearer ${params.apiKey}`,
|
|
90
|
+
'Content-Type': 'application/json',
|
|
91
|
+
},
|
|
92
|
+
body: JSON.stringify({
|
|
93
|
+
name: params.name ?? 'Test Run',
|
|
94
|
+
userAgent: params.userAgent,
|
|
95
|
+
...(hasGitInfo ? { git: params.gitInfo } : {}),
|
|
96
|
+
...(params.tags?.length ? { tags: params.tags } : {}),
|
|
97
|
+
...(params.environment ? { environment: params.environment } : {}),
|
|
98
|
+
...(stats !== undefined ? { stats } : {}),
|
|
99
|
+
}),
|
|
100
|
+
...(signal && { signal }),
|
|
101
|
+
});
|
|
102
|
+
if (!createRes.ok) {
|
|
103
|
+
const body = await createRes.text().catch(() => '');
|
|
104
|
+
debug('create test result failed status=%d body=%s', createRes.status, body);
|
|
105
|
+
throw new Error(`Failed to create test result: ${createRes.status}${body ? ` — ${body}` : ''}`);
|
|
106
|
+
}
|
|
107
|
+
const testResult = await createRes.json();
|
|
108
|
+
debug('test result created id=%s', testResult.id);
|
|
109
|
+
// Deep-clone so attachment body replacement does not mutate the caller's object
|
|
110
|
+
const report = JSON.parse(JSON.stringify(params.report));
|
|
111
|
+
const uploadAndReplace = makeAttachmentUploader(testResult.id, params.apiKey, fetchFn, signal);
|
|
112
|
+
await uploadAndReplace(report);
|
|
113
|
+
const modifiedJson = JSON.stringify(report);
|
|
114
|
+
const modifiedBuffer = Buffer.from(modifiedJson);
|
|
115
|
+
const fileSizeKB = (modifiedBuffer.length / 1024).toFixed(1);
|
|
116
|
+
debug('uploading report.json size=%skB', fileSizeKB);
|
|
117
|
+
const form = new FormData();
|
|
118
|
+
form.append('name', 'report.json');
|
|
119
|
+
form.append('file', new Blob([modifiedBuffer], { type: 'application/json' }), 'report.json');
|
|
120
|
+
const progressTimer = setInterval(() => {
|
|
121
|
+
debug('still uploading report.json...');
|
|
122
|
+
}, 10_000);
|
|
123
|
+
const uploadRes = await fetchFn(`${BASE_URL}/api/v1/test-results/${testResult.id}/assets`, {
|
|
124
|
+
method: 'POST',
|
|
125
|
+
headers: { 'Authorization': `Bearer ${params.apiKey}` },
|
|
126
|
+
body: form,
|
|
127
|
+
...(signal && { signal }),
|
|
128
|
+
}).finally(() => clearInterval(progressTimer));
|
|
129
|
+
if (!uploadRes.ok) {
|
|
130
|
+
const body = await uploadRes.text().catch(() => '');
|
|
131
|
+
debug('upload report.json failed status=%d body=%s', uploadRes.status, body);
|
|
132
|
+
throw new Error(`Failed to upload report.json: ${uploadRes.status}${body ? ` — ${body}` : ''}`);
|
|
133
|
+
}
|
|
134
|
+
debug('upload complete url=%s', `${DASHBOARD_BASE_URL}/dashboard/test-results/${testResult.id}`);
|
|
135
|
+
return { url: `${DASHBOARD_BASE_URL}/dashboard/test-results/${testResult.id}` };
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=upload-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-client.js","sourceRoot":"","sources":["../src/upload-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-client.test.d.ts","sourceRoot":"","sources":["../src/upload-client.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { test, expect } from '@playwright/test';
|
|
2
|
+
import { uploadTestResult, extractGitInfoFromReport } from './upload-client.js';
|
|
3
|
+
function makeMockFetch(testResultId) {
|
|
4
|
+
const calls = [];
|
|
5
|
+
const mockFetch = async (url, init) => {
|
|
6
|
+
const urlStr = String(url);
|
|
7
|
+
const headers = (init?.headers ?? {});
|
|
8
|
+
calls.push({ url: urlStr, method: init?.method ?? 'GET', headers, body: init?.body });
|
|
9
|
+
if (urlStr.endsWith('/test-results')) {
|
|
10
|
+
return new Response(JSON.stringify({ id: testResultId, name: 'Test Run', userAgent: 'mobilewright/0.0.1', createdAt: '2026-01-01T00:00:00Z' }), { status: 201 });
|
|
11
|
+
}
|
|
12
|
+
return new Response(JSON.stringify({ id: 'asset-1', name: 'report.json', contentType: 'application/json', size: 12, createdAt: '2026-01-01T00:00:00Z' }), { status: 201 });
|
|
13
|
+
};
|
|
14
|
+
return { mockFetch: mockFetch, calls };
|
|
15
|
+
}
|
|
16
|
+
test('sends POST to test-results endpoint with apiKey, name, and userAgent', async () => {
|
|
17
|
+
const { mockFetch, calls } = makeMockFetch('result-abc');
|
|
18
|
+
await uploadTestResult({
|
|
19
|
+
apiKey: 'mob_test_key',
|
|
20
|
+
report: { tests: [] },
|
|
21
|
+
userAgent: 'mobilewright/1.2.3',
|
|
22
|
+
_fetchFn: mockFetch,
|
|
23
|
+
});
|
|
24
|
+
const createCall = calls.find(c => c.url === 'https://api.mobilenext.ai/api/v1/test-results');
|
|
25
|
+
expect(createCall?.method).toBe('POST');
|
|
26
|
+
const body = JSON.parse(createCall?.body);
|
|
27
|
+
expect(body.name).toBe('Test Run');
|
|
28
|
+
expect(body.userAgent).toBe('mobilewright/1.2.3');
|
|
29
|
+
expect(createCall?.headers['Authorization']).toBe('Bearer mob_test_key');
|
|
30
|
+
expect(createCall?.headers['Content-Type']).toBe('application/json');
|
|
31
|
+
});
|
|
32
|
+
test('uses provided name in the create test result request', async () => {
|
|
33
|
+
const { mockFetch, calls } = makeMockFetch('result-abc');
|
|
34
|
+
await uploadTestResult({
|
|
35
|
+
apiKey: 'mob_key',
|
|
36
|
+
report: {},
|
|
37
|
+
userAgent: 'mobilewright/test',
|
|
38
|
+
name: 'Nightly Suite',
|
|
39
|
+
_fetchFn: mockFetch,
|
|
40
|
+
});
|
|
41
|
+
const createCall = calls.find(c => c.url === 'https://api.mobilenext.ai/api/v1/test-results');
|
|
42
|
+
const body = JSON.parse(createCall?.body);
|
|
43
|
+
expect(body.name).toBe('Nightly Suite');
|
|
44
|
+
});
|
|
45
|
+
test('uploads report.json as multipart FormData to the asset endpoint', async () => {
|
|
46
|
+
const { mockFetch, calls } = makeMockFetch('result-abc');
|
|
47
|
+
await uploadTestResult({
|
|
48
|
+
apiKey: 'mob_test_key',
|
|
49
|
+
report: { tests: [] },
|
|
50
|
+
userAgent: 'mobilewright/test',
|
|
51
|
+
_fetchFn: mockFetch,
|
|
52
|
+
});
|
|
53
|
+
const assetCall = calls.find(c => c.url.includes('/assets'));
|
|
54
|
+
expect(assetCall?.url).toBe('https://api.mobilenext.ai/api/v1/test-results/result-abc/assets');
|
|
55
|
+
expect(assetCall?.method).toBe('POST');
|
|
56
|
+
expect(assetCall?.body).toBeInstanceOf(FormData);
|
|
57
|
+
expect(assetCall?.headers['Authorization']).toBe('Bearer mob_test_key');
|
|
58
|
+
});
|
|
59
|
+
test('returns the dashboard URL for the created test result', async () => {
|
|
60
|
+
const { mockFetch } = makeMockFetch('my-test-id-123');
|
|
61
|
+
const result = await uploadTestResult({
|
|
62
|
+
apiKey: 'mob_key',
|
|
63
|
+
report: {},
|
|
64
|
+
userAgent: 'mobilewright/test',
|
|
65
|
+
_fetchFn: mockFetch,
|
|
66
|
+
});
|
|
67
|
+
expect(result.url).toBe('https://app.mobilenext.ai/dashboard/test-results/my-test-id-123');
|
|
68
|
+
});
|
|
69
|
+
test('includes git metadata in the create request when gitInfo is provided', async () => {
|
|
70
|
+
const { mockFetch, calls } = makeMockFetch('result-abc');
|
|
71
|
+
await uploadTestResult({
|
|
72
|
+
apiKey: 'mob_key',
|
|
73
|
+
report: {},
|
|
74
|
+
userAgent: 'mobilewright/test',
|
|
75
|
+
gitInfo: { branch: 'main', commitSha: 'abc123', authorName: 'alice' },
|
|
76
|
+
_fetchFn: mockFetch,
|
|
77
|
+
});
|
|
78
|
+
const createCall = calls.find(c => c.url.endsWith('/test-results'));
|
|
79
|
+
const body = JSON.parse(createCall?.body);
|
|
80
|
+
expect(body.git.branch).toBe('main');
|
|
81
|
+
expect(body.git.commitSha).toBe('abc123');
|
|
82
|
+
expect(body.git.authorName).toBe('alice');
|
|
83
|
+
});
|
|
84
|
+
test('omits git field when gitInfo is undefined', async () => {
|
|
85
|
+
const { mockFetch, calls } = makeMockFetch('result-abc');
|
|
86
|
+
await uploadTestResult({
|
|
87
|
+
apiKey: 'mob_key',
|
|
88
|
+
report: {},
|
|
89
|
+
userAgent: 'mobilewright/test',
|
|
90
|
+
_fetchFn: mockFetch,
|
|
91
|
+
});
|
|
92
|
+
const createCall = calls.find(c => c.url.endsWith('/test-results'));
|
|
93
|
+
const body = JSON.parse(createCall?.body);
|
|
94
|
+
expect(body.git).toBeUndefined();
|
|
95
|
+
});
|
|
96
|
+
test('includes tags, environment, and stats in the create request', async () => {
|
|
97
|
+
const { mockFetch, calls } = makeMockFetch('result-abc');
|
|
98
|
+
const stats = { startTime: '2026-01-01T00:00:00Z', duration: 5000, expected: 3, skipped: 1, unexpected: 0, flaky: 0 };
|
|
99
|
+
await uploadTestResult({
|
|
100
|
+
apiKey: 'mob_key',
|
|
101
|
+
report: { stats },
|
|
102
|
+
userAgent: 'mobilewright/test',
|
|
103
|
+
tags: ['ci', 'nightly'],
|
|
104
|
+
environment: 'staging',
|
|
105
|
+
_fetchFn: mockFetch,
|
|
106
|
+
});
|
|
107
|
+
const createCall = calls.find(c => c.url.endsWith('/test-results'));
|
|
108
|
+
const body = JSON.parse(createCall?.body);
|
|
109
|
+
expect(body.tags).toEqual(['ci', 'nightly']);
|
|
110
|
+
expect(body.environment).toBe('staging');
|
|
111
|
+
expect(body.stats).toEqual(stats);
|
|
112
|
+
});
|
|
113
|
+
test('omits tags, environment, and stats when not present', async () => {
|
|
114
|
+
const { mockFetch, calls } = makeMockFetch('result-abc');
|
|
115
|
+
await uploadTestResult({
|
|
116
|
+
apiKey: 'mob_key',
|
|
117
|
+
report: {},
|
|
118
|
+
userAgent: 'mobilewright/test',
|
|
119
|
+
_fetchFn: mockFetch,
|
|
120
|
+
});
|
|
121
|
+
const createCall = calls.find(c => c.url.endsWith('/test-results'));
|
|
122
|
+
const body = JSON.parse(createCall?.body);
|
|
123
|
+
expect(body.tags).toBeUndefined();
|
|
124
|
+
expect(body.environment).toBeUndefined();
|
|
125
|
+
expect(body.stats).toBeUndefined();
|
|
126
|
+
});
|
|
127
|
+
test('throws when create test result API returns a non-2xx status', async () => {
|
|
128
|
+
const failingFetch = async (_url, _init) => new Response(JSON.stringify({ error: 'Unauthorized' }), { status: 401 });
|
|
129
|
+
await expect(uploadTestResult({
|
|
130
|
+
apiKey: 'bad-key',
|
|
131
|
+
report: {},
|
|
132
|
+
userAgent: 'mobilewright/test',
|
|
133
|
+
_fetchFn: failingFetch,
|
|
134
|
+
})).rejects.toThrow('401');
|
|
135
|
+
});
|
|
136
|
+
test('throws when asset upload API returns a non-2xx status', async () => {
|
|
137
|
+
const mockFetch = async (url, _init) => {
|
|
138
|
+
if (String(url).endsWith('/test-results')) {
|
|
139
|
+
return new Response(JSON.stringify({ id: 'result-abc', name: 'Test Run', userAgent: 'mobilewright/0.0.1', createdAt: '2026-01-01T00:00:00Z' }), { status: 201 });
|
|
140
|
+
}
|
|
141
|
+
return new Response(JSON.stringify({ error: 'Server Error' }), { status: 500 });
|
|
142
|
+
};
|
|
143
|
+
await expect(uploadTestResult({
|
|
144
|
+
apiKey: 'mob_key',
|
|
145
|
+
report: {},
|
|
146
|
+
userAgent: 'mobilewright/test',
|
|
147
|
+
_fetchFn: mockFetch,
|
|
148
|
+
})).rejects.toThrow('500');
|
|
149
|
+
});
|
|
150
|
+
test('uploads inline attachment bodies as separate assets before report.json', async () => {
|
|
151
|
+
const pngBase64 = Buffer.from('fake-png-data').toString('base64');
|
|
152
|
+
const report = {
|
|
153
|
+
suites: [{ specs: [{ tests: [{ results: [{ attachments: [
|
|
154
|
+
{ name: 'screenshot', contentType: 'image/png', body: pngBase64 },
|
|
155
|
+
] }] }] }] }],
|
|
156
|
+
};
|
|
157
|
+
let assetCallCount = 0;
|
|
158
|
+
const mockFetch = async (url, init) => {
|
|
159
|
+
const urlStr = String(url);
|
|
160
|
+
if (urlStr.endsWith('/test-results')) {
|
|
161
|
+
return new Response(JSON.stringify({ id: 'result-abc', name: 'Test Run', userAgent: 'mobilewright/0.0.1', createdAt: '2026-01-01T00:00:00Z' }), { status: 201 });
|
|
162
|
+
}
|
|
163
|
+
assetCallCount++;
|
|
164
|
+
return new Response(JSON.stringify({ id: `asset-${assetCallCount}`, name: 'x', contentType: 'image/png', size: 10, createdAt: '2026-01-01T00:00:00Z' }), { status: 201 });
|
|
165
|
+
};
|
|
166
|
+
await uploadTestResult({
|
|
167
|
+
apiKey: 'mob_key',
|
|
168
|
+
report,
|
|
169
|
+
userAgent: 'mobilewright/test',
|
|
170
|
+
_fetchFn: mockFetch,
|
|
171
|
+
});
|
|
172
|
+
// 2 asset calls: one for the PNG attachment, one for report.json
|
|
173
|
+
expect(assetCallCount).toBe(2);
|
|
174
|
+
});
|
|
175
|
+
test('removes body and sets assetId in the uploaded report.json', async () => {
|
|
176
|
+
const pngBase64 = Buffer.from('fake-png-data').toString('base64');
|
|
177
|
+
const report = {
|
|
178
|
+
suites: [{ specs: [{ tests: [{ results: [{ attachments: [
|
|
179
|
+
{ name: 'screenshot', contentType: 'image/png', body: pngBase64 },
|
|
180
|
+
] }] }] }] }],
|
|
181
|
+
};
|
|
182
|
+
let assetCallCount = 0;
|
|
183
|
+
let capturedReportForm;
|
|
184
|
+
const mockFetch = async (url, init) => {
|
|
185
|
+
const urlStr = String(url);
|
|
186
|
+
if (urlStr.endsWith('/test-results')) {
|
|
187
|
+
return new Response(JSON.stringify({ id: 'result-abc', name: 'Test Run', userAgent: 'mobilewright/0.0.1', createdAt: '2026-01-01T00:00:00Z' }), { status: 201 });
|
|
188
|
+
}
|
|
189
|
+
assetCallCount++;
|
|
190
|
+
if (assetCallCount === 2) {
|
|
191
|
+
capturedReportForm = init?.body;
|
|
192
|
+
}
|
|
193
|
+
return new Response(JSON.stringify({ id: `asset-${assetCallCount}`, name: 'x', contentType: 'image/png', size: 10, createdAt: '2026-01-01T00:00:00Z' }), { status: 201 });
|
|
194
|
+
};
|
|
195
|
+
await uploadTestResult({
|
|
196
|
+
apiKey: 'mob_key',
|
|
197
|
+
report,
|
|
198
|
+
userAgent: 'mobilewright/test',
|
|
199
|
+
_fetchFn: mockFetch,
|
|
200
|
+
});
|
|
201
|
+
const reportFile = capturedReportForm?.get('file');
|
|
202
|
+
const parsedReport = JSON.parse(await reportFile.text());
|
|
203
|
+
const att = parsedReport.suites[0].specs[0].tests[0].results[0].attachments[0];
|
|
204
|
+
expect(att['body']).toBeUndefined();
|
|
205
|
+
expect(att['assetId']).toBe('asset-1');
|
|
206
|
+
});
|
|
207
|
+
test('does not modify the caller\'s report object', async () => {
|
|
208
|
+
const pngBase64 = Buffer.from('fake-png-data').toString('base64');
|
|
209
|
+
const report = {
|
|
210
|
+
suites: [{ specs: [{ tests: [{ results: [{ attachments: [
|
|
211
|
+
{ name: 'screenshot', contentType: 'image/png', body: pngBase64 },
|
|
212
|
+
] }] }] }] }],
|
|
213
|
+
};
|
|
214
|
+
const { mockFetch } = makeMockFetch('result-abc');
|
|
215
|
+
await uploadTestResult({
|
|
216
|
+
apiKey: 'mob_key',
|
|
217
|
+
report,
|
|
218
|
+
userAgent: 'mobilewright/test',
|
|
219
|
+
_fetchFn: mockFetch,
|
|
220
|
+
});
|
|
221
|
+
expect(report.suites[0].specs[0].tests[0].results[0].attachments[0].body).toBe(pngBase64);
|
|
222
|
+
});
|
|
223
|
+
test('leaves path-based attachments unchanged', async () => {
|
|
224
|
+
const report = {
|
|
225
|
+
suites: [{ specs: [{ tests: [{ results: [{ attachments: [
|
|
226
|
+
{ name: 'video', contentType: 'video/mp4', path: '/some/path/video.mp4' },
|
|
227
|
+
] }] }] }] }],
|
|
228
|
+
};
|
|
229
|
+
let assetCallCount = 0;
|
|
230
|
+
const mockFetch = async (url, _init) => {
|
|
231
|
+
if (String(url).endsWith('/test-results')) {
|
|
232
|
+
return new Response(JSON.stringify({ id: 'result-abc', name: 'Test Run', userAgent: 'mobilewright/0.0.1', createdAt: '2026-01-01T00:00:00Z' }), { status: 201 });
|
|
233
|
+
}
|
|
234
|
+
assetCallCount++;
|
|
235
|
+
return new Response(JSON.stringify({ id: 'asset-1', name: 'report.json', contentType: 'application/json', size: 10, createdAt: '2026-01-01T00:00:00Z' }), { status: 201 });
|
|
236
|
+
};
|
|
237
|
+
await uploadTestResult({
|
|
238
|
+
apiKey: 'mob_key',
|
|
239
|
+
report,
|
|
240
|
+
userAgent: 'mobilewright/test',
|
|
241
|
+
_fetchFn: mockFetch,
|
|
242
|
+
});
|
|
243
|
+
// Only 1 asset call: just report.json (no upload for path-based attachments)
|
|
244
|
+
expect(assetCallCount).toBe(1);
|
|
245
|
+
});
|
|
246
|
+
test('uploadTestResult rejects when timeout is exceeded', async () => {
|
|
247
|
+
const slowFetch = (_url, init) => {
|
|
248
|
+
const signal = init?.signal;
|
|
249
|
+
return new Promise((resolve, reject) => {
|
|
250
|
+
if (signal?.aborted) {
|
|
251
|
+
reject(signal.reason);
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
const timer = setTimeout(() => resolve(new Response('{}', { status: 200 })), 500);
|
|
255
|
+
signal?.addEventListener('abort', () => { clearTimeout(timer); reject(signal.reason); });
|
|
256
|
+
});
|
|
257
|
+
};
|
|
258
|
+
await expect(uploadTestResult({
|
|
259
|
+
apiKey: 'key',
|
|
260
|
+
report: {},
|
|
261
|
+
userAgent: 'test/1.0',
|
|
262
|
+
timeout: 50,
|
|
263
|
+
_fetchFn: slowFetch,
|
|
264
|
+
})).rejects.toThrow();
|
|
265
|
+
});
|
|
266
|
+
test('extractGitInfoFromReport returns undefined when report has no gitCommit metadata', () => {
|
|
267
|
+
expect(extractGitInfoFromReport({})).toBeUndefined();
|
|
268
|
+
expect(extractGitInfoFromReport({ config: {} })).toBeUndefined();
|
|
269
|
+
expect(extractGitInfoFromReport({ config: { metadata: {} } })).toBeUndefined();
|
|
270
|
+
});
|
|
271
|
+
test('extractGitInfoFromReport maps Playwright gitCommit fields to GitInfo fields', () => {
|
|
272
|
+
const report = {
|
|
273
|
+
config: {
|
|
274
|
+
metadata: {
|
|
275
|
+
gitCommit: {
|
|
276
|
+
hash: 'abc123def456',
|
|
277
|
+
subject: 'feat: add git support',
|
|
278
|
+
author: { name: 'Alice', email: 'alice@example.com', time: 1700000000 },
|
|
279
|
+
branch: 'main',
|
|
280
|
+
},
|
|
281
|
+
},
|
|
282
|
+
},
|
|
283
|
+
};
|
|
284
|
+
const result = extractGitInfoFromReport(report);
|
|
285
|
+
expect(result?.commitSha).toBe('abc123def456');
|
|
286
|
+
expect(result?.commitMessage).toBe('feat: add git support');
|
|
287
|
+
expect(result?.authorName).toBe('Alice');
|
|
288
|
+
expect(result?.branch).toBe('main');
|
|
289
|
+
});
|
|
290
|
+
test('extractGitInfoFromReport returns undefined when gitCommit has no recognizable fields', () => {
|
|
291
|
+
const report = { config: { metadata: { gitCommit: {} } } };
|
|
292
|
+
expect(extractGitInfoFromReport(report)).toBeUndefined();
|
|
293
|
+
});
|
|
294
|
+
//# sourceMappingURL=upload-client.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-client.test.js","sourceRoot":"","sources":["../src/upload-client.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mobilewright/driver-mobilenext",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.42",
|
|
4
4
|
"description": "MobileNext driver for Mobilewright",
|
|
5
5
|
"homepage": "https://mobilewright.dev",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -14,6 +14,10 @@
|
|
|
14
14
|
".": {
|
|
15
15
|
"types": "./dist/index.d.ts",
|
|
16
16
|
"default": "./dist/index.js"
|
|
17
|
+
},
|
|
18
|
+
"./reporter": {
|
|
19
|
+
"types": "./dist/reporter.d.ts",
|
|
20
|
+
"default": "./dist/reporter.js"
|
|
17
21
|
}
|
|
18
22
|
},
|
|
19
23
|
"scripts": {
|
|
@@ -29,7 +33,7 @@
|
|
|
29
33
|
"dist"
|
|
30
34
|
],
|
|
31
35
|
"dependencies": {
|
|
32
|
-
"@mobilewright/protocol": "^0.0.
|
|
36
|
+
"@mobilewright/protocol": "^0.0.42",
|
|
33
37
|
"debug": "^4.4.3",
|
|
34
38
|
"ws": "^8.18.0"
|
|
35
39
|
},
|