@desplega.ai/qa-use 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +1003 -0
- package/bin/qa-use.js +7 -0
- package/dist/lib/api/index.d.ts +296 -0
- package/dist/lib/api/index.d.ts.map +1 -0
- package/dist/lib/api/index.js +564 -0
- package/dist/lib/api/index.js.map +1 -0
- package/dist/lib/api/sse.d.ts +33 -0
- package/dist/lib/api/sse.d.ts.map +1 -0
- package/dist/lib/api/sse.js +97 -0
- package/dist/lib/api/sse.js.map +1 -0
- package/dist/lib/browser/index.d.ts +28 -0
- package/dist/lib/browser/index.d.ts.map +1 -0
- package/dist/lib/browser/index.js +145 -0
- package/dist/lib/browser/index.js.map +1 -0
- package/dist/lib/env/index.d.ts +41 -0
- package/dist/lib/env/index.d.ts.map +1 -0
- package/dist/lib/env/index.js +125 -0
- package/dist/lib/env/index.js.map +1 -0
- package/dist/lib/tunnel/index.d.ts +38 -0
- package/dist/lib/tunnel/index.d.ts.map +1 -0
- package/dist/lib/tunnel/index.js +154 -0
- package/dist/lib/tunnel/index.js.map +1 -0
- package/dist/package.json +100 -0
- package/dist/src/cli/commands/info.d.ts +6 -0
- package/dist/src/cli/commands/info.d.ts.map +1 -0
- package/dist/src/cli/commands/info.js +32 -0
- package/dist/src/cli/commands/info.js.map +1 -0
- package/dist/src/cli/commands/mcp.d.ts +6 -0
- package/dist/src/cli/commands/mcp.d.ts.map +1 -0
- package/dist/src/cli/commands/mcp.js +45 -0
- package/dist/src/cli/commands/mcp.js.map +1 -0
- package/dist/src/cli/commands/setup.d.ts +6 -0
- package/dist/src/cli/commands/setup.d.ts.map +1 -0
- package/dist/src/cli/commands/setup.js +59 -0
- package/dist/src/cli/commands/setup.js.map +1 -0
- package/dist/src/cli/commands/test/index.d.ts +6 -0
- package/dist/src/cli/commands/test/index.d.ts.map +1 -0
- package/dist/src/cli/commands/test/index.js +15 -0
- package/dist/src/cli/commands/test/index.js.map +1 -0
- package/dist/src/cli/commands/test/init.d.ts +6 -0
- package/dist/src/cli/commands/test/init.d.ts.map +1 -0
- package/dist/src/cli/commands/test/init.js +64 -0
- package/dist/src/cli/commands/test/init.js.map +1 -0
- package/dist/src/cli/commands/test/list.d.ts +6 -0
- package/dist/src/cli/commands/test/list.d.ts.map +1 -0
- package/dist/src/cli/commands/test/list.js +70 -0
- package/dist/src/cli/commands/test/list.js.map +1 -0
- package/dist/src/cli/commands/test/run.d.ts +6 -0
- package/dist/src/cli/commands/test/run.d.ts.map +1 -0
- package/dist/src/cli/commands/test/run.js +95 -0
- package/dist/src/cli/commands/test/run.js.map +1 -0
- package/dist/src/cli/commands/test/validate.d.ts +6 -0
- package/dist/src/cli/commands/test/validate.d.ts.map +1 -0
- package/dist/src/cli/commands/test/validate.js +70 -0
- package/dist/src/cli/commands/test/validate.js.map +1 -0
- package/dist/src/cli/index.d.ts +6 -0
- package/dist/src/cli/index.d.ts.map +1 -0
- package/dist/src/cli/index.js +21 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/lib/config.d.ts +36 -0
- package/dist/src/cli/lib/config.d.ts.map +1 -0
- package/dist/src/cli/lib/config.js +89 -0
- package/dist/src/cli/lib/config.js.map +1 -0
- package/dist/src/cli/lib/loader.d.ts +49 -0
- package/dist/src/cli/lib/loader.d.ts.map +1 -0
- package/dist/src/cli/lib/loader.js +122 -0
- package/dist/src/cli/lib/loader.js.map +1 -0
- package/dist/src/cli/lib/output.d.ts +53 -0
- package/dist/src/cli/lib/output.d.ts.map +1 -0
- package/dist/src/cli/lib/output.js +133 -0
- package/dist/src/cli/lib/output.js.map +1 -0
- package/dist/src/cli/lib/runner.d.ts +23 -0
- package/dist/src/cli/lib/runner.d.ts.map +1 -0
- package/dist/src/cli/lib/runner.js +40 -0
- package/dist/src/cli/lib/runner.js.map +1 -0
- package/dist/src/http-server.d.ts +14 -0
- package/dist/src/http-server.d.ts.map +1 -0
- package/dist/src/http-server.js +145 -0
- package/dist/src/http-server.js.map +1 -0
- package/dist/src/index.d.ts +9 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +21 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/server.d.ts +58 -0
- package/dist/src/server.d.ts.map +1 -0
- package/dist/src/server.js +2376 -0
- package/dist/src/server.js.map +1 -0
- package/dist/src/tunnel-mode.d.ts +13 -0
- package/dist/src/tunnel-mode.d.ts.map +1 -0
- package/dist/src/tunnel-mode.js +159 -0
- package/dist/src/tunnel-mode.js.map +1 -0
- package/dist/src/types/test-definition.d.ts +320 -0
- package/dist/src/types/test-definition.d.ts.map +1 -0
- package/dist/src/types/test-definition.js +11 -0
- package/dist/src/types/test-definition.js.map +1 -0
- package/dist/src/types.d.ts +209 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +34 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/package.d.ts +12 -0
- package/dist/src/utils/package.d.ts.map +1 -0
- package/dist/src/utils/package.js +36 -0
- package/dist/src/utils/package.js.map +1 -0
- package/dist/src/utils/summary.d.ts +45 -0
- package/dist/src/utils/summary.d.ts.map +1 -0
- package/dist/src/utils/summary.js +198 -0
- package/dist/src/utils/summary.js.map +1 -0
- package/lib/api/index.ts +977 -0
- package/lib/api/sse.ts +112 -0
- package/lib/browser/index.ts +181 -0
- package/lib/env/index.ts +156 -0
- package/lib/tunnel/index.test.ts +344 -0
- package/lib/tunnel/index.ts +197 -0
- package/lib/tunnel/integration.test.ts +98 -0
- package/package.json +100 -0
- package/server.json +16 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/tunnel/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@desplega.ai/qa-use",
|
|
3
|
+
"version": "2.0.1",
|
|
4
|
+
"packageManager": "bun@^1.3.4",
|
|
5
|
+
"description": "QA automation tool for browser testing with MCP server support",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "dist/src/index.js",
|
|
8
|
+
"bin": {
|
|
9
|
+
"qa-use": "./bin/qa-use.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"lib",
|
|
14
|
+
"bin",
|
|
15
|
+
"README.md",
|
|
16
|
+
"server.json",
|
|
17
|
+
"LICENSE"
|
|
18
|
+
],
|
|
19
|
+
"engines": {
|
|
20
|
+
"node": ">=20.0.0"
|
|
21
|
+
},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "tsc",
|
|
24
|
+
"cli": "tsx src/cli/index.ts",
|
|
25
|
+
"dev": "tsx src/index.ts",
|
|
26
|
+
"start": "bun run build && node dist/src/index.js",
|
|
27
|
+
"inspector": "bun run build && npx -y @modelcontextprotocol/inspector node dist/src/index.js",
|
|
28
|
+
"inspector:env": "bun run build && npx dotenv-cli -e .env -- npx -y @modelcontextprotocol/inspector node dist/src/index.js",
|
|
29
|
+
"format": "prettier --write \"src/**/*.{ts,tsx,js,jsx,json}\" \"lib/**/*.{ts,tsx,js,jsx,json}\"",
|
|
30
|
+
"format:check": "prettier --check \"src/**/*.{ts,tsx,js,jsx,json}\" \"lib/**/*.{ts,tsx,js,jsx,json}\"",
|
|
31
|
+
"lint": "eslint \"src/**/*.{ts,tsx,js,jsx}\" \"lib/**/*.{ts,tsx,js,jsx}\"",
|
|
32
|
+
"lint:fix": "eslint \"src/**/*.{ts,tsx,js,jsx}\" \"lib/**/*.{ts,tsx,js,jsx}\" --fix",
|
|
33
|
+
"typecheck": "tsc --noEmit",
|
|
34
|
+
"test": "bun test --preload ./test-setup.ts",
|
|
35
|
+
"test:unit": "node scripts/test-unit.js",
|
|
36
|
+
"test:integration": "node scripts/test-integration.js",
|
|
37
|
+
"test:coverage": "bun test --coverage --preload ./test-setup.ts",
|
|
38
|
+
"generate:readme": "node scripts/generate-readme-tools.js",
|
|
39
|
+
"generate:types": "tsx scripts/generate-types.ts",
|
|
40
|
+
"release": "bun scripts/release.ts",
|
|
41
|
+
"prepublishOnly": "bun run build && bun lint && bun typecheck",
|
|
42
|
+
"cc:validate": "claude plugin validate ."
|
|
43
|
+
},
|
|
44
|
+
"keywords": [
|
|
45
|
+
"mcp",
|
|
46
|
+
"browser-automation",
|
|
47
|
+
"qa-testing",
|
|
48
|
+
"playwright",
|
|
49
|
+
"testing"
|
|
50
|
+
],
|
|
51
|
+
"author": {
|
|
52
|
+
"name": "tarasyarema",
|
|
53
|
+
"email": "t@desplega.ai",
|
|
54
|
+
"url": "https://github.com/desplega-ai"
|
|
55
|
+
},
|
|
56
|
+
"license": "MIT",
|
|
57
|
+
"repository": {
|
|
58
|
+
"type": "git",
|
|
59
|
+
"url": "https://github.com/desplega-ai/qa-use.git"
|
|
60
|
+
},
|
|
61
|
+
"homepage": "https://github.com/desplega-ai/qa-use",
|
|
62
|
+
"bugs": {
|
|
63
|
+
"url": "https://github.com/desplega-ai/qa-use/issues"
|
|
64
|
+
},
|
|
65
|
+
"publishConfig": {
|
|
66
|
+
"access": "public"
|
|
67
|
+
},
|
|
68
|
+
"devDependencies": {
|
|
69
|
+
"@eslint/js": "^9.36.0",
|
|
70
|
+
"@types/express": "^5.0.0",
|
|
71
|
+
"@types/node": "^24.5.2",
|
|
72
|
+
"@types/react": "^19.1.14",
|
|
73
|
+
"@types/ws": "^8.18.1",
|
|
74
|
+
"@typescript-eslint/eslint-plugin": "^8.44.1",
|
|
75
|
+
"@typescript-eslint/parser": "^8.44.1",
|
|
76
|
+
"@vercel/node": "^3.2.23",
|
|
77
|
+
"dotenv-cli": "^7.4.2",
|
|
78
|
+
"eslint": "^9.36.0",
|
|
79
|
+
"eslint-config-prettier": "^10.1.8",
|
|
80
|
+
"eslint-plugin-prettier": "^5.5.4",
|
|
81
|
+
"ignore": "^7.0.5",
|
|
82
|
+
"json-schema-to-typescript": "^15.0.4",
|
|
83
|
+
"prettier": "^3.6.2",
|
|
84
|
+
"ts-node": "^10.9.2",
|
|
85
|
+
"tsx": "^4.20.6",
|
|
86
|
+
"typescript": "^5.9.2",
|
|
87
|
+
"typescript-eslint": "^8.44.1"
|
|
88
|
+
},
|
|
89
|
+
"dependencies": {
|
|
90
|
+
"@desplega.ai/localtunnel": "^2.1.1",
|
|
91
|
+
"@modelcontextprotocol/sdk": "^1.18.1",
|
|
92
|
+
"axios": "^1.12.2",
|
|
93
|
+
"commander": "^14.0.2",
|
|
94
|
+
"dotenv": "^16.4.5",
|
|
95
|
+
"express": "^4.21.2",
|
|
96
|
+
"glob": "^13.0.0",
|
|
97
|
+
"playwright": "1.55.0",
|
|
98
|
+
"yaml": "^2.8.2"
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,WAAW,SAgCpB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* qa-use info - Show current configuration
|
|
3
|
+
*/
|
|
4
|
+
import { Command } from 'commander';
|
|
5
|
+
import { loadConfig, configExists } from '../lib/config.js';
|
|
6
|
+
import { warning } from '../lib/output.js';
|
|
7
|
+
export const infoCommand = new Command('info')
|
|
8
|
+
.description('Show current configuration and environment')
|
|
9
|
+
.action(async () => {
|
|
10
|
+
console.log('ℹ️ QA-Use Configuration\n');
|
|
11
|
+
const hasConfig = await configExists();
|
|
12
|
+
if (!hasConfig) {
|
|
13
|
+
console.log(warning('No configuration file found'));
|
|
14
|
+
console.log(' Run `qa-use setup` to create one\n');
|
|
15
|
+
}
|
|
16
|
+
const config = await loadConfig();
|
|
17
|
+
console.log('Configuration:');
|
|
18
|
+
console.log(` API Key: ${config.api_key ? config.api_key.slice(0, 8) + '...' : '(not set)'}`);
|
|
19
|
+
console.log(` API URL: ${config.api_url || process.env.QA_USE_API_URL || 'https://api.desplega.ai'}`);
|
|
20
|
+
console.log(` Test Directory: ${config.test_directory || './qa-tests'}`);
|
|
21
|
+
console.log(` Default App Config: ${config.default_app_config_id || '(not set)'}`);
|
|
22
|
+
console.log('\nDefaults:');
|
|
23
|
+
console.log(` Headless: ${config.defaults?.headless ?? true}`);
|
|
24
|
+
console.log(` Persist: ${config.defaults?.persist ?? false}`);
|
|
25
|
+
console.log(` Timeout: ${config.defaults?.timeout ?? 300}s`);
|
|
26
|
+
console.log(` Allow Fix: ${config.defaults?.allow_fix ?? true}`);
|
|
27
|
+
console.log('\nEnvironment Variables:');
|
|
28
|
+
console.log(` QA_USE_API_KEY: ${process.env.QA_USE_API_KEY ? 'Set' : 'Not set'}`);
|
|
29
|
+
console.log(` QA_USE_API_URL: ${process.env.QA_USE_API_URL || 'Not set'}`);
|
|
30
|
+
console.log(` QA_USE_REGION: ${process.env.QA_USE_REGION || 'Not set'}`);
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAE1C,MAAM,SAAS,GAAG,MAAM,YAAY,EAAE,CAAC;IAEvC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAElC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/F,OAAO,CAAC,GAAG,CACT,cAAc,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,yBAAyB,EAAE,CAC1F,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,cAAc,IAAI,YAAY,EAAE,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,yBAAyB,MAAM,CAAC,qBAAqB,IAAI,WAAW,EAAE,CAAC,CAAC;IAEpF,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,QAAQ,EAAE,QAAQ,IAAI,IAAI,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,QAAQ,EAAE,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,QAAQ,EAAE,OAAO,IAAI,GAAG,GAAG,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,QAAQ,EAAE,SAAS,IAAI,IAAI,EAAE,CAAC,CAAC;IAElE,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,SAAS,EAAE,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,SAAS,EAAE,CAAC,CAAC;AAC5E,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,eAAO,MAAM,UAAU,SA2BnB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Command - Start the MCP server in various modes
|
|
3
|
+
*/
|
|
4
|
+
import { Command } from 'commander';
|
|
5
|
+
export const mcpCommand = new Command('mcp')
|
|
6
|
+
.description('Start the MCP server')
|
|
7
|
+
.option('--http, --api', 'Run in HTTP API server mode (default: stdio)')
|
|
8
|
+
.option('-p, --port <port>', 'Port for HTTP server', '3000')
|
|
9
|
+
.action(async (options) => {
|
|
10
|
+
const { logConfigSources } = await import('../../../lib/env/index.js');
|
|
11
|
+
// Log configuration sources (helps users understand where credentials come from)
|
|
12
|
+
logConfigSources();
|
|
13
|
+
const port = parseInt(options.port, 10);
|
|
14
|
+
if (options.http) {
|
|
15
|
+
// HTTP API server mode
|
|
16
|
+
const { QAUseMcpServer } = await import('../../server.js');
|
|
17
|
+
const { HttpMcpServer } = await import('../../http-server.js');
|
|
18
|
+
const mcpServer = new QAUseMcpServer();
|
|
19
|
+
const httpServer = new HttpMcpServer(mcpServer, port);
|
|
20
|
+
await httpServer.start();
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
// Default stdio mode
|
|
24
|
+
const { QAUseMcpServer } = await import('../../server.js');
|
|
25
|
+
const server = new QAUseMcpServer();
|
|
26
|
+
await server.start();
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
// Tunnel subcommand
|
|
30
|
+
mcpCommand
|
|
31
|
+
.command('tunnel')
|
|
32
|
+
.description('Run persistent WebSocket tunnel for backend-initiated tasks')
|
|
33
|
+
.option('--visible', 'Show browser window (default: headless)')
|
|
34
|
+
.option('-s, --subdomain <name>', 'Custom subdomain for tunnel')
|
|
35
|
+
.action(async (options) => {
|
|
36
|
+
const { logConfigSources } = await import('../../../lib/env/index.js');
|
|
37
|
+
// Log configuration sources
|
|
38
|
+
logConfigSources();
|
|
39
|
+
const { startTunnelMode } = await import('../../tunnel-mode.js');
|
|
40
|
+
await startTunnelMode({
|
|
41
|
+
headless: !options.visible,
|
|
42
|
+
subdomain: options.subdomain,
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACzC,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,eAAe,EAAE,8CAA8C,CAAC;KACvE,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,CAAC;KAC3D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAEvE,iFAAiF;IACjF,gBAAgB,EAAE,CAAC;IAEnB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAExC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,uBAAuB;QACvB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC3D,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAE/D,MAAM,SAAS,GAAG,IAAI,cAAc,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,IAAI,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAEtD,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,qBAAqB;QACrB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACpC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,oBAAoB;AACpB,UAAU;KACP,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6DAA6D,CAAC;KAC1E,MAAM,CAAC,WAAW,EAAE,yCAAyC,CAAC;KAC9D,MAAM,CAAC,wBAAwB,EAAE,6BAA6B,CAAC;KAC/D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAEvE,4BAA4B;IAC5B,gBAAgB,EAAE,CAAC;IAEnB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACjE,MAAM,eAAe,CAAC;QACpB,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,YAAY,SA2DrB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* qa-use setup - Interactive API key configuration
|
|
3
|
+
*/
|
|
4
|
+
import { Command } from 'commander';
|
|
5
|
+
import { saveConfig, loadConfig } from '../lib/config.js';
|
|
6
|
+
import { ApiClient } from '../../../lib/api/index.js';
|
|
7
|
+
import { success, error } from '../lib/output.js';
|
|
8
|
+
import * as readline from 'readline/promises';
|
|
9
|
+
export const setupCommand = new Command('setup')
|
|
10
|
+
.description('Configure API key and default settings')
|
|
11
|
+
.action(async () => {
|
|
12
|
+
const rl = readline.createInterface({
|
|
13
|
+
input: process.stdin,
|
|
14
|
+
output: process.stdout,
|
|
15
|
+
});
|
|
16
|
+
try {
|
|
17
|
+
console.log('🔧 QA-Use Setup\n');
|
|
18
|
+
// Load existing config
|
|
19
|
+
const config = await loadConfig();
|
|
20
|
+
// Ask for API key
|
|
21
|
+
const apiKey = await rl.question(`API Key${config.api_key ? ` (current: ${config.api_key.slice(0, 8)}...)` : ''}: `);
|
|
22
|
+
if (apiKey.trim()) {
|
|
23
|
+
// Validate API key
|
|
24
|
+
const client = new ApiClient();
|
|
25
|
+
client.setApiKey(apiKey.trim());
|
|
26
|
+
console.log('\n Validating API key...');
|
|
27
|
+
const validation = await client.validateApiKey();
|
|
28
|
+
if (validation.success) {
|
|
29
|
+
config.api_key = apiKey.trim();
|
|
30
|
+
console.log(success('API key validated'));
|
|
31
|
+
// Get default app config if available
|
|
32
|
+
if (validation.data?.app_config?.id) {
|
|
33
|
+
config.default_app_config_id = validation.data.app_config.id;
|
|
34
|
+
console.log(success(`Default app config: ${validation.data.app_config.id}`));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
console.log(error(`Invalid API key: ${validation.message}`));
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Ask for test directory
|
|
43
|
+
const testDir = await rl.question(`Test directory (default: ${config.test_directory || './qa-tests'}): `);
|
|
44
|
+
if (testDir.trim()) {
|
|
45
|
+
config.test_directory = testDir.trim();
|
|
46
|
+
}
|
|
47
|
+
// Save configuration
|
|
48
|
+
await saveConfig(config);
|
|
49
|
+
console.log('\n' + success('Configuration saved to .qa-use-tests.json'));
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
console.log(error(`Setup failed: ${err}`));
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
rl.close();
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../../src/cli/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/test/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,WAAW,SAAqE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* qa-use test - Test management command group
|
|
3
|
+
*/
|
|
4
|
+
import { Command } from 'commander';
|
|
5
|
+
import { runCommand } from './run.js';
|
|
6
|
+
import { listCommand } from './list.js';
|
|
7
|
+
import { validateCommand } from './validate.js';
|
|
8
|
+
import { initCommand } from './init.js';
|
|
9
|
+
export const testCommand = new Command('test').description('Manage and run test definitions');
|
|
10
|
+
// Register subcommands
|
|
11
|
+
testCommand.addCommand(runCommand);
|
|
12
|
+
testCommand.addCommand(listCommand);
|
|
13
|
+
testCommand.addCommand(validateCommand);
|
|
14
|
+
testCommand.addCommand(initCommand);
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/cli/commands/test/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC;AAE9F,uBAAuB;AACvB,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACnC,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AACpC,WAAW,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACxC,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/test/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BpC,eAAO,MAAM,WAAW,SAkCpB,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* qa-use test init - Initialize test directory with examples
|
|
3
|
+
*/
|
|
4
|
+
import { Command } from 'commander';
|
|
5
|
+
import * as fs from 'fs/promises';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import { loadConfig } from '../../lib/config.js';
|
|
8
|
+
import { success, error } from '../../lib/output.js';
|
|
9
|
+
const EXAMPLE_TEST = `# Example test definition
|
|
10
|
+
name: Example Test
|
|
11
|
+
app_config: your-app-config-id-here
|
|
12
|
+
variables:
|
|
13
|
+
email: test@example.com
|
|
14
|
+
password: secret123
|
|
15
|
+
steps:
|
|
16
|
+
- action: goto
|
|
17
|
+
url: /
|
|
18
|
+
- action: fill
|
|
19
|
+
target: email input
|
|
20
|
+
value: $email
|
|
21
|
+
- action: fill
|
|
22
|
+
target: password input
|
|
23
|
+
value: $password
|
|
24
|
+
- action: click
|
|
25
|
+
target: login button
|
|
26
|
+
- action: to_be_visible
|
|
27
|
+
target: dashboard
|
|
28
|
+
`;
|
|
29
|
+
export const initCommand = new Command('init')
|
|
30
|
+
.description('Initialize test directory with example files')
|
|
31
|
+
.action(async () => {
|
|
32
|
+
try {
|
|
33
|
+
const config = await loadConfig();
|
|
34
|
+
const testDir = config.test_directory || './qa-tests';
|
|
35
|
+
// Create directory if it doesn't exist
|
|
36
|
+
try {
|
|
37
|
+
await fs.mkdir(testDir, { recursive: true });
|
|
38
|
+
console.log(success(`Created directory: ${testDir}`));
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
console.log(`Directory ${testDir} already exists`);
|
|
42
|
+
}
|
|
43
|
+
// Create example test file
|
|
44
|
+
const examplePath = path.join(testDir, 'example.yaml');
|
|
45
|
+
try {
|
|
46
|
+
await fs.access(examplePath);
|
|
47
|
+
console.log(`File ${examplePath} already exists, skipping`);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
await fs.writeFile(examplePath, EXAMPLE_TEST, 'utf-8');
|
|
51
|
+
console.log(success(`Created: ${examplePath}`));
|
|
52
|
+
}
|
|
53
|
+
console.log('\n✓ Initialization complete!');
|
|
54
|
+
console.log('\nNext steps:');
|
|
55
|
+
console.log(' 1. Edit example.yaml with your app config ID');
|
|
56
|
+
console.log(' 2. Run: qa-use test validate example');
|
|
57
|
+
console.log(' 3. Run: qa-use test run example');
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
console.log(error(`Initialization failed: ${err}`));
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../src/cli/commands/test/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;CAmBpB,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,8CAA8C,CAAC;KAC3D,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,IAAI,YAAY,CAAC;QAEtD,uCAAuC;QACvC,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,iBAAiB,CAAC,CAAC;QACrD,CAAC;QAED,2BAA2B;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,QAAQ,WAAW,2BAA2B,CAAC,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,WAAW,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/test/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,WAAW,SAgEpB,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* qa-use test list - List test definitions
|
|
3
|
+
*/
|
|
4
|
+
import { Command } from 'commander';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import { loadConfig } from '../../lib/config.js';
|
|
7
|
+
import { discoverTests, loadTestDefinition } from '../../lib/loader.js';
|
|
8
|
+
import { printTestList, error } from '../../lib/output.js';
|
|
9
|
+
import { ApiClient } from '../../../../lib/api/index.js';
|
|
10
|
+
export const listCommand = new Command('list')
|
|
11
|
+
.description('List test definitions')
|
|
12
|
+
.option('--cloud', 'List tests from cloud instead of local files')
|
|
13
|
+
.option('--limit <number>', 'Maximum number of tests to list', '20')
|
|
14
|
+
.action(async (options) => {
|
|
15
|
+
try {
|
|
16
|
+
const config = await loadConfig();
|
|
17
|
+
if (options.cloud) {
|
|
18
|
+
// List cloud tests
|
|
19
|
+
if (!config.api_key) {
|
|
20
|
+
console.log(error('API key not configured'));
|
|
21
|
+
console.log(' Run `qa-use setup` to configure');
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
const client = new ApiClient(config.api_url);
|
|
25
|
+
client.setApiKey(config.api_key);
|
|
26
|
+
console.log('Fetching tests from cloud...\n');
|
|
27
|
+
const tests = await client.listTests({ limit: parseInt(options.limit) });
|
|
28
|
+
const formatted = tests.map((t) => ({
|
|
29
|
+
name: `${t.name} (${t.id})`,
|
|
30
|
+
steps: undefined,
|
|
31
|
+
deps: t.dependency_test_ids?.join(', '),
|
|
32
|
+
}));
|
|
33
|
+
printTestList(formatted);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
// List local tests
|
|
37
|
+
const testDir = config.test_directory || './qa-tests';
|
|
38
|
+
const files = await discoverTests(testDir);
|
|
39
|
+
if (files.length === 0) {
|
|
40
|
+
console.log(error(`No tests found in ${testDir}`));
|
|
41
|
+
console.log(' Run `qa-use test init` to create example tests');
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const tests = [];
|
|
45
|
+
const resolvedTestDir = path.resolve(testDir);
|
|
46
|
+
for (const file of files) {
|
|
47
|
+
try {
|
|
48
|
+
const def = await loadTestDefinition(file);
|
|
49
|
+
const relativePath = path
|
|
50
|
+
.relative(resolvedTestDir, file)
|
|
51
|
+
.replace(/\.(yaml|yml|json)$/, '');
|
|
52
|
+
tests.push({
|
|
53
|
+
name: relativePath,
|
|
54
|
+
steps: def.steps?.length,
|
|
55
|
+
deps: def.depends_on || undefined,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
console.log(error(`Failed to load ${file}: ${err}`));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
printTestList(tests);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
console.log(error(`Failed to list tests: ${err}`));
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../../src/cli/commands/test/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +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;AAYpC,eAAO,MAAM,UAAU,SAoFnB,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* qa-use test run - Run test definitions
|
|
3
|
+
*/
|
|
4
|
+
import { Command } from 'commander';
|
|
5
|
+
import { loadConfig } from '../../lib/config.js';
|
|
6
|
+
import { loadTestWithDeps, loadAllTests, applyVariableOverrides } from '../../lib/loader.js';
|
|
7
|
+
import { runTest } from '../../lib/runner.js';
|
|
8
|
+
import { error, success } from '../../lib/output.js';
|
|
9
|
+
import { ApiClient } from '../../../../lib/api/index.js';
|
|
10
|
+
function collectVars(value, previous) {
|
|
11
|
+
const [key, val] = value.split('=');
|
|
12
|
+
return { ...previous, [key]: val };
|
|
13
|
+
}
|
|
14
|
+
export const runCommand = new Command('run')
|
|
15
|
+
.description('Run a test definition')
|
|
16
|
+
.argument('[test]', 'Test name or path (e.g., auth/login)')
|
|
17
|
+
.option('--id <uuid>', 'Run cloud test by ID instead of local file')
|
|
18
|
+
.option('--all', 'Run all tests in test directory')
|
|
19
|
+
.option('--persist', 'Save test to cloud after run')
|
|
20
|
+
.option('--no-headless', 'Show browser window')
|
|
21
|
+
.option('--no-autofix', 'Disable AI self-healing')
|
|
22
|
+
.option('--screenshots', 'Capture screenshots at each step')
|
|
23
|
+
.option('--var <key=value...>', 'Variable overrides', collectVars, {})
|
|
24
|
+
.option('--app-config-id <uuid>', 'App config ID to use')
|
|
25
|
+
.option('--timeout <seconds>', 'Timeout in seconds', '300')
|
|
26
|
+
.action(async (test, options) => {
|
|
27
|
+
try {
|
|
28
|
+
const config = await loadConfig();
|
|
29
|
+
// Check API key
|
|
30
|
+
if (!config.api_key) {
|
|
31
|
+
console.log(error('API key not configured'));
|
|
32
|
+
console.log(' Run `qa-use setup` to configure');
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
// Initialize API client
|
|
36
|
+
const client = new ApiClient(config.api_url);
|
|
37
|
+
client.setApiKey(config.api_key);
|
|
38
|
+
let testDefinitions;
|
|
39
|
+
if (options.id) {
|
|
40
|
+
// Run by cloud ID - no local definition needed
|
|
41
|
+
testDefinitions = undefined;
|
|
42
|
+
}
|
|
43
|
+
else if (options.all) {
|
|
44
|
+
// Load all test definitions
|
|
45
|
+
console.log('Loading all tests...');
|
|
46
|
+
testDefinitions = await loadAllTests(config.test_directory || './qa-tests');
|
|
47
|
+
console.log(success(`Loaded ${testDefinitions.length} tests\n`));
|
|
48
|
+
}
|
|
49
|
+
else if (test) {
|
|
50
|
+
// Load specific test and its dependencies
|
|
51
|
+
console.log(`Loading test: ${test}...`);
|
|
52
|
+
testDefinitions = await loadTestWithDeps(test, config.test_directory || './qa-tests');
|
|
53
|
+
console.log(success(`Loaded ${testDefinitions.length} test(s)\n`));
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
console.log(error('Usage: qa-use test run <test-name>'));
|
|
57
|
+
console.log(' qa-use test run --id <uuid>');
|
|
58
|
+
console.log(' qa-use test run --all');
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
// Apply variable overrides
|
|
62
|
+
if (testDefinitions && Object.keys(options.var).length > 0) {
|
|
63
|
+
applyVariableOverrides(testDefinitions, options.var);
|
|
64
|
+
console.log(success(`Applied ${Object.keys(options.var).length} variable overrides\n`));
|
|
65
|
+
}
|
|
66
|
+
// Run the test with SSE streaming
|
|
67
|
+
const result = await runTest(client, {
|
|
68
|
+
test_definitions: testDefinitions,
|
|
69
|
+
test_id: options.id,
|
|
70
|
+
persist: options.persist || config.defaults?.persist || false,
|
|
71
|
+
headless: options.headless !== false && (config.defaults?.headless ?? true),
|
|
72
|
+
allow_fix: options.autofix !== false && (config.defaults?.allow_fix ?? true),
|
|
73
|
+
capture_screenshots: options.screenshots || false,
|
|
74
|
+
});
|
|
75
|
+
// Print result summary
|
|
76
|
+
if (result.assets) {
|
|
77
|
+
console.log('\nAssets:');
|
|
78
|
+
if (result.assets.recording_url) {
|
|
79
|
+
console.log(` Recording: ${result.assets.recording_url}`);
|
|
80
|
+
}
|
|
81
|
+
if (result.assets.har_url) {
|
|
82
|
+
console.log(` HAR: ${result.assets.har_url}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Exit with appropriate code
|
|
86
|
+
if (result.status !== 'passed') {
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
console.log(error(`Test execution failed: ${err}`));
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../../src/cli/commands/test/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/test/validate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,eAAe,SAoExB,CAAC"}
|