@cotestdev/ai-runner-fake 0.0.4 → 0.0.6
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/runner.d.ts +2 -3
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +28 -21
- package/dist/runner.js.map +1 -1
- package/package.json +1 -1
- package/src/runner.ts +33 -24
package/dist/runner.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export declare class Runner {
|
|
2
2
|
private abortController;
|
|
3
|
-
private variables;
|
|
4
3
|
private projectId;
|
|
5
4
|
private testCaseId;
|
|
6
5
|
private state?;
|
|
@@ -14,9 +13,9 @@ export declare class Runner {
|
|
|
14
13
|
has(key: string): boolean;
|
|
15
14
|
delete(key: string): boolean;
|
|
16
15
|
clear(): void;
|
|
17
|
-
keys(): string[];
|
|
18
16
|
getAll(): Record<string, unknown>;
|
|
19
17
|
private loadTestScript;
|
|
20
|
-
|
|
18
|
+
runScript(testId: string, script: string): Promise<Record<string, unknown>>;
|
|
19
|
+
reuseTest(useTestCaseId: string, description?: string): Promise<Record<string, unknown>>;
|
|
21
20
|
}
|
|
22
21
|
//# sourceMappingURL=runner.d.ts.map
|
package/dist/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAYA,qBAAa,MAAM;IACjB,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,KAAK,CAAC,CAAQ;IAEtB,OAAO;IAMP,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,OAAc,GAAG,MAAM;IAK1F,IAAI;IAIE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IASxE,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;IAQ1D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAIlC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;IAOrB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IASzB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B,KAAK,IAAI,IAAI;IAIb,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIjC,OAAO,CAAC,cAAc;IAKhB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAwB3E,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAQ/F"}
|
package/dist/runner.js
CHANGED
|
@@ -39,7 +39,6 @@ const os_1 = require("os");
|
|
|
39
39
|
const fs_1 = require("fs");
|
|
40
40
|
class Runner {
|
|
41
41
|
constructor(projectId, testCaseId) {
|
|
42
|
-
this.variables = new Map();
|
|
43
42
|
this.abortController = new AbortController();
|
|
44
43
|
this.projectId = projectId;
|
|
45
44
|
this.testCaseId = testCaseId;
|
|
@@ -55,7 +54,8 @@ class Runner {
|
|
|
55
54
|
this.state = {
|
|
56
55
|
page: page,
|
|
57
56
|
context: context,
|
|
58
|
-
variables:
|
|
57
|
+
variables: {},
|
|
58
|
+
fixedVariables: data ?? {},
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
61
|
async runStep(description, fn) {
|
|
@@ -67,53 +67,60 @@ class Runner {
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
set(key, value) {
|
|
70
|
-
this.variables.set(key, value);
|
|
70
|
+
this.state.variables.set(key, value);
|
|
71
71
|
}
|
|
72
72
|
get(key) {
|
|
73
|
-
|
|
73
|
+
const value = this.state.variables.get(key);
|
|
74
|
+
if (!value) {
|
|
75
|
+
return this.state.fixedVariables[key];
|
|
76
|
+
}
|
|
74
77
|
}
|
|
75
78
|
has(key) {
|
|
76
|
-
|
|
79
|
+
const value = this.state.variables.has(key);
|
|
80
|
+
if (value) {
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
return this.state.fixedVariables.has(key);
|
|
77
84
|
}
|
|
78
85
|
delete(key) {
|
|
79
|
-
return this.variables.delete(key);
|
|
86
|
+
return this.state.variables.delete(key);
|
|
80
87
|
}
|
|
81
88
|
clear() {
|
|
82
|
-
this.variables.clear();
|
|
83
|
-
}
|
|
84
|
-
keys() {
|
|
85
|
-
return Array.from(this.variables.keys());
|
|
89
|
+
this.state.variables.clear();
|
|
86
90
|
}
|
|
87
91
|
getAll() {
|
|
88
|
-
return
|
|
92
|
+
return { ...this.state.fixedVariables, ...this.state.variables };
|
|
89
93
|
}
|
|
90
94
|
loadTestScript(testCaseId) {
|
|
91
95
|
const scriptPath = (0, path_1.join)((0, os_1.homedir)(), '.test_agent', 'projects', this.projectId, 'script', `${testCaseId}.ts`);
|
|
92
96
|
return (0, fs_1.readFileSync)(scriptPath, 'utf-8');
|
|
93
97
|
}
|
|
94
|
-
async
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
const reuseRunner = Runner.NewInstance(this.projectId, useTestCaseId);
|
|
100
|
-
await reuseRunner.init(this.state.page, this.state.context);
|
|
101
|
-
console.log(`Starting to execute reusable test case: ${description}`);
|
|
98
|
+
async runScript(testId, script) {
|
|
99
|
+
const reuseRunner = Runner.NewInstance(this.projectId, testId);
|
|
100
|
+
await reuseRunner.init(this.state.page, this.state.context, { ...this.getAll() });
|
|
101
|
+
console.log(`Starting to execute reusable test case: ${testId}`);
|
|
102
102
|
try {
|
|
103
103
|
const executeScript = new Function('runner', 'page', 'context', 'expect', `
|
|
104
104
|
return (async () => {
|
|
105
|
-
${
|
|
105
|
+
${script}
|
|
106
106
|
})();
|
|
107
107
|
`);
|
|
108
108
|
const { expect } = await Promise.resolve().then(() => __importStar(require('@playwright/test')));
|
|
109
109
|
await executeScript(reuseRunner, this.state.page, this.state.context, expect);
|
|
110
110
|
console.log(`Reusable test case executed successfully`);
|
|
111
|
-
return reuseRunner.state?.variables ||
|
|
111
|
+
return { ...reuseRunner.state?.variables || {} };
|
|
112
112
|
}
|
|
113
113
|
catch (error) {
|
|
114
114
|
throw new Error(`reuseTest execution failed, error: ${error instanceof Error ? error.message : String(error)}`);
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
+
async reuseTest(useTestCaseId, description) {
|
|
118
|
+
const scriptContent = this.loadTestScript(useTestCaseId);
|
|
119
|
+
if (!scriptContent) {
|
|
120
|
+
throw new Error(`Reusable test script not found: ${useTestCaseId}`);
|
|
121
|
+
}
|
|
122
|
+
return this.runScript(useTestCaseId, scriptContent);
|
|
123
|
+
}
|
|
117
124
|
}
|
|
118
125
|
exports.Runner = Runner;
|
|
119
126
|
//# sourceMappingURL=runner.js.map
|
package/dist/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAA4B;AAC5B,2BAA6B;AAC7B,2BAAkC;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/runner.ts
CHANGED
|
@@ -6,12 +6,12 @@ import { readFileSync } from 'fs';
|
|
|
6
6
|
interface State {
|
|
7
7
|
context: any;
|
|
8
8
|
page: any;
|
|
9
|
-
variables:
|
|
9
|
+
variables: Record<string, any>;
|
|
10
|
+
fixedVariables: Record<string, any>;
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
export class Runner {
|
|
13
14
|
private abortController: AbortController;
|
|
14
|
-
private variables: Map<string, any> = new Map<string, any>();
|
|
15
15
|
private projectId: string;
|
|
16
16
|
private testCaseId: string;
|
|
17
17
|
private state?: State;
|
|
@@ -35,7 +35,8 @@ export class Runner {
|
|
|
35
35
|
this.state = {
|
|
36
36
|
page: page,
|
|
37
37
|
context: context,
|
|
38
|
-
variables:
|
|
38
|
+
variables: {},
|
|
39
|
+
fixedVariables: data ?? {},
|
|
39
40
|
}
|
|
40
41
|
}
|
|
41
42
|
|
|
@@ -48,31 +49,35 @@ export class Runner {
|
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
set(key: string, value: any): void {
|
|
51
|
-
this.variables.set(key, value);
|
|
52
|
+
this.state!.variables.set(key, value);
|
|
52
53
|
}
|
|
53
54
|
|
|
54
55
|
get(key: string): any {
|
|
55
|
-
|
|
56
|
+
const value = this.state!.variables.get(key);
|
|
57
|
+
if (!value) {
|
|
58
|
+
return this.state!.fixedVariables[key];
|
|
59
|
+
}
|
|
56
60
|
}
|
|
57
61
|
|
|
58
62
|
has(key: string): boolean {
|
|
59
|
-
|
|
63
|
+
const value = this.state!.variables.has(key);
|
|
64
|
+
if (value) {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return this.state!.fixedVariables.has(key);
|
|
60
69
|
}
|
|
61
70
|
|
|
62
71
|
delete(key: string): boolean {
|
|
63
|
-
return this.variables.delete(key);
|
|
72
|
+
return this.state!.variables.delete(key);
|
|
64
73
|
}
|
|
65
74
|
|
|
66
75
|
clear(): void {
|
|
67
|
-
this.variables.clear();
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
keys(): string[] {
|
|
71
|
-
return Array.from(this.variables.keys());
|
|
76
|
+
this.state!.variables.clear();
|
|
72
77
|
}
|
|
73
78
|
|
|
74
79
|
getAll(): Record<string, unknown> {
|
|
75
|
-
return
|
|
80
|
+
return { ...this.state!.fixedVariables, ...this.state!.variables };
|
|
76
81
|
}
|
|
77
82
|
|
|
78
83
|
private loadTestScript(testCaseId: string): string {
|
|
@@ -80,21 +85,16 @@ export class Runner {
|
|
|
80
85
|
return readFileSync(scriptPath, 'utf-8');
|
|
81
86
|
}
|
|
82
87
|
|
|
83
|
-
async
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
throw new Error(`Reusable test script not found: ${useTestCaseId}`);
|
|
87
|
-
}
|
|
88
|
+
async runScript(testId: string, script: string): Promise<Record<string, unknown>> {
|
|
89
|
+
const reuseRunner = Runner.NewInstance(this.projectId, testId);
|
|
90
|
+
await reuseRunner.init(this.state!.page, this.state!.context, { ...this.getAll() });
|
|
88
91
|
|
|
89
|
-
|
|
90
|
-
await reuseRunner.init(this.state!.page, this.state!.context);
|
|
91
|
-
|
|
92
|
-
console.log(`Starting to execute reusable test case: ${description}`);
|
|
92
|
+
console.log(`Starting to execute reusable test case: ${testId}`);
|
|
93
93
|
|
|
94
94
|
try {
|
|
95
95
|
const executeScript = new Function('runner', 'page', 'context', 'expect', `
|
|
96
96
|
return (async () => {
|
|
97
|
-
${
|
|
97
|
+
${script}
|
|
98
98
|
})();
|
|
99
99
|
`);
|
|
100
100
|
|
|
@@ -103,9 +103,18 @@ export class Runner {
|
|
|
103
103
|
|
|
104
104
|
console.log(`Reusable test case executed successfully`);
|
|
105
105
|
|
|
106
|
-
return reuseRunner.state?.variables ||
|
|
106
|
+
return { ...reuseRunner.state?.variables || {} };
|
|
107
107
|
} catch (error) {
|
|
108
108
|
throw new Error(`reuseTest execution failed, error: ${error instanceof Error ? error.message : String(error)}`);
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
|
+
|
|
112
|
+
async reuseTest(useTestCaseId: string, description?: string): Promise<Record<string, unknown>> {
|
|
113
|
+
const scriptContent = this.loadTestScript(useTestCaseId);
|
|
114
|
+
if (!scriptContent) {
|
|
115
|
+
throw new Error(`Reusable test script not found: ${useTestCaseId}`);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return this.runScript(useTestCaseId, scriptContent);
|
|
119
|
+
}
|
|
111
120
|
}
|