@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 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
- reuseTest(useTestCaseId: string, description: string): Promise<Map<string, unknown>>;
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
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAWA,qBAAa,MAAM;IACjB,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,SAAS,CAA4C;IAC7D,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;IAQxE,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;IAIrB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,MAAM,EAAE;IAIhB,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIjC,OAAO,CAAC,cAAc;IAKhB,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CA4B3F"}
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: this.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
- return this.variables.get(key);
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
- return this.variables.has(key);
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 Object.fromEntries(this.variables);
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 reuseTest(useTestCaseId, description) {
95
- const scriptContent = this.loadTestScript(useTestCaseId);
96
- if (!scriptContent) {
97
- throw new Error(`Reusable test script not found: ${useTestCaseId}`);
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
- ${scriptContent}
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 || new Map();
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
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cotestdev/ai-runner-fake",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "description": "AI-powered self-healing SDK for Playwright test scripts",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
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: Map<string, any>;
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: this.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
- return this.variables.get(key);
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
- return this.variables.has(key);
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 Object.fromEntries(this.variables);
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 reuseTest(useTestCaseId: string, description: string): Promise<Map<string, unknown>> {
84
- const scriptContent = this.loadTestScript(useTestCaseId);
85
- if (!scriptContent) {
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
- const reuseRunner = Runner.NewInstance(this.projectId, useTestCaseId);
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
- ${scriptContent}
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 || new Map<string, unknown>();
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
  }