@desplega.ai/qa-use 2.2.2 → 2.2.4
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/lib/api/browser-types.d.ts +62 -3
- package/dist/lib/api/browser-types.d.ts.map +1 -1
- package/dist/lib/api/browser.d.ts +23 -2
- package/dist/lib/api/browser.d.ts.map +1 -1
- package/dist/lib/api/browser.js +68 -0
- package/dist/lib/api/browser.js.map +1 -1
- package/dist/lib/browser/index.d.ts +10 -0
- package/dist/lib/browser/index.d.ts.map +1 -1
- package/dist/lib/browser/index.js +29 -0
- package/dist/lib/browser/index.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/src/cli/commands/browser/create.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/create.js +3 -0
- package/dist/src/cli/commands/browser/create.js.map +1 -1
- package/dist/src/cli/commands/browser/generate-test.d.ts +6 -0
- package/dist/src/cli/commands/browser/generate-test.d.ts.map +1 -0
- package/dist/src/cli/commands/browser/generate-test.js +46 -0
- package/dist/src/cli/commands/browser/generate-test.js.map +1 -0
- package/dist/src/cli/commands/browser/index.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/index.js +4 -0
- package/dist/src/cli/commands/browser/index.js.map +1 -1
- package/dist/src/cli/commands/browser/logs.d.ts +6 -0
- package/dist/src/cli/commands/browser/logs.d.ts.map +1 -0
- package/dist/src/cli/commands/browser/logs.js +95 -0
- package/dist/src/cli/commands/browser/logs.js.map +1 -0
- package/dist/src/cli/commands/browser/run.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/run.js +69 -1
- package/dist/src/cli/commands/browser/run.js.map +1 -1
- package/dist/src/cli/commands/browser/status.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/status.js +23 -0
- package/dist/src/cli/commands/browser/status.js.map +1 -1
- package/dist/src/cli/commands/info.d.ts +1 -1
- package/dist/src/cli/commands/info.d.ts.map +1 -1
- package/dist/src/cli/commands/info.js +178 -15
- package/dist/src/cli/commands/info.js.map +1 -1
- package/dist/src/cli/commands/install-deps.d.ts +6 -0
- package/dist/src/cli/commands/install-deps.d.ts.map +1 -0
- package/dist/src/cli/commands/install-deps.js +52 -0
- package/dist/src/cli/commands/install-deps.js.map +1 -0
- package/dist/src/cli/commands/test/run.d.ts.map +1 -1
- package/dist/src/cli/commands/test/run.js +7 -13
- package/dist/src/cli/commands/test/run.js.map +1 -1
- package/dist/src/cli/index.js +2 -0
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/lib/browser.d.ts +5 -0
- package/dist/src/cli/lib/browser.d.ts.map +1 -1
- package/dist/src/cli/lib/browser.js +19 -0
- package/dist/src/cli/lib/browser.js.map +1 -1
- package/dist/src/cli/lib/config.d.ts.map +1 -1
- package/dist/src/cli/lib/config.js +3 -0
- package/dist/src/cli/lib/config.js.map +1 -1
- package/lib/api/browser-types.ts +85 -0
- package/lib/api/browser.test.ts +163 -0
- package/lib/api/browser.ts +89 -0
- package/lib/browser/index.ts +37 -0
- package/package.json +1 -1
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* qa-use install-deps - Install Playwright browser dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { Command } from 'commander';
|
|
5
|
+
import { BrowserManager } from '../../../lib/browser/index.js';
|
|
6
|
+
import { success, error, info } from '../lib/output.js';
|
|
7
|
+
export const installDepsCommand = new Command('install-deps')
|
|
8
|
+
.description('Install Playwright browser dependencies (Chromium)')
|
|
9
|
+
.option('--force', 'Force reinstall even if browsers are already installed')
|
|
10
|
+
.action(async (options) => {
|
|
11
|
+
const browser = new BrowserManager();
|
|
12
|
+
// Check current installation status unless --force
|
|
13
|
+
if (!options.force) {
|
|
14
|
+
const status = browser.checkBrowsersInstalled();
|
|
15
|
+
if (status.installed) {
|
|
16
|
+
console.log(success('Playwright browsers are already installed'));
|
|
17
|
+
console.log(` Path: ${status.executablePath}`);
|
|
18
|
+
console.log('');
|
|
19
|
+
console.log(info('Use --force to reinstall'));
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
console.log(info('Installing Playwright Chromium browser...'));
|
|
24
|
+
console.log('');
|
|
25
|
+
try {
|
|
26
|
+
await browser.installPlaywrightBrowsers();
|
|
27
|
+
// Verify installation
|
|
28
|
+
const status = browser.checkBrowsersInstalled();
|
|
29
|
+
if (status.installed) {
|
|
30
|
+
console.log('');
|
|
31
|
+
console.log(success('Playwright browsers installed successfully'));
|
|
32
|
+
console.log(` Path: ${status.executablePath}`);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
console.log('');
|
|
36
|
+
console.log(error('Installation verification failed'));
|
|
37
|
+
if (status.error) {
|
|
38
|
+
console.log(` ${status.error}`);
|
|
39
|
+
}
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
console.log('');
|
|
45
|
+
console.log(error('Failed to install Playwright browsers'));
|
|
46
|
+
if (err instanceof Error) {
|
|
47
|
+
console.log(` ${err.message}`);
|
|
48
|
+
}
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=install-deps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-deps.js","sourceRoot":"","sources":["../../../../src/cli/commands/install-deps.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC;KAC1D,WAAW,CAAC,oDAAoD,CAAC;KACjE,MAAM,CAAC,SAAS,EAAE,wDAAwD,CAAC;KAC3E,MAAM,CAAC,KAAK,EAAE,OAA4B,EAAE,EAAE;IAC7C,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;IAErC,mDAAmD;IACnD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;QAChD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,yBAAyB,EAAE,CAAC;QAE1C,sBAAsB;QACtB,MAAM,MAAM,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;QAChD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC;YACvD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACnC,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAC;QAC5D,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/test/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgCpC,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/test/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgCpC,eAAO,MAAM,UAAU,SA0LnB,CAAC"}
|
|
@@ -89,18 +89,11 @@ export const runCommand = new Command('run')
|
|
|
89
89
|
config.api_url?.includes('localhost') ||
|
|
90
90
|
config.api_url?.includes('127.0.0.1');
|
|
91
91
|
// Handle --headful without --tunnel
|
|
92
|
-
if (options.headful && !options.tunnel) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
console.log(error('--headful requires --tunnel flag'));
|
|
100
|
-
console.log(' Use: qa-use test run <name> --tunnel --headful');
|
|
101
|
-
console.log(' Or for headless local browser: qa-use test run <name> --tunnel');
|
|
102
|
-
process.exit(1);
|
|
103
|
-
}
|
|
92
|
+
if (options.headful && !options.tunnel && !isDevelopment) {
|
|
93
|
+
console.log(error('--headful requires --tunnel flag'));
|
|
94
|
+
console.log(' Use: qa-use test run <name> --tunnel --headful');
|
|
95
|
+
console.log(' Or for headless local browser: qa-use test run <name> --tunnel');
|
|
96
|
+
process.exit(1);
|
|
104
97
|
}
|
|
105
98
|
if (options.tunnel) {
|
|
106
99
|
const headless = !options.headful;
|
|
@@ -126,7 +119,8 @@ export const runCommand = new Command('run')
|
|
|
126
119
|
test_id: options.id,
|
|
127
120
|
persist: options.persist || config.defaults?.persist || false,
|
|
128
121
|
// When using ws_url, headless flag is irrelevant (backend uses our browser)
|
|
129
|
-
|
|
122
|
+
// When --headful without tunnel (dev mode), tell backend to run visible browser
|
|
123
|
+
headless: wsUrl ? true : options.headful ? false : (config.defaults?.headless ?? true),
|
|
130
124
|
allow_fix: options.autofix || config.defaults?.allow_fix || false,
|
|
131
125
|
capture_screenshots: options.screenshots || options.download || false,
|
|
132
126
|
ws_url: wsUrl,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../../src/cli/commands/test/run.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../../src/cli/commands/test/run.ts"],"names":[],"mappings":"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"}
|
package/dist/src/cli/index.js
CHANGED
|
@@ -9,6 +9,7 @@ import { infoCommand } from './commands/info.js';
|
|
|
9
9
|
import { testCommand } from './commands/test/index.js';
|
|
10
10
|
import { mcpCommand } from './commands/mcp.js';
|
|
11
11
|
import { browserCommand } from './commands/browser/index.js';
|
|
12
|
+
import { installDepsCommand } from './commands/install-deps.js';
|
|
12
13
|
// Get version from package.json
|
|
13
14
|
const require = createRequire(import.meta.url);
|
|
14
15
|
const { version } = require('../../package.json');
|
|
@@ -20,6 +21,7 @@ program.addCommand(infoCommand);
|
|
|
20
21
|
program.addCommand(testCommand);
|
|
21
22
|
program.addCommand(mcpCommand);
|
|
22
23
|
program.addCommand(browserCommand);
|
|
24
|
+
program.addCommand(installDepsCommand);
|
|
23
25
|
// Parse command line arguments
|
|
24
26
|
program.parse();
|
|
25
27
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,gCAAgC;AAChC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAElD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,oCAAoC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAE1F,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;AAEvC,+BAA+B;AAC/B,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -22,6 +22,11 @@ export interface BrowserTunnelOptions {
|
|
|
22
22
|
* Check if a URL points to localhost
|
|
23
23
|
*/
|
|
24
24
|
export declare function isLocalhostUrl(url: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Check if Playwright browsers are installed and exit with helpful message if not.
|
|
27
|
+
* This is a guard function to call before expensive tunnel/browser operations.
|
|
28
|
+
*/
|
|
29
|
+
export declare function ensureBrowsersInstalled(): void;
|
|
25
30
|
/**
|
|
26
31
|
* Get the port from a URL
|
|
27
32
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/browser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/browser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAI/D,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAYnD;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAY9C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAWlD;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,oBAAoB,CAAC,CA2C/B;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAKxF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAEvE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAaxF"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import { TunnelManager } from '../../../lib/tunnel/index.js';
|
|
8
8
|
import { BrowserManager } from '../../../lib/browser/index.js';
|
|
9
9
|
import { URL } from 'url';
|
|
10
|
+
import { error } from './output.js';
|
|
10
11
|
/**
|
|
11
12
|
* Check if a URL points to localhost
|
|
12
13
|
*/
|
|
@@ -22,6 +23,22 @@ export function isLocalhostUrl(url) {
|
|
|
22
23
|
return false;
|
|
23
24
|
}
|
|
24
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Check if Playwright browsers are installed and exit with helpful message if not.
|
|
28
|
+
* This is a guard function to call before expensive tunnel/browser operations.
|
|
29
|
+
*/
|
|
30
|
+
export function ensureBrowsersInstalled() {
|
|
31
|
+
const browser = new BrowserManager();
|
|
32
|
+
const status = browser.checkBrowsersInstalled();
|
|
33
|
+
if (!status.installed) {
|
|
34
|
+
console.log(error('Playwright Chromium browser is not installed'));
|
|
35
|
+
console.log('');
|
|
36
|
+
console.log(' To install, run:');
|
|
37
|
+
console.log(' qa-use install-deps');
|
|
38
|
+
console.log('');
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
25
42
|
/**
|
|
26
43
|
* Get the port from a URL
|
|
27
44
|
*/
|
|
@@ -46,6 +63,8 @@ export function getPortFromUrl(url) {
|
|
|
46
63
|
* @returns BrowserTunnelSession with connection details
|
|
47
64
|
*/
|
|
48
65
|
export async function startBrowserWithTunnel(testUrl, options = {}) {
|
|
66
|
+
// Check that browsers are installed before expensive operations
|
|
67
|
+
ensureBrowsersInstalled();
|
|
49
68
|
const browser = new BrowserManager();
|
|
50
69
|
let tunnel = null;
|
|
51
70
|
let publicWsUrl = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../../src/cli/lib/browser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../../src/cli/lib/browser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAgBpC;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,CACL,MAAM,CAAC,QAAQ,KAAK,WAAW;YAC/B,MAAM,CAAC,QAAQ,KAAK,WAAW;YAC/B,MAAM,CAAC,QAAQ,KAAK,KAAK;YACzB,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CACvC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB;IACrC,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAEhD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,gBAAgB;QAChB,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAA2B,EAC3B,UAAgC,EAAE;IAElC,gEAAgE;IAChE,uBAAuB,EAAE,CAAC;IAE1B,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;IACrC,IAAI,MAAM,GAAyB,IAAI,CAAC;IACxC,IAAI,WAAW,GAAkB,IAAI,CAAC;IAEtC,gBAAgB;IAChB,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACrC,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC;QAChD,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI;KACnC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC;IACxC,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAE9D,4DAA4D;IAC5D,IAAI,WAAW,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;QAEpF,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAE7B,kCAAkC;QAClC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAErC,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE;YACrD,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC,CAAC;QAEH,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5C,OAAO,CAAC,KAAK,CAAC,uBAAuB,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,KAAK,CAAC,yBAAyB,WAAW,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO;QACL,OAAO;QACP,MAAM;QACN,KAAK;QACL,WAAW;QACX,WAAW;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAA6B;IACvE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IACpC,CAAC;IACD,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAA6B;IAC7D,OAAO,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAA6B;IACpE,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IAE3D,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACzD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AA+BD;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AA+BD;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC,CAgDrD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAIjE;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAErD"}
|
|
@@ -79,6 +79,9 @@ export async function loadConfig() {
|
|
|
79
79
|
if (process.env.QA_USE_API_URL) {
|
|
80
80
|
config.api_url = process.env.QA_USE_API_URL;
|
|
81
81
|
}
|
|
82
|
+
if (process.env.QA_USE_DEFAULT_APP_CONFIG_ID) {
|
|
83
|
+
config.default_app_config_id = process.env.QA_USE_DEFAULT_APP_CONFIG_ID;
|
|
84
|
+
}
|
|
82
85
|
return config;
|
|
83
86
|
}
|
|
84
87
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/cli/lib/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAgB7B,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAE7C;;GAEG;AACH,KAAK,UAAU,cAAc;IAC3B,0BAA0B;IAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAEpD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC7B,OAAO,WAAW,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;IAED,uBAAuB;IACvB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC5B,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,UAAU,GAAG,MAAM,cAAc,EAAE,CAAC;IAE1C,IAAI,MAAM,GAAc;QACtB,cAAc,EAAE,YAAY;QAC5B,QAAQ,EAAE;YACR,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,GAAG;YACZ,SAAS,EAAE,IAAI;SAChB;KACF,CAAC;IAEF,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAc,CAAC;YACpD,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2CAA2C,UAAU,EAAE,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,yCAAyC;gBACzC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC/B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC9C,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC/B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC9C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAiB;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAChD,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,OAAO,CAAC,MAAM,cAAc,EAAE,CAAC,KAAK,IAAI,CAAC;AAC3C,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/cli/lib/config.ts"],"names":[],"mappings":"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"}
|
package/lib/api/browser-types.ts
CHANGED
|
@@ -15,6 +15,7 @@ export interface CreateBrowserSessionOptions {
|
|
|
15
15
|
viewport?: ViewportType;
|
|
16
16
|
timeout?: number; // Session timeout in seconds (60-3600)
|
|
17
17
|
ws_url?: string; // WebSocket URL for remote/tunneled browser
|
|
18
|
+
record_blocks?: boolean; // Enable block recording for test generation
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
export interface BrowserSession {
|
|
@@ -26,6 +27,13 @@ export interface BrowserSession {
|
|
|
26
27
|
viewport?: ViewportType;
|
|
27
28
|
headless?: boolean;
|
|
28
29
|
timeout?: number;
|
|
30
|
+
// Additional fields from API documentation
|
|
31
|
+
app_url?: string; // Frontend URL to view session visualization
|
|
32
|
+
last_action_at?: string; // Timestamp of last action
|
|
33
|
+
error_message?: string; // Error if session failed
|
|
34
|
+
recording_url?: string; // Video recording URL (after close)
|
|
35
|
+
har_url?: string; // HAR file URL (after close)
|
|
36
|
+
storage_state_url?: string; // Browser storage state URL (after close)
|
|
29
37
|
}
|
|
30
38
|
|
|
31
39
|
// ==========================================
|
|
@@ -47,6 +55,7 @@ export type BrowserActionType =
|
|
|
47
55
|
| 'select'
|
|
48
56
|
| 'check'
|
|
49
57
|
| 'uncheck'
|
|
58
|
+
| 'set_checked'
|
|
50
59
|
| 'wait'
|
|
51
60
|
| 'wait_for_selector'
|
|
52
61
|
| 'wait_for_load'
|
|
@@ -127,6 +136,13 @@ export interface UncheckAction {
|
|
|
127
136
|
text?: string; // AI-based semantic element selection (alternative to ref)
|
|
128
137
|
}
|
|
129
138
|
|
|
139
|
+
export interface SetCheckedAction {
|
|
140
|
+
type: 'set_checked';
|
|
141
|
+
ref?: string;
|
|
142
|
+
text?: string; // AI-based semantic element selection (alternative to ref)
|
|
143
|
+
checked: boolean;
|
|
144
|
+
}
|
|
145
|
+
|
|
130
146
|
export interface ScrollIntoViewAction {
|
|
131
147
|
type: 'scroll_into_view';
|
|
132
148
|
ref?: string;
|
|
@@ -172,6 +188,7 @@ export type BrowserAction =
|
|
|
172
188
|
| SelectAction
|
|
173
189
|
| CheckAction
|
|
174
190
|
| UncheckAction
|
|
191
|
+
| SetCheckedAction
|
|
175
192
|
| WaitAction
|
|
176
193
|
| WaitForSelectorAction
|
|
177
194
|
| WaitForLoadAction
|
|
@@ -186,6 +203,10 @@ export interface ActionResult {
|
|
|
186
203
|
success: boolean;
|
|
187
204
|
error?: string;
|
|
188
205
|
data?: unknown;
|
|
206
|
+
// Tracking fields
|
|
207
|
+
action_id?: string; // Unique action identifier
|
|
208
|
+
url_before?: string; // URL before action executed
|
|
209
|
+
url_after?: string; // URL after action executed
|
|
189
210
|
}
|
|
190
211
|
|
|
191
212
|
export interface SnapshotResult {
|
|
@@ -276,3 +297,67 @@ export interface GetStatusMessage {
|
|
|
276
297
|
}
|
|
277
298
|
|
|
278
299
|
export type ClientMessage = PingMessage | ActionMessage | GetStatusMessage;
|
|
300
|
+
|
|
301
|
+
// ==========================================
|
|
302
|
+
// Console Logs
|
|
303
|
+
// ==========================================
|
|
304
|
+
|
|
305
|
+
export type ConsoleLogLevel = 'log' | 'warn' | 'error' | 'info' | 'debug';
|
|
306
|
+
|
|
307
|
+
export interface ConsoleLogEntry {
|
|
308
|
+
level: ConsoleLogLevel;
|
|
309
|
+
text: string;
|
|
310
|
+
timestamp: string;
|
|
311
|
+
url?: string;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
export interface ConsoleLogsResult {
|
|
315
|
+
logs: ConsoleLogEntry[];
|
|
316
|
+
total: number;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
export interface ConsoleLogsOptions {
|
|
320
|
+
level?: ConsoleLogLevel;
|
|
321
|
+
limit?: number;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
// ==========================================
|
|
325
|
+
// Network Logs
|
|
326
|
+
// ==========================================
|
|
327
|
+
|
|
328
|
+
export interface NetworkLogEntry {
|
|
329
|
+
method: string;
|
|
330
|
+
url: string;
|
|
331
|
+
status: number;
|
|
332
|
+
duration_ms: number;
|
|
333
|
+
request_headers?: Record<string, string>;
|
|
334
|
+
response_headers?: Record<string, string>;
|
|
335
|
+
timestamp: string;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
export interface NetworkLogsResult {
|
|
339
|
+
requests: NetworkLogEntry[];
|
|
340
|
+
total: number;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
export interface NetworkLogsOptions {
|
|
344
|
+
status?: string; // e.g., "4xx,5xx"
|
|
345
|
+
url_pattern?: string; // e.g., "*api*"
|
|
346
|
+
limit?: number;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// ==========================================
|
|
350
|
+
// Test Generation
|
|
351
|
+
// ==========================================
|
|
352
|
+
|
|
353
|
+
export interface GenerateTestOptions {
|
|
354
|
+
name: string;
|
|
355
|
+
app_config?: string;
|
|
356
|
+
variables?: Record<string, string>;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
export interface GenerateTestResult {
|
|
360
|
+
yaml: string;
|
|
361
|
+
test_definition: Record<string, unknown>;
|
|
362
|
+
block_count: number;
|
|
363
|
+
}
|
package/lib/api/browser.test.ts
CHANGED
|
@@ -375,4 +375,167 @@ describe('BrowserApiClient', () => {
|
|
|
375
375
|
);
|
|
376
376
|
});
|
|
377
377
|
});
|
|
378
|
+
|
|
379
|
+
describe('generateTest', () => {
|
|
380
|
+
it('should generate test from session blocks', async () => {
|
|
381
|
+
const mockResult = {
|
|
382
|
+
yaml: 'name: Login Test\nsteps:\n - goto: https://example.com',
|
|
383
|
+
test_definition: { name: 'Login Test' },
|
|
384
|
+
block_count: 3,
|
|
385
|
+
};
|
|
386
|
+
mockAxiosInstance.post.mockResolvedValueOnce({ data: mockResult });
|
|
387
|
+
|
|
388
|
+
const result = await client.generateTest('session-123', {
|
|
389
|
+
name: 'Login Test',
|
|
390
|
+
});
|
|
391
|
+
|
|
392
|
+
expect(mockAxiosInstance.post).toHaveBeenCalledWith('/sessions/session-123/generate-test', {
|
|
393
|
+
name: 'Login Test',
|
|
394
|
+
});
|
|
395
|
+
expect(result.yaml).toContain('Login Test');
|
|
396
|
+
expect(result.block_count).toBe(3);
|
|
397
|
+
});
|
|
398
|
+
|
|
399
|
+
it('should generate test with app_config and variables', async () => {
|
|
400
|
+
const mockResult = {
|
|
401
|
+
yaml: 'name: Test with Config\nsteps: []',
|
|
402
|
+
test_definition: { name: 'Test with Config' },
|
|
403
|
+
block_count: 5,
|
|
404
|
+
};
|
|
405
|
+
mockAxiosInstance.post.mockResolvedValueOnce({ data: mockResult });
|
|
406
|
+
|
|
407
|
+
const result = await client.generateTest('session-123', {
|
|
408
|
+
name: 'Test with Config',
|
|
409
|
+
app_config: 'my-app-config',
|
|
410
|
+
variables: { base_url: 'https://staging.example.com' },
|
|
411
|
+
});
|
|
412
|
+
|
|
413
|
+
expect(mockAxiosInstance.post).toHaveBeenCalledWith('/sessions/session-123/generate-test', {
|
|
414
|
+
name: 'Test with Config',
|
|
415
|
+
app_config: 'my-app-config',
|
|
416
|
+
variables: { base_url: 'https://staging.example.com' },
|
|
417
|
+
});
|
|
418
|
+
expect(result.block_count).toBe(5);
|
|
419
|
+
});
|
|
420
|
+
});
|
|
421
|
+
|
|
422
|
+
describe('getConsoleLogs', () => {
|
|
423
|
+
it('should get console logs', async () => {
|
|
424
|
+
const mockResult = {
|
|
425
|
+
logs: [{ level: 'error', text: 'Test error', timestamp: '2026-01-24T10:00:00Z' }],
|
|
426
|
+
total: 1,
|
|
427
|
+
};
|
|
428
|
+
mockAxiosInstance.get.mockResolvedValueOnce({ data: mockResult });
|
|
429
|
+
|
|
430
|
+
const result = await client.getConsoleLogs('session-123');
|
|
431
|
+
|
|
432
|
+
expect(mockAxiosInstance.get).toHaveBeenCalledWith('/sessions/session-123/logs/console');
|
|
433
|
+
expect(result.logs).toHaveLength(1);
|
|
434
|
+
expect(result.logs[0].level).toBe('error');
|
|
435
|
+
});
|
|
436
|
+
|
|
437
|
+
it('should get console logs with filters', async () => {
|
|
438
|
+
const mockResult = { logs: [], total: 0 };
|
|
439
|
+
mockAxiosInstance.get.mockResolvedValueOnce({ data: mockResult });
|
|
440
|
+
|
|
441
|
+
await client.getConsoleLogs('session-123', { level: 'error', limit: 50 });
|
|
442
|
+
|
|
443
|
+
expect(mockAxiosInstance.get).toHaveBeenCalledWith(
|
|
444
|
+
'/sessions/session-123/logs/console?level=error&limit=50'
|
|
445
|
+
);
|
|
446
|
+
});
|
|
447
|
+
|
|
448
|
+
it('should get console logs with only level filter', async () => {
|
|
449
|
+
const mockResult = { logs: [], total: 0 };
|
|
450
|
+
mockAxiosInstance.get.mockResolvedValueOnce({ data: mockResult });
|
|
451
|
+
|
|
452
|
+
await client.getConsoleLogs('session-123', { level: 'warn' });
|
|
453
|
+
|
|
454
|
+
expect(mockAxiosInstance.get).toHaveBeenCalledWith(
|
|
455
|
+
'/sessions/session-123/logs/console?level=warn'
|
|
456
|
+
);
|
|
457
|
+
});
|
|
458
|
+
});
|
|
459
|
+
|
|
460
|
+
describe('getNetworkLogs', () => {
|
|
461
|
+
it('should get network logs', async () => {
|
|
462
|
+
const mockResult = {
|
|
463
|
+
requests: [
|
|
464
|
+
{
|
|
465
|
+
method: 'GET',
|
|
466
|
+
url: 'https://api.example.com',
|
|
467
|
+
status: 200,
|
|
468
|
+
duration_ms: 150,
|
|
469
|
+
timestamp: '2026-01-24T10:00:00Z',
|
|
470
|
+
},
|
|
471
|
+
],
|
|
472
|
+
total: 1,
|
|
473
|
+
};
|
|
474
|
+
mockAxiosInstance.get.mockResolvedValueOnce({ data: mockResult });
|
|
475
|
+
|
|
476
|
+
const result = await client.getNetworkLogs('session-123');
|
|
477
|
+
|
|
478
|
+
expect(mockAxiosInstance.get).toHaveBeenCalledWith('/sessions/session-123/logs/network');
|
|
479
|
+
expect(result.requests).toHaveLength(1);
|
|
480
|
+
expect(result.requests[0].status).toBe(200);
|
|
481
|
+
});
|
|
482
|
+
|
|
483
|
+
it('should get network logs with filters', async () => {
|
|
484
|
+
const mockResult = { requests: [], total: 0 };
|
|
485
|
+
mockAxiosInstance.get.mockResolvedValueOnce({ data: mockResult });
|
|
486
|
+
|
|
487
|
+
await client.getNetworkLogs('session-123', { status: '4xx,5xx', url_pattern: '*api*' });
|
|
488
|
+
|
|
489
|
+
expect(mockAxiosInstance.get).toHaveBeenCalledWith(
|
|
490
|
+
'/sessions/session-123/logs/network?status=4xx%2C5xx&url_pattern=*api*'
|
|
491
|
+
);
|
|
492
|
+
});
|
|
493
|
+
|
|
494
|
+
it('should get network logs with limit only', async () => {
|
|
495
|
+
const mockResult = { requests: [], total: 0 };
|
|
496
|
+
mockAxiosInstance.get.mockResolvedValueOnce({ data: mockResult });
|
|
497
|
+
|
|
498
|
+
await client.getNetworkLogs('session-123', { limit: 100 });
|
|
499
|
+
|
|
500
|
+
expect(mockAxiosInstance.get).toHaveBeenCalledWith(
|
|
501
|
+
'/sessions/session-123/logs/network?limit=100'
|
|
502
|
+
);
|
|
503
|
+
});
|
|
504
|
+
});
|
|
505
|
+
|
|
506
|
+
describe('createSession with record_blocks', () => {
|
|
507
|
+
it('should create session with record_blocks enabled', async () => {
|
|
508
|
+
const mockSession = {
|
|
509
|
+
id: 'session-rec',
|
|
510
|
+
status: 'starting',
|
|
511
|
+
created_at: '2026-01-24T10:00:00Z',
|
|
512
|
+
};
|
|
513
|
+
mockAxiosInstance.post.mockResolvedValueOnce({ data: mockSession });
|
|
514
|
+
|
|
515
|
+
await client.createSession({
|
|
516
|
+
record_blocks: true,
|
|
517
|
+
});
|
|
518
|
+
|
|
519
|
+
expect(mockAxiosInstance.post).toHaveBeenCalledWith('/sessions', {
|
|
520
|
+
headless: true,
|
|
521
|
+
viewport: 'desktop',
|
|
522
|
+
timeout: 300,
|
|
523
|
+
record_blocks: true,
|
|
524
|
+
});
|
|
525
|
+
});
|
|
526
|
+
|
|
527
|
+
it('should not include record_blocks when not provided', async () => {
|
|
528
|
+
const mockSession = {
|
|
529
|
+
id: 'session-no-rec',
|
|
530
|
+
status: 'starting',
|
|
531
|
+
created_at: '2026-01-24T10:00:00Z',
|
|
532
|
+
};
|
|
533
|
+
mockAxiosInstance.post.mockResolvedValueOnce({ data: mockSession });
|
|
534
|
+
|
|
535
|
+
await client.createSession({});
|
|
536
|
+
|
|
537
|
+
const callArgs = mockAxiosInstance.post.mock.calls[0];
|
|
538
|
+
expect(callArgs[1]).not.toHaveProperty('record_blocks');
|
|
539
|
+
});
|
|
540
|
+
});
|
|
378
541
|
});
|