@sudobility/testomniac_runner_service 0.1.40 → 0.1.43

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.
Files changed (88) hide show
  1. package/CLAUDE.md +15 -15
  2. package/dist/analyzer/page-analyzer.d.ts +20 -18
  3. package/dist/analyzer/page-analyzer.d.ts.map +1 -1
  4. package/dist/analyzer/page-analyzer.js +103 -83
  5. package/dist/analyzer/page-analyzer.js.map +1 -1
  6. package/dist/api/client.d.ts +22 -22
  7. package/dist/api/client.d.ts.map +1 -1
  8. package/dist/api/client.js +57 -53
  9. package/dist/api/client.js.map +1 -1
  10. package/dist/detectors/action-description.d.ts +1 -1
  11. package/dist/detectors/action-description.d.ts.map +1 -1
  12. package/dist/detectors/action-description.js +1 -1
  13. package/dist/detectors/action-description.js.map +1 -1
  14. package/dist/detectors/index.d.ts +1 -1
  15. package/dist/detectors/index.d.ts.map +1 -1
  16. package/dist/detectors/index.js +1 -1
  17. package/dist/detectors/index.js.map +1 -1
  18. package/dist/domain/types.d.ts +1 -1
  19. package/dist/domain/types.d.ts.map +1 -1
  20. package/dist/expertise/index.d.ts +1 -0
  21. package/dist/expertise/index.d.ts.map +1 -1
  22. package/dist/expertise/index.js +33 -9
  23. package/dist/expertise/index.js.map +1 -1
  24. package/dist/expertise/tester-expertise.d.ts +1 -1
  25. package/dist/expertise/tester-expertise.js +1 -1
  26. package/dist/generation/e2e.d.ts +2 -2
  27. package/dist/generation/e2e.d.ts.map +1 -1
  28. package/dist/generation/e2e.js +3 -3
  29. package/dist/generation/e2e.js.map +1 -1
  30. package/dist/generation/form-negative.d.ts +2 -2
  31. package/dist/generation/form-negative.d.ts.map +1 -1
  32. package/dist/generation/form-negative.js +3 -3
  33. package/dist/generation/form-negative.js.map +1 -1
  34. package/dist/generation/form.d.ts +2 -2
  35. package/dist/generation/form.d.ts.map +1 -1
  36. package/dist/generation/form.js +3 -3
  37. package/dist/generation/form.js.map +1 -1
  38. package/dist/generation/generator.d.ts +2 -2
  39. package/dist/generation/generator.d.ts.map +1 -1
  40. package/dist/generation/generator.js +2 -2
  41. package/dist/generation/generator.js.map +1 -1
  42. package/dist/generation/interaction.d.ts +2 -2
  43. package/dist/generation/interaction.d.ts.map +1 -1
  44. package/dist/generation/interaction.js +3 -3
  45. package/dist/generation/interaction.js.map +1 -1
  46. package/dist/generation/navigation.d.ts +2 -2
  47. package/dist/generation/navigation.d.ts.map +1 -1
  48. package/dist/generation/navigation.js +3 -3
  49. package/dist/generation/navigation.js.map +1 -1
  50. package/dist/generation/password.d.ts +4 -4
  51. package/dist/generation/password.d.ts.map +1 -1
  52. package/dist/generation/password.js +3 -3
  53. package/dist/generation/password.js.map +1 -1
  54. package/dist/generation/playwright-export.d.ts +2 -2
  55. package/dist/generation/playwright-export.d.ts.map +1 -1
  56. package/dist/generation/playwright-export.js +3 -3
  57. package/dist/generation/playwright-export.js.map +1 -1
  58. package/dist/generation/render.d.ts +7 -7
  59. package/dist/generation/render.d.ts.map +1 -1
  60. package/dist/generation/render.js +3 -3
  61. package/dist/generation/render.js.map +1 -1
  62. package/dist/generation/surface-tagger.d.ts +4 -0
  63. package/dist/generation/surface-tagger.d.ts.map +1 -0
  64. package/dist/generation/{suite-tagger.js → surface-tagger.js} +2 -2
  65. package/dist/generation/surface-tagger.js.map +1 -0
  66. package/dist/index.d.ts +6 -6
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +4 -4
  69. package/dist/index.js.map +1 -1
  70. package/dist/orchestrator/runner.d.ts +1 -1
  71. package/dist/orchestrator/runner.d.ts.map +1 -1
  72. package/dist/orchestrator/runner.js +56 -40
  73. package/dist/orchestrator/runner.js.map +1 -1
  74. package/dist/orchestrator/test-element-executor.d.ts +15 -0
  75. package/dist/orchestrator/test-element-executor.d.ts.map +1 -0
  76. package/dist/orchestrator/{test-case-executor.js → test-element-executor.js} +60 -55
  77. package/dist/orchestrator/test-element-executor.js.map +1 -0
  78. package/dist/orchestrator/types.d.ts +4 -4
  79. package/dist/orchestrator/types.d.ts.map +1 -1
  80. package/dist/planners/fill-value-planner.js +1 -1
  81. package/dist/planners/fill-value-planner.js.map +1 -1
  82. package/package.json +3 -3
  83. package/dist/generation/suite-tagger.d.ts +0 -4
  84. package/dist/generation/suite-tagger.d.ts.map +0 -1
  85. package/dist/generation/suite-tagger.js.map +0 -1
  86. package/dist/orchestrator/test-case-executor.d.ts +0 -15
  87. package/dist/orchestrator/test-case-executor.d.ts.map +0 -1
  88. package/dist/orchestrator/test-case-executor.js.map +0 -1
package/CLAUDE.md CHANGED
@@ -6,7 +6,7 @@ Shared execution and discovery library used by Testomniac runner clients.
6
6
 
7
7
  This package owns the active runtime architecture for:
8
8
 
9
- - executing persisted test suites, cases, and case runs
9
+ - executing persisted test surfaces, cases, and element runs
10
10
  - analyzing resulting browser states
11
11
  - generating discovery-time follow-up coverage
12
12
  - evaluating expertises and recording findings
@@ -20,38 +20,38 @@ the runtime entry point.
20
20
 
21
21
  Persistent coverage:
22
22
 
23
- - `test_suite_bundle`
24
- - `test_suite`
25
- - `test_case`
23
+ - `test_surface_bundle`
24
+ - `test_surface`
25
+ - `test_element`
26
26
  - `test_action`
27
27
 
28
28
  Run records:
29
29
 
30
30
  - `test_run`
31
- - `test_suite_bundle_run`
32
- - `test_suite_run`
33
- - `test_case_run`
31
+ - `test_surface_bundle_run`
32
+ - `test_surface_run`
33
+ - `test_element_run`
34
34
  - `test_run_finding`
35
35
 
36
36
  ## Execution Flow
37
37
 
38
38
  1. A client calls `runTestRun()`.
39
39
  2. The runner claims the `test_run`.
40
- 3. It loads the active bundle run and iterates pending suite runs.
41
- 4. For each suite run, it iterates pending case runs whose dependencies are
40
+ 3. It loads the active bundle run and iterates pending surface runs.
41
+ 4. For each surface run, it iterates pending element runs whose dependencies are
42
42
  ready.
43
- 5. `executeTestCase()` navigates, recreates dependency setup when needed,
43
+ 5. `executeTestElement()` navigates, recreates dependency setup when needed,
44
44
  executes actions, gathers runtime artifacts, and runs expertises.
45
45
  6. If the root run is a discovery run, `PageAnalyzer` creates or resolves the
46
46
  target page state and generates follow-up cases and runs.
47
- 7. The runner completes suite runs, bundle runs, and the root test run.
47
+ 7. The runner completes surface runs, bundle runs, and the root test run.
48
48
 
49
49
  ## Discovery Rules
50
50
 
51
- - Every actionable element starts with a hover test case.
51
+ - Every actionable element starts with a hover test element.
52
52
  - After hover:
53
- - if no new actionable items appear, generate a dependent click test case
54
- - if new actionable items appear, generate dependent hover test cases from
53
+ - if no new actionable items appear, generate a dependent click test element
54
+ - if new actionable items appear, generate dependent hover test elements from
55
55
  the hover target page state
56
56
  - `PageAnalyzer` owns target-page-state creation and follow-up case generation.
57
57
  - Expertises do not generate coverage.
@@ -61,7 +61,7 @@ Run records:
61
61
  - [`src/adapter.ts`](src/adapter.ts): browser abstraction
62
62
  - [`src/api/client.ts`](src/api/client.ts): scanner API client
63
63
  - [`src/orchestrator/runner.ts`](src/orchestrator/runner.ts): `runTestRun()`
64
- - [`src/orchestrator/test-case-executor.ts`](src/orchestrator/test-case-executor.ts):
64
+ - [`src/orchestrator/test-element-executor.ts`](src/orchestrator/test-element-executor.ts):
65
65
  single-case execution
66
66
  - [`src/analyzer/page-analyzer.ts`](src/analyzer/page-analyzer.ts):
67
67
  discovery-time target-state and follow-up coverage logic
@@ -1,13 +1,14 @@
1
- import type { TestCase, Expectation, ActionableItem, SizeClass, TestSuiteResponse, TestSuiteBundleRunResponse } from "@sudobility/testomniac_types";
1
+ import type { TestElement, Expectation, ActionableItem, SizeClass, TestSurfaceResponse, TestSurfaceBundleRunResponse } from "@sudobility/testomniac_types";
2
2
  import type { ApiClient } from "../api/client";
3
3
  import type { DetectedScaffoldRegion } from "../scanner/component-detector";
4
+ import type { ScanEventHandler } from "../orchestrator/types";
4
5
  export interface AnalyzerContext {
5
6
  runnerId: number;
6
7
  sizeClass: SizeClass;
7
8
  uid?: string;
8
- currentTestCaseId: number;
9
- currentTestSuiteId: number;
10
- currentSuiteRunId: number | null;
9
+ currentTestElementId: number;
10
+ currentTestSurfaceId: number;
11
+ currentSurfaceRunId: number | null;
11
12
  html: string;
12
13
  currentPageStateId: number;
13
14
  beginningPageStateId: number;
@@ -16,35 +17,36 @@ export interface AnalyzerContext {
16
17
  pageRequiresLogin: boolean;
17
18
  scaffolds: DetectedScaffoldRegion[];
18
19
  actionableItems: ActionableItem[];
19
- navigationSuite: TestSuiteResponse;
20
- bundleRun: TestSuiteBundleRunResponse;
20
+ navigationSurface: TestSurfaceResponse;
21
+ bundleRun: TestSurfaceBundleRunResponse;
21
22
  api: ApiClient;
23
+ events: ScanEventHandler;
22
24
  }
23
25
  /**
24
- * PageAnalyzer generates expectations and discovers new test cases
26
+ * PageAnalyzer generates expectations and discovers new test elements
25
27
  * during discovery mode.
26
28
  */
27
29
  export declare class PageAnalyzer {
28
30
  /**
29
- * Generate baseline expectations for a test case.
31
+ * Generate baseline expectations for a test element.
30
32
  * Called BEFORE expertises evaluate.
31
33
  */
32
- generateExpectations(testCase: TestCase): Expectation[];
34
+ generateExpectations(testElement: TestElement): Expectation[];
33
35
  /**
34
- * Generate new test cases for scaffolds and page content.
36
+ * Generate new test elements for scaffolds and page content.
35
37
  * Called AFTER expertises evaluate and the target page state is established.
36
38
  */
37
- generateTestCases(testCase: TestCase, context: AnalyzerContext): Promise<void>;
39
+ generateTestElements(testElement: TestElement, context: AnalyzerContext): Promise<void>;
38
40
  private generateHoverFollowUpCases;
39
- private generateNavigationTestCases;
40
- private generateScaffoldTestCases;
41
- private generateContentTestCases;
42
- private ensureSuiteRun;
41
+ private generateNavigationTestElements;
42
+ private generateScaffoldTestElements;
43
+ private generateContentTestElements;
44
+ private ensureSurfaceRun;
43
45
  private isMouseActionable;
44
46
  private extractRelativePath;
45
- private buildNavigationTestCase;
46
- private buildHoverTestCase;
47
- private buildClickTestCase;
47
+ private buildNavigationTestElement;
48
+ private buildHoverTestElement;
49
+ private buildClickTestElement;
48
50
  private isHoverOnly;
49
51
  private getPrimarySelector;
50
52
  private getItemKey;
@@ -1 +1 @@
1
- {"version":3,"file":"page-analyzer.d.ts","sourceRoot":"","sources":["../../src/analyzer/page-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACX,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,0BAA0B,EAG3B,MAAM,8BAA8B,CAAC;AAOtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAG5E,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,sBAAsB,EAAE,CAAC;IACpC,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,eAAe,EAAE,iBAAiB,CAAC;IACnC,SAAS,EAAE,0BAA0B,CAAC;IACtC,GAAG,EAAE,SAAS,CAAC;CAChB;AAED;;;GAGG;AACH,qBAAa,YAAY;IACvB;;;OAGG;IACH,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,EAAE;IAiCvD;;;OAGG;IACG,iBAAiB,CACrB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC;YAsBF,0BAA0B;YAkE1B,2BAA2B;YA+C3B,yBAAyB;YA6CzB,wBAAwB;YAiDxB,cAAc;IAkB5B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,uBAAuB;IAgC/B,OAAO,CAAC,kBAAkB;IAoC1B,OAAO,CAAC,kBAAkB;IAoC1B,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,UAAU;YAUJ,qBAAqB;CAqCpC"}
1
+ {"version":3,"file":"page-analyzer.d.ts","sourceRoot":"","sources":["../../src/analyzer/page-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,cAAc,EACd,SAAS,EACT,mBAAmB,EACnB,4BAA4B,EAG7B,MAAM,8BAA8B,CAAC;AAOtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAE5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,sBAAsB,EAAE,CAAC;IACpC,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,iBAAiB,EAAE,mBAAmB,CAAC;IACvC,SAAS,EAAE,4BAA4B,CAAC;IACxC,GAAG,EAAE,SAAS,CAAC;IACf,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED;;;GAGG;AACH,qBAAa,YAAY;IACvB;;;OAGG;IACH,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,WAAW,EAAE;IAiC7D;;;OAGG;IACG,oBAAoB,CACxB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC;YAsBF,0BAA0B;YAkE1B,8BAA8B;YA+C9B,4BAA4B;YA4D5B,2BAA2B;YA4D3B,gBAAgB;IAkB9B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,0BAA0B;IAgClC,OAAO,CAAC,qBAAqB;IAoC7B,OAAO,CAAC,qBAAqB;IAoC7B,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,UAAU;YAUJ,qBAAqB;CAiDpC"}
@@ -2,15 +2,15 @@ import { PlaywrightAction, ExpectationType, ExpectationSeverity, } from "@sudobi
2
2
  import { computeHashes } from "../browser/page-utils";
3
3
  import { createHash } from "node:crypto";
4
4
  /**
5
- * PageAnalyzer generates expectations and discovers new test cases
5
+ * PageAnalyzer generates expectations and discovers new test elements
6
6
  * during discovery mode.
7
7
  */
8
8
  export class PageAnalyzer {
9
9
  /**
10
- * Generate baseline expectations for a test case.
10
+ * Generate baseline expectations for a test element.
11
11
  * Called BEFORE expertises evaluate.
12
12
  */
13
- generateExpectations(testCase) {
13
+ generateExpectations(testElement) {
14
14
  const expectations = [
15
15
  {
16
16
  expectationType: ExpectationType.PageLoaded,
@@ -19,9 +19,9 @@ export class PageAnalyzer {
19
19
  playwrightCode: "await expect(page).not.toHaveTitle(/error/i)",
20
20
  },
21
21
  ];
22
- // If test case has only a navigation action, no more expectations
23
- const isNavigationOnly = testCase.steps.length === 1 &&
24
- testCase.steps[0].action.actionType === PlaywrightAction.Goto;
22
+ // If test element has only a navigation action, no more expectations
23
+ const isNavigationOnly = testElement.steps.length === 1 &&
24
+ testElement.steps[0].action.actionType === PlaywrightAction.Goto;
25
25
  if (!isNavigationOnly) {
26
26
  expectations.push({
27
27
  expectationType: ExpectationType.NoConsoleErrors,
@@ -39,28 +39,28 @@ export class PageAnalyzer {
39
39
  return expectations;
40
40
  }
41
41
  /**
42
- * Generate new test cases for scaffolds and page content.
42
+ * Generate new test elements for scaffolds and page content.
43
43
  * Called AFTER expertises evaluate and the target page state is established.
44
44
  */
45
- async generateTestCases(testCase, context) {
45
+ async generateTestElements(testElement, context) {
46
46
  const currentPageStateId = await this.ensureTargetPageState(context);
47
47
  const resolvedContext = {
48
48
  ...context,
49
49
  currentPageStateId,
50
50
  };
51
- if (this.isHoverOnly(testCase)) {
52
- await this.generateHoverFollowUpCases(testCase, resolvedContext);
51
+ if (this.isHoverOnly(testElement)) {
52
+ await this.generateHoverFollowUpCases(testElement, resolvedContext);
53
53
  return;
54
54
  }
55
- // a. Navigation test cases — for every link on the page
56
- await this.generateNavigationTestCases(resolvedContext);
57
- // b. Scaffold test cases — for each scaffold's actionable elements
58
- await this.generateScaffoldTestCases(resolvedContext);
59
- // c. Content test cases — for non-scaffold actionable elements
60
- await this.generateContentTestCases(resolvedContext);
55
+ // a. Navigation test elements — for every link on the page
56
+ await this.generateNavigationTestElements(resolvedContext);
57
+ // b. Scaffold test elements — for each scaffold's actionable elements
58
+ await this.generateScaffoldTestElements(resolvedContext);
59
+ // c. Content test elements — for non-scaffold actionable elements
60
+ await this.generateContentTestElements(resolvedContext);
61
61
  }
62
- async generateHoverFollowUpCases(testCase, context) {
63
- const selector = this.getPrimarySelector(testCase);
62
+ async generateHoverFollowUpCases(testElement, context) {
63
+ const selector = this.getPrimarySelector(testElement);
64
64
  if (!selector || !context.currentPageStateId)
65
65
  return;
66
66
  const beginningItems = context.beginningPageStateId > 0
@@ -75,114 +75,122 @@ export class PageAnalyzer {
75
75
  });
76
76
  const hoveredItem = context.actionableItems.find(item => item.selector === selector) ?? null;
77
77
  if (revealedItems.length === 0 && hoveredItem) {
78
- const clickCase = this.buildClickTestCase(hoveredItem, context.currentPath, context.sizeClass, context.uid, context.currentPageStateId, context.currentTestCaseId);
79
- const tc = await context.api.ensureTestCase(context.runnerId, context.currentTestSuiteId, clickCase);
80
- await context.api.createTestCaseRun({
81
- testCaseId: tc.id,
82
- testSuiteRunId: context.currentSuiteRunId ?? undefined,
78
+ const clickCase = this.buildClickTestElement(hoveredItem, context.currentPath, context.sizeClass, context.uid, context.currentPageStateId, context.currentTestElementId);
79
+ const tc = await context.api.ensureTestElement(context.runnerId, context.currentTestSurfaceId, clickCase);
80
+ await context.api.createTestElementRun({
81
+ testElementId: tc.id,
82
+ testSurfaceRunId: context.currentSurfaceRunId ?? undefined,
83
83
  });
84
84
  return;
85
85
  }
86
86
  for (const item of revealedItems) {
87
- const nextHover = this.buildHoverTestCase(item, context.currentPath, context.sizeClass, context.uid, context.currentPageStateId, context.currentTestCaseId);
88
- const tc = await context.api.ensureTestCase(context.runnerId, context.currentTestSuiteId, nextHover);
89
- await context.api.createTestCaseRun({
90
- testCaseId: tc.id,
91
- testSuiteRunId: context.currentSuiteRunId ?? undefined,
87
+ const nextHover = this.buildHoverTestElement(item, context.currentPath, context.sizeClass, context.uid, context.currentPageStateId, context.currentTestElementId);
88
+ const tc = await context.api.ensureTestElement(context.runnerId, context.currentTestSurfaceId, nextHover);
89
+ await context.api.createTestElementRun({
90
+ testElementId: tc.id,
91
+ testSurfaceRunId: context.currentSurfaceRunId ?? undefined,
92
92
  });
93
93
  }
94
94
  }
95
- async generateNavigationTestCases(context) {
95
+ async generateNavigationTestElements(context) {
96
96
  if (context.pageRequiresLogin)
97
97
  return;
98
- const { api, runnerId, sizeClass, uid, navigationSuite, bundleRun } = context;
98
+ const { api, runnerId, sizeClass, uid, navigationSurface, bundleRun } = context;
99
99
  const links = context.actionableItems.filter(item => item.actionKind === "navigate" && item.href && item.visible);
100
- // Ensure navigation suite is in the bundle
101
- await api.ensureBundleSuiteLink(bundleRun.testSuiteBundleId, navigationSuite.id);
102
- // Ensure a suite run exists for the navigation suite under this bundle run
103
- const suiteRun = await this.ensureSuiteRun(api, navigationSuite.id, bundleRun.id);
100
+ // Ensure navigation surface is in the bundle
101
+ await api.ensureBundleSurfaceLink(bundleRun.testSurfaceBundleId, navigationSurface.id);
102
+ // Ensure a surface run exists for the navigation surface under this bundle run
103
+ const surfaceRun = await this.ensureSurfaceRun(api, navigationSurface.id, bundleRun.id);
104
104
  for (const link of links) {
105
105
  if (!link.href)
106
106
  continue;
107
107
  const path = this.extractRelativePath(link.href);
108
108
  if (!path)
109
109
  continue;
110
- const testCase = this.buildNavigationTestCase(path, sizeClass, uid, context.currentPageStateId);
111
- const tc = await api.ensureTestCase(runnerId, navigationSuite.id, testCase);
112
- await api.createTestCaseRun({
113
- testCaseId: tc.id,
114
- testSuiteRunId: suiteRun.id,
110
+ const testElement = this.buildNavigationTestElement(path, sizeClass, uid, context.currentPageStateId);
111
+ const tc = await api.ensureTestElement(runnerId, navigationSurface.id, testElement);
112
+ await api.createTestElementRun({
113
+ testElementId: tc.id,
114
+ testSurfaceRunId: surfaceRun.id,
115
115
  });
116
116
  }
117
117
  }
118
- async generateScaffoldTestCases(context) {
118
+ async generateScaffoldTestElements(context) {
119
119
  const { api, runnerId, sizeClass, uid, bundleRun } = context;
120
120
  for (const scaffold of context.scaffolds) {
121
121
  // Find actionable items belonging to this scaffold
122
122
  const scaffoldItems = context.actionableItems.filter(item => item.scaffoldId != null && this.isMouseActionable(item));
123
123
  if (scaffoldItems.length === 0)
124
124
  continue;
125
- // Ensure a test suite for this scaffold
126
- const suiteTitle = `Scaffold: ${scaffold.type}`;
127
- const suite = await api.ensureTestSuite(runnerId, {
128
- title: suiteTitle,
125
+ // Ensure a test surface for this scaffold
126
+ const surfaceTitle = `Scaffold: ${scaffold.type}`;
127
+ const surface = await api.ensureTestSurface(runnerId, {
128
+ title: surfaceTitle,
129
129
  description: `Tests for ${scaffold.type} scaffold`,
130
130
  startingPageStateId: context.currentPageStateId,
131
131
  startingPath: context.currentPath,
132
132
  sizeClass,
133
133
  priority: 3,
134
- suite_tags: ["scaffold", scaffold.type],
134
+ surface_tags: ["scaffold", scaffold.type],
135
135
  uid,
136
136
  });
137
- await api.ensureBundleSuiteLink(bundleRun.testSuiteBundleId, suite.id);
138
- const suiteRun = await this.ensureSuiteRun(api, suite.id, bundleRun.id);
137
+ context.events.onTestSurfaceCreated({
138
+ surfaceId: surface.id,
139
+ title: surface.title,
140
+ });
141
+ await api.ensureBundleSurfaceLink(bundleRun.testSurfaceBundleId, surface.id);
142
+ const surfaceRun = await this.ensureSurfaceRun(api, surface.id, bundleRun.id);
139
143
  for (const item of scaffoldItems) {
140
- const testCase = this.buildHoverTestCase(item, context.currentPath, sizeClass, uid, context.currentPageStateId);
141
- const tc = await api.ensureTestCase(runnerId, suite.id, testCase);
142
- await api.createTestCaseRun({
143
- testCaseId: tc.id,
144
- testSuiteRunId: suiteRun.id,
144
+ const testElement = this.buildHoverTestElement(item, context.currentPath, sizeClass, uid, context.currentPageStateId);
145
+ const tc = await api.ensureTestElement(runnerId, surface.id, testElement);
146
+ await api.createTestElementRun({
147
+ testElementId: tc.id,
148
+ testSurfaceRunId: surfaceRun.id,
145
149
  });
146
150
  }
147
151
  }
148
152
  }
149
- async generateContentTestCases(context) {
153
+ async generateContentTestElements(context) {
150
154
  const { api, runnerId, sizeClass, uid, bundleRun, pageId: _pageId, } = context;
151
155
  // Content items are those NOT in a scaffold
152
156
  const contentItems = context.actionableItems.filter(item => item.scaffoldId == null && this.isMouseActionable(item));
153
157
  if (contentItems.length === 0)
154
158
  return;
155
- const suiteTitle = `Page: ${context.currentPath}`;
156
- const suite = await api.ensureTestSuite(runnerId, {
157
- title: suiteTitle,
159
+ const surfaceTitle = `Page: ${context.currentPath}`;
160
+ const surface = await api.ensureTestSurface(runnerId, {
161
+ title: surfaceTitle,
158
162
  description: `Tests for page content at ${context.currentPath}`,
159
163
  startingPageStateId: context.currentPageStateId,
160
164
  startingPath: context.currentPath,
161
165
  sizeClass,
162
166
  priority: 3,
163
- suite_tags: ["page-content"],
167
+ surface_tags: ["page-content"],
164
168
  uid,
165
169
  });
166
- await api.ensureBundleSuiteLink(bundleRun.testSuiteBundleId, suite.id);
167
- const suiteRun = await this.ensureSuiteRun(api, suite.id, bundleRun.id);
170
+ context.events.onTestSurfaceCreated({
171
+ surfaceId: surface.id,
172
+ title: surface.title,
173
+ });
174
+ await api.ensureBundleSurfaceLink(bundleRun.testSurfaceBundleId, surface.id);
175
+ const surfaceRun = await this.ensureSurfaceRun(api, surface.id, bundleRun.id);
168
176
  for (const item of contentItems) {
169
- const testCase = this.buildHoverTestCase(item, context.currentPath, sizeClass, uid, context.currentPageStateId);
170
- const tc = await api.ensureTestCase(runnerId, suite.id, testCase);
171
- await api.createTestCaseRun({
172
- testCaseId: tc.id,
173
- testSuiteRunId: suiteRun.id,
177
+ const testElement = this.buildHoverTestElement(item, context.currentPath, sizeClass, uid, context.currentPageStateId);
178
+ const tc = await api.ensureTestElement(runnerId, surface.id, testElement);
179
+ await api.createTestElementRun({
180
+ testElementId: tc.id,
181
+ testSurfaceRunId: surfaceRun.id,
174
182
  });
175
183
  }
176
184
  }
177
- async ensureSuiteRun(api, testSuiteId, bundleRunId) {
178
- const openSuiteRuns = await api.getOpenTestSuiteRuns(bundleRunId);
179
- const existing = openSuiteRuns.find(suiteRun => suiteRun.testSuiteId === testSuiteId);
185
+ async ensureSurfaceRun(api, testSurfaceId, bundleRunId) {
186
+ const openSurfaceRuns = await api.getOpenTestSurfaceRuns(bundleRunId);
187
+ const existing = openSurfaceRuns.find(surfaceRun => surfaceRun.testSurfaceId === testSurfaceId);
180
188
  if (existing) {
181
189
  return existing;
182
190
  }
183
- return api.createTestSuiteRun({
184
- testSuiteId,
185
- testSuiteBundleRunId: bundleRunId,
191
+ return api.createTestSurfaceRun({
192
+ testSurfaceId,
193
+ testSurfaceBundleRunId: bundleRunId,
186
194
  });
187
195
  }
188
196
  isMouseActionable(item) {
@@ -199,12 +207,12 @@ export class PageAnalyzer {
199
207
  return null;
200
208
  }
201
209
  }
202
- buildNavigationTestCase(path, sizeClass, uid, startingPageStateId) {
210
+ buildNavigationTestElement(path, sizeClass, uid, startingPageStateId) {
203
211
  return {
204
212
  title: `Navigate to ${path}`,
205
213
  type: "navigation",
206
214
  sizeClass,
207
- suite_tags: ["navigation"],
215
+ surface_tags: ["navigation"],
208
216
  priority: 3,
209
217
  startingPageStateId,
210
218
  startingPath: path,
@@ -225,15 +233,15 @@ export class PageAnalyzer {
225
233
  uid,
226
234
  };
227
235
  }
228
- buildHoverTestCase(item, startingPath, sizeClass, uid, startingPageStateId, dependencyTestCaseId) {
236
+ buildHoverTestElement(item, startingPath, sizeClass, uid, startingPageStateId, dependencyTestElementId) {
229
237
  const label = item.accessibleName || item.textContent || item.selector;
230
238
  return {
231
239
  title: `Hover over ${label}`,
232
240
  type: "interaction",
233
241
  sizeClass,
234
- suite_tags: ["interaction", "hover"],
242
+ surface_tags: ["interaction", "hover"],
235
243
  priority: 4,
236
- dependencyTestCaseId,
244
+ dependencyTestElementId,
237
245
  startingPageStateId,
238
246
  startingPath,
239
247
  steps: [
@@ -253,15 +261,15 @@ export class PageAnalyzer {
253
261
  uid,
254
262
  };
255
263
  }
256
- buildClickTestCase(item, startingPath, sizeClass, uid, startingPageStateId, dependencyTestCaseId) {
264
+ buildClickTestElement(item, startingPath, sizeClass, uid, startingPageStateId, dependencyTestElementId) {
257
265
  const label = item.accessibleName || item.textContent || item.selector;
258
266
  return {
259
267
  title: `Click ${label}`,
260
268
  type: "interaction",
261
269
  sizeClass,
262
- suite_tags: ["interaction", "click"],
270
+ surface_tags: ["interaction", "click"],
263
271
  priority: 5,
264
- dependencyTestCaseId,
272
+ dependencyTestElementId,
265
273
  startingPageStateId,
266
274
  startingPath,
267
275
  steps: [
@@ -281,12 +289,12 @@ export class PageAnalyzer {
281
289
  uid,
282
290
  };
283
291
  }
284
- isHoverOnly(testCase) {
285
- return (testCase.steps.length === 1 &&
286
- testCase.steps[0].action.actionType === PlaywrightAction.Hover);
292
+ isHoverOnly(testElement) {
293
+ return (testElement.steps.length === 1 &&
294
+ testElement.steps[0].action.actionType === PlaywrightAction.Hover);
287
295
  }
288
- getPrimarySelector(testCase) {
289
- const step = testCase.steps[0];
296
+ getPrimarySelector(testElement) {
297
+ const step = testElement.steps[0];
290
298
  return step?.action.path ?? null;
291
299
  }
292
300
  getItemKey(item) {
@@ -296,11 +304,19 @@ export class PageAnalyzer {
296
304
  }
297
305
  async ensureTargetPageState(context) {
298
306
  if (context.currentPageStateId > 0) {
307
+ context.events.onPageStateCreated({
308
+ pageStateId: context.currentPageStateId,
309
+ pageId: context.pageId,
310
+ });
299
311
  return context.currentPageStateId;
300
312
  }
301
313
  const hashes = await computeHashes(context.html, context.actionableItems);
302
314
  const existing = await context.api.findMatchingPageState(context.pageId, hashes, context.sizeClass);
303
315
  if (existing) {
316
+ context.events.onPageStateCreated({
317
+ pageStateId: existing.id,
318
+ pageId: context.pageId,
319
+ });
304
320
  return existing.id;
305
321
  }
306
322
  const contentHash = createHash("sha256").update(context.html).digest("hex");
@@ -313,6 +329,10 @@ export class PageAnalyzer {
313
329
  contentText: context.html.slice(0, 5000),
314
330
  contentHtmlElementId: contentElement.id,
315
331
  });
332
+ context.events.onPageStateCreated({
333
+ pageStateId: pageState.id,
334
+ pageId: context.pageId,
335
+ });
316
336
  return pageState.id;
317
337
  }
318
338
  }
@@ -1 +1 @@
1
- {"version":3,"file":"page-analyzer.js","sourceRoot":"","sources":["../../src/analyzer/page-analyzer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"page-analyzer.js","sourceRoot":"","sources":["../../src/analyzer/page-analyzer.ts"],"names":[],"mappings":"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"}