@sudobility/testomniac_runner_service 0.1.115 → 0.1.117
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/analyzer/page-analyzer/generators/content.js +2 -2
- package/dist/analyzer/page-analyzer/generators/content.js.map +1 -1
- package/dist/analyzer/page-analyzer/generators/forms.js +2 -2
- package/dist/analyzer/page-analyzer/generators/forms.js.map +1 -1
- package/dist/analyzer/page-analyzer/generators/hover-follow-up.js +2 -2
- package/dist/analyzer/page-analyzer/generators/hover-follow-up.js.map +1 -1
- package/dist/analyzer/page-analyzer/generators/keyboard-disclosure.d.ts.map +1 -1
- package/dist/analyzer/page-analyzer/generators/keyboard-disclosure.js +12 -6
- package/dist/analyzer/page-analyzer/generators/keyboard-disclosure.js.map +1 -1
- package/dist/analyzer/page-analyzer/generators/variants.d.ts.map +1 -1
- package/dist/analyzer/page-analyzer/generators/variants.js +12 -6
- package/dist/analyzer/page-analyzer/generators/variants.js.map +1 -1
- package/dist/analyzer/page-analyzer/index.d.ts +16 -59
- package/dist/analyzer/page-analyzer/index.d.ts.map +1 -1
- package/dist/analyzer/page-analyzer/index.js +24 -70
- package/dist/analyzer/page-analyzer/index.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/orchestrator/runner.d.ts +4 -1
- package/dist/orchestrator/runner.d.ts.map +1 -1
- package/dist/orchestrator/runner.js +4 -2
- package/dist/orchestrator/runner.js.map +1 -1
- package/dist/orchestrator/test-interaction-executor.js +6 -6
- package/dist/orchestrator/test-interaction-executor.js.map +1 -1
- package/dist/storage/dedup-store.d.ts +28 -0
- package/dist/storage/dedup-store.d.ts.map +1 -0
- package/dist/storage/dedup-store.js +22 -0
- package/dist/storage/dedup-store.js.map +1 -0
- package/package.json +3 -3
|
@@ -35,7 +35,7 @@ export async function generateContentTestInteractions(analyzer, context) {
|
|
|
35
35
|
const actionType = analyzer.shouldUseDirectControlInteraction(item)
|
|
36
36
|
? "control"
|
|
37
37
|
: "hover";
|
|
38
|
-
if (analyzer.hasGeneratedSelectorForBasePath(context.currentPath, actionType, replaySelector)) {
|
|
38
|
+
if (await analyzer.hasGeneratedSelectorForBasePath(context.currentPath, actionType, replaySelector)) {
|
|
39
39
|
continue;
|
|
40
40
|
}
|
|
41
41
|
const testInteraction = actionType === "control"
|
|
@@ -47,7 +47,7 @@ export async function generateContentTestInteractions(analyzer, context) {
|
|
|
47
47
|
testInteractionId: tc.id,
|
|
48
48
|
testSurfaceRunId: surfaceRun.id,
|
|
49
49
|
});
|
|
50
|
-
analyzer.markGeneratedSelectorForBasePath(context.currentPath, actionType, replaySelector);
|
|
50
|
+
await analyzer.markGeneratedSelectorForBasePath(context.currentPath, actionType, replaySelector);
|
|
51
51
|
}
|
|
52
52
|
await analyzer.reconcileGeneratedSurfaceElements(context, {
|
|
53
53
|
surfaceId: surface.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qCAAqC,EAAE,MAAM,kCAAkC,CAAC;AAGzF,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,QAAa,EACb,OAAwB;IAExB,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GACnE,OAAO,CAAC;IAEV,MAAM,YAAY,GAAG,QAAQ,CAAC,yBAAyB,CACrD,OAAO,CAAC,eAAe,CAAC,MAAM,CAC5B,CAAC,IAAS,EAAE,EAAE,CACZ,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAC/D,CACF,CAAC;IACF,MAAM,YAAY,GAAG,SAAS,OAAO,CAAC,WAAW,EAAE,CAAC;IACpD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,QAAQ,CAAC,iCAAiC,CAAC,OAAO,EAAE;YACxD,YAAY;YACZ,WAAW,EAAE,EAAE;YACf,2BAA2B,EAAE,OAAO,CAAC,wBAAwB;SAC9D,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,iBAAiB,CACzC,QAAQ,EACR;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,6BAA6B,OAAO,CAAC,WAAW,EAAE;QAC/D,mBAAmB,EAAE,OAAO,CAAC,kBAAkB;QAC/C,YAAY,EAAE,OAAO,CAAC,WAAW;QACjC,SAAS;QACT,QAAQ,EAAE,CAAC;QACX,YAAY,EAAE,CAAC,cAAc,CAAC;QAC9B,GAAG;KACJ,EACD,iBAAiB,CAClB,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC;QAClC,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,uBAAuB,CAAC,SAAS,CAAC,mBAAmB,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7E,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAChD,GAAG,EACH,OAAO,CAAC,EAAE,EACV,SAAS,CAAC,EAAE,CACb,CAAC;IAEF,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,oEAAoE;QACpE,iDAAiD;QACjD,MAAM,cAAc,GAAG,qCAAqC,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,UAAU,GAAG,QAAQ,CAAC,iCAAiC,CAAC,IAAI,CAAC;YACjE,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,OAAO,CAAC;QACZ,IACE,QAAQ,CAAC,+BAA+B,
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/content.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,7 +31,7 @@ export async function generateFormTestInteractions(analyzer, context) {
|
|
|
31
31
|
const formLabel = analyzer.describeForm(form, index);
|
|
32
32
|
// Skip forms already tested under a different URL variant of the same
|
|
33
33
|
// base path (e.g. login sidebar form on /store/ vs /store/?pricepoint=3).
|
|
34
|
-
if (analyzer.hasGeneratedSelectorForBasePath(context.currentPath, "form", formLabel)) {
|
|
34
|
+
if (await analyzer.hasGeneratedSelectorForBasePath(context.currentPath, "form", formLabel)) {
|
|
35
35
|
continue;
|
|
36
36
|
}
|
|
37
37
|
const validValues = analyzer.planFormValues(form, context.actionableItems);
|
|
@@ -81,7 +81,7 @@ export async function generateFormTestInteractions(analyzer, context) {
|
|
|
81
81
|
});
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
|
-
analyzer.markGeneratedSelectorForBasePath(context.currentPath, "form", formLabel);
|
|
84
|
+
await analyzer.markGeneratedSelectorForBasePath(context.currentPath, "form", formLabel);
|
|
85
85
|
}
|
|
86
86
|
await analyzer.reconcileGeneratedSurfaceElements(context, {
|
|
87
87
|
surfaceId: surface.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forms.js","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/forms.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,QAAa,EACb,OAAwB;IAExB,MAAM,YAAY,GAAG,UAAU,OAAO,CAAC,WAAW,EAAE,CAAC;IACrD,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,QAAQ,CAAC,iCAAiC,CAAC,OAAO,EAAE;YACxD,YAAY;YACZ,WAAW,EAAE,EAAE;SAChB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GACnE,OAAO,CAAC;IACV,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,iBAAiB,CACzC,QAAQ,EACR;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,sBAAsB,OAAO,CAAC,WAAW,EAAE;QACxD,mBAAmB,EAAE,OAAO,CAAC,kBAAkB;QAC/C,YAAY,EAAE,OAAO,CAAC,WAAW;QACjC,SAAS;QACT,QAAQ,EAAE,CAAC;QACX,YAAY,EAAE,CAAC,MAAM,CAAC;QACtB,GAAG;KACJ,EACD,iBAAiB,CAClB,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC;QAClC,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,uBAAuB,CAAC,SAAS,CAAC,mBAAmB,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7E,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAChD,GAAG,EACH,OAAO,CAAC,EAAE,EACV,SAAS,CAAC,EAAE,CACb,CAAC;IAEF,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QACtE,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAErD,sEAAsE;QACtE,0EAA0E;QAC1E,IACE,QAAQ,CAAC,+BAA+B,
|
|
1
|
+
{"version":3,"file":"forms.js","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/forms.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,7 +66,7 @@ export async function generateHoverFollowUpCases(analyzer, testInteraction, cont
|
|
|
66
66
|
// Skip follow-up generation if this page path was already generated for in
|
|
67
67
|
// this run (the analyzer instance tracks covered paths per run)
|
|
68
68
|
const currentPath = context.currentPath.trim();
|
|
69
|
-
const pageAlreadyCovered = analyzer.hasGeneratedForPath(currentPath);
|
|
69
|
+
const pageAlreadyCovered = await analyzer.hasGeneratedForPath(currentPath);
|
|
70
70
|
if (pageAlreadyCovered) {
|
|
71
71
|
console.info("[PageAnalyzer][hover-follow-up] page-already-covered", {
|
|
72
72
|
testInteractionId: context.currentTestInteractionId,
|
|
@@ -87,7 +87,7 @@ export async function generateHoverFollowUpCases(analyzer, testInteraction, cont
|
|
|
87
87
|
// the full generateTestInteractions pass. Registering here would
|
|
88
88
|
// incorrectly block full generation for a page reached via non-hover.
|
|
89
89
|
const actionableHash = await computeActionableHash(context.actionableItems);
|
|
90
|
-
if (analyzer.hasGeneratedForActionableHash(actionableHash)) {
|
|
90
|
+
if (await analyzer.hasGeneratedForActionableHash(actionableHash)) {
|
|
91
91
|
console.info("[PageAnalyzer][hover-follow-up] actionable-items-already-covered", {
|
|
92
92
|
testInteractionId: context.currentTestInteractionId,
|
|
93
93
|
sourceTitle: testInteraction.title,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hover-follow-up.js","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/hover-follow-up.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"hover-follow-up.js","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/hover-follow-up.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboard-disclosure.d.ts","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/keyboard-disclosure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,wBAAsB,6CAA6C,CACjE,QAAQ,EAAE,GAAG,EACb,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"keyboard-disclosure.d.ts","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/keyboard-disclosure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,wBAAsB,6CAA6C,CACjE,QAAQ,EAAE,GAAG,EACb,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CAwFf"}
|
|
@@ -2,13 +2,19 @@ export async function generateKeyboardAndDisclosureTestInteractions(analyzer, co
|
|
|
2
2
|
const allTests = analyzer.buildKeyboardAndDisclosureTestInteractions(context);
|
|
3
3
|
// Filter out interactions whose replay selector was already generated
|
|
4
4
|
// under a different URL variant of the same base path.
|
|
5
|
-
const tests =
|
|
5
|
+
const tests = [];
|
|
6
|
+
for (const test of allTests) {
|
|
6
7
|
const selector = test.steps?.[0]?.action?.path;
|
|
7
8
|
const actionType = test.steps?.[0]?.action?.actionType;
|
|
8
|
-
if (!selector || !actionType)
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
if (!selector || !actionType) {
|
|
10
|
+
tests.push(test);
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
const alreadyGenerated = await analyzer.hasGeneratedSelectorForBasePath(context.currentPath, actionType, selector);
|
|
14
|
+
if (!alreadyGenerated) {
|
|
15
|
+
tests.push(test);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
12
18
|
const surfaceTitle = `Keyboard: ${context.currentPath}`;
|
|
13
19
|
if (tests.length === 0) {
|
|
14
20
|
await analyzer.reconcileGeneratedSurfaceElements(context, {
|
|
@@ -44,7 +50,7 @@ export async function generateKeyboardAndDisclosureTestInteractions(analyzer, co
|
|
|
44
50
|
const selector = test.steps?.[0]?.action?.path;
|
|
45
51
|
const actionType = test.steps?.[0]?.action?.actionType;
|
|
46
52
|
if (selector && actionType) {
|
|
47
|
-
analyzer.markGeneratedSelectorForBasePath(context.currentPath, actionType, selector);
|
|
53
|
+
await analyzer.markGeneratedSelectorForBasePath(context.currentPath, actionType, selector);
|
|
48
54
|
}
|
|
49
55
|
}
|
|
50
56
|
await analyzer.reconcileGeneratedSurfaceElements(context, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboard-disclosure.js","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/keyboard-disclosure.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,6CAA6C,CACjE,QAAa,EACb,OAAwB;IAExB,MAAM,QAAQ,GAAG,QAAQ,CAAC,0CAA0C,CAAC,OAAO,CAAC,CAAC;IAE9E,sEAAsE;IACtE,uDAAuD;IACvD,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"keyboard-disclosure.js","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/keyboard-disclosure.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/variants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,wBAAsB,+BAA+B,CACnD,QAAQ,EAAE,GAAG,EACb,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/variants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,wBAAsB,+BAA+B,CACnD,QAAQ,EAAE,GAAG,EACb,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CAuFf"}
|
|
@@ -2,13 +2,19 @@ export async function generateVariantTestInteractions(analyzer, context) {
|
|
|
2
2
|
const allTests = analyzer.buildVariantTestInteractions(context);
|
|
3
3
|
// Filter out interactions whose replay selector was already generated
|
|
4
4
|
// under a different URL variant of the same base path.
|
|
5
|
-
const tests =
|
|
5
|
+
const tests = [];
|
|
6
|
+
for (const test of allTests) {
|
|
6
7
|
const selector = test.steps?.[0]?.action?.path;
|
|
7
8
|
const actionType = test.steps?.[0]?.action?.actionType;
|
|
8
|
-
if (!selector || !actionType)
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
if (!selector || !actionType) {
|
|
10
|
+
tests.push(test);
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
const alreadyGenerated = await analyzer.hasGeneratedSelectorForBasePath(context.currentPath, actionType, selector);
|
|
14
|
+
if (!alreadyGenerated) {
|
|
15
|
+
tests.push(test);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
12
18
|
const surfaceTitle = `Variants: ${context.currentPath}`;
|
|
13
19
|
if (tests.length === 0) {
|
|
14
20
|
await analyzer.reconcileGeneratedSurfaceElements(context, {
|
|
@@ -43,7 +49,7 @@ export async function generateVariantTestInteractions(analyzer, context) {
|
|
|
43
49
|
const selector = test.steps?.[0]?.action?.path;
|
|
44
50
|
const actionType = test.steps?.[0]?.action?.actionType;
|
|
45
51
|
if (selector && actionType) {
|
|
46
|
-
analyzer.markGeneratedSelectorForBasePath(context.currentPath, actionType, selector);
|
|
52
|
+
await analyzer.markGeneratedSelectorForBasePath(context.currentPath, actionType, selector);
|
|
47
53
|
}
|
|
48
54
|
}
|
|
49
55
|
await analyzer.reconcileGeneratedSurfaceElements(context, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variants.js","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/variants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,QAAa,EACb,OAAwB;IAExB,MAAM,QAAQ,GAAG,QAAQ,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC;IAEhE,sEAAsE;IACtE,uDAAuD;IACvD,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"variants.js","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/variants.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { TestInteraction, Expectation, ActionableItem } from "@sudobility/testomniac_types";
|
|
2
2
|
import type { AnalyzerContext } from "./types";
|
|
3
|
+
import type { DedupStore } from "../../storage/dedup-store";
|
|
3
4
|
export type { AnalyzerContext } from "./types";
|
|
4
5
|
type GeneratedTestInteraction = TestInteraction & {
|
|
5
6
|
generatedKey?: string;
|
|
@@ -13,61 +14,20 @@ type AppendActionResult = {
|
|
|
13
14
|
* during discovery mode.
|
|
14
15
|
*/
|
|
15
16
|
export declare class PageAnalyzer {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Actionable-item hashes for which full generation has already run.
|
|
20
|
-
* Different URL paths can produce the same set of interactive elements
|
|
21
|
-
* (e.g. `/store/` and `/store/all-items/`). Generating hover/click tests
|
|
22
|
-
* for the same elements twice is pure waste, so we deduplicate by the hash
|
|
23
|
-
* of visible actionable-item stable keys.
|
|
24
|
-
*/
|
|
25
|
-
private generatedActionableHashes;
|
|
26
|
-
/**
|
|
27
|
-
* Tracks replay selectors already generated under each base path (path
|
|
28
|
-
* without query string). Shared layout controls (header, sidebar, footer)
|
|
29
|
-
* produce the same replay selector on `/store/`, `/store/?pricepoint=3`,
|
|
30
|
-
* etc. Testing them once per base path is sufficient.
|
|
31
|
-
*
|
|
32
|
-
* Key: base path (e.g. `/store/`)
|
|
33
|
-
* Value: Set of `actionType\0replaySelector` strings
|
|
34
|
-
*/
|
|
35
|
-
private generatedSelectorsByBasePath;
|
|
36
|
-
/**
|
|
37
|
-
* Tracks page-scoped finding keys already recorded during this run.
|
|
38
|
-
* Page-level findings (page-health checks, page-load expectations) describe
|
|
39
|
-
* the page itself, not a specific interaction. Reporting them once per page
|
|
40
|
-
* path is sufficient — duplicating them for every hover/click on the same
|
|
41
|
-
* page just adds noise.
|
|
42
|
-
*/
|
|
43
|
-
private reportedPageFindingKeys;
|
|
44
|
-
/**
|
|
45
|
-
* Generic key-based dedup for findings where text-based matching is too
|
|
46
|
-
* fragile (e.g. page-health titles include variable counts).
|
|
47
|
-
*/
|
|
48
|
-
private reportedFindingKeys;
|
|
49
|
-
/**
|
|
50
|
-
* Description-only dedup. Multiple expectations (page_loaded,
|
|
51
|
-
* no_console_errors, page-specific render checks) can all detect the same
|
|
52
|
-
* root cause (e.g. a 404) and produce identical `observed` text. Tracking
|
|
53
|
-
* descriptions independently ensures only the first finding per unique
|
|
54
|
-
* description is created per run.
|
|
55
|
-
*/
|
|
56
|
-
private reportedDescriptions;
|
|
17
|
+
private store;
|
|
18
|
+
constructor(dedupStore?: DedupStore);
|
|
57
19
|
/** Check whether generation already happened for a given path in this run. */
|
|
58
|
-
hasGeneratedForPath(path: string): boolean
|
|
20
|
+
hasGeneratedForPath(path: string): Promise<boolean>;
|
|
59
21
|
/**
|
|
60
22
|
* Check whether a (actionType, replaySelector) pair has already been
|
|
61
|
-
* generated for any URL variant of the same base path.
|
|
62
|
-
* elements (header, sidebar, footer) appear identically across query-param
|
|
63
|
-
* variants and only need testing once per base path.
|
|
23
|
+
* generated for any URL variant of the same base path.
|
|
64
24
|
*/
|
|
65
|
-
hasGeneratedSelectorForBasePath(path: string, actionType: string, replaySelector: string): boolean
|
|
25
|
+
hasGeneratedSelectorForBasePath(path: string, actionType: string, replaySelector: string): Promise<boolean>;
|
|
66
26
|
/**
|
|
67
27
|
* Record that a (actionType, replaySelector) was generated under a base
|
|
68
28
|
* path so future URL variants can skip it.
|
|
69
29
|
*/
|
|
70
|
-
markGeneratedSelectorForBasePath(path: string, actionType: string, replaySelector: string): void
|
|
30
|
+
markGeneratedSelectorForBasePath(path: string, actionType: string, replaySelector: string): Promise<void>;
|
|
71
31
|
/**
|
|
72
32
|
* Normalize finding text for dedup: strip leading count numbers that vary
|
|
73
33
|
* between evaluations. Preserves URLs, status codes, and other content.
|
|
@@ -79,31 +39,28 @@ export declare class PageAnalyzer {
|
|
|
79
39
|
private static normalizeFindingText;
|
|
80
40
|
/**
|
|
81
41
|
* Returns true if an equivalent page-scoped finding has already been
|
|
82
|
-
* recorded during this run.
|
|
83
|
-
* to strip variable leading counts so that "3 console error(s): …" and
|
|
84
|
-
* "5 console error(s): …" are treated as the same finding.
|
|
42
|
+
* recorded during this run.
|
|
85
43
|
*/
|
|
86
|
-
hasReportedPageFinding(_path: string, title: string, description: string): boolean
|
|
44
|
+
hasReportedPageFinding(_path: string, title: string, description: string): Promise<boolean>;
|
|
87
45
|
/**
|
|
88
46
|
* Mark a page-scoped finding as recorded so it is not duplicated.
|
|
89
47
|
*/
|
|
90
|
-
markPageFindingReported(_path: string, title: string, description: string): void
|
|
48
|
+
markPageFindingReported(_path: string, title: string, description: string): Promise<void>;
|
|
91
49
|
/** Check whether a finding with the given stable key has been reported. */
|
|
92
|
-
hasReportedFindingByKey(key: string): boolean
|
|
50
|
+
hasReportedFindingByKey(key: string): Promise<boolean>;
|
|
93
51
|
/** Mark a stable finding key as reported. */
|
|
94
|
-
markReportedFindingByKey(key: string): void
|
|
52
|
+
markReportedFindingByKey(key: string): Promise<void>;
|
|
95
53
|
/**
|
|
96
|
-
* Check if a finding with this description has already been reported
|
|
97
|
-
* regardless of which expectation produced it.
|
|
54
|
+
* Check if a finding with this description has already been reported.
|
|
98
55
|
*/
|
|
99
|
-
hasReportedDescription(description: string): boolean
|
|
56
|
+
hasReportedDescription(description: string): Promise<boolean>;
|
|
100
57
|
/** Mark a finding description as reported. */
|
|
101
|
-
markReportedDescription(description: string): void
|
|
58
|
+
markReportedDescription(description: string): Promise<void>;
|
|
102
59
|
/**
|
|
103
60
|
* Check whether full test generation already ran for a page state with the
|
|
104
61
|
* same visible actionable items (by hash).
|
|
105
62
|
*/
|
|
106
|
-
hasGeneratedForActionableHash(hash: string): boolean
|
|
63
|
+
hasGeneratedForActionableHash(hash: string): Promise<boolean>;
|
|
107
64
|
/**
|
|
108
65
|
* Generate baseline expectations for a test element.
|
|
109
66
|
* Called BEFORE expertises evaluate.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analyzer/page-analyzer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,cAAc,EAOf,MAAM,8BAA8B,CAAC;AAuBtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analyzer/page-analyzer/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import { getBody, getContentBody } from "../../scanner/html-decomposer";
|
|
|
5
5
|
import { createHash } from "node:crypto";
|
|
6
6
|
import { fillValuePlanner } from "../../planners/fill-value-planner";
|
|
7
7
|
import { AUTH_URL_PATTERNS, SIGNUP_URL_PATTERNS } from "../../config/constants";
|
|
8
|
+
import { InMemoryDedupStore } from "../../storage/dedup-store";
|
|
8
9
|
import { generateHoverFollowUpCases } from "./generators/hover-follow-up";
|
|
9
10
|
import { generateNavigationTestInteractions } from "./generators/navigation";
|
|
10
11
|
import { generateScaffoldTestInteractions } from "./generators/scaffolds";
|
|
@@ -58,73 +59,29 @@ function basePathOf(raw) {
|
|
|
58
59
|
* during discovery mode.
|
|
59
60
|
*/
|
|
60
61
|
export class PageAnalyzer {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
* Different URL paths can produce the same set of interactive elements
|
|
66
|
-
* (e.g. `/store/` and `/store/all-items/`). Generating hover/click tests
|
|
67
|
-
* for the same elements twice is pure waste, so we deduplicate by the hash
|
|
68
|
-
* of visible actionable-item stable keys.
|
|
69
|
-
*/
|
|
70
|
-
generatedActionableHashes = new Set();
|
|
71
|
-
/**
|
|
72
|
-
* Tracks replay selectors already generated under each base path (path
|
|
73
|
-
* without query string). Shared layout controls (header, sidebar, footer)
|
|
74
|
-
* produce the same replay selector on `/store/`, `/store/?pricepoint=3`,
|
|
75
|
-
* etc. Testing them once per base path is sufficient.
|
|
76
|
-
*
|
|
77
|
-
* Key: base path (e.g. `/store/`)
|
|
78
|
-
* Value: Set of `actionType\0replaySelector` strings
|
|
79
|
-
*/
|
|
80
|
-
generatedSelectorsByBasePath = new Map();
|
|
81
|
-
/**
|
|
82
|
-
* Tracks page-scoped finding keys already recorded during this run.
|
|
83
|
-
* Page-level findings (page-health checks, page-load expectations) describe
|
|
84
|
-
* the page itself, not a specific interaction. Reporting them once per page
|
|
85
|
-
* path is sufficient — duplicating them for every hover/click on the same
|
|
86
|
-
* page just adds noise.
|
|
87
|
-
*/
|
|
88
|
-
reportedPageFindingKeys = new Set();
|
|
89
|
-
/**
|
|
90
|
-
* Generic key-based dedup for findings where text-based matching is too
|
|
91
|
-
* fragile (e.g. page-health titles include variable counts).
|
|
92
|
-
*/
|
|
93
|
-
reportedFindingKeys = new Set();
|
|
94
|
-
/**
|
|
95
|
-
* Description-only dedup. Multiple expectations (page_loaded,
|
|
96
|
-
* no_console_errors, page-specific render checks) can all detect the same
|
|
97
|
-
* root cause (e.g. a 404) and produce identical `observed` text. Tracking
|
|
98
|
-
* descriptions independently ensures only the first finding per unique
|
|
99
|
-
* description is created per run.
|
|
100
|
-
*/
|
|
101
|
-
reportedDescriptions = new Set();
|
|
62
|
+
store;
|
|
63
|
+
constructor(dedupStore) {
|
|
64
|
+
this.store = dedupStore ?? new InMemoryDedupStore();
|
|
65
|
+
}
|
|
102
66
|
/** Check whether generation already happened for a given path in this run. */
|
|
103
67
|
hasGeneratedForPath(path) {
|
|
104
|
-
return this.
|
|
68
|
+
return this.store.has("generatedPaths", normalizePathForDedup(path));
|
|
105
69
|
}
|
|
106
70
|
/**
|
|
107
71
|
* Check whether a (actionType, replaySelector) pair has already been
|
|
108
|
-
* generated for any URL variant of the same base path.
|
|
109
|
-
* elements (header, sidebar, footer) appear identically across query-param
|
|
110
|
-
* variants and only need testing once per base path.
|
|
72
|
+
* generated for any URL variant of the same base path.
|
|
111
73
|
*/
|
|
112
74
|
hasGeneratedSelectorForBasePath(path, actionType, replaySelector) {
|
|
113
|
-
const key = `${actionType}\0${replaySelector}`;
|
|
114
|
-
return
|
|
75
|
+
const key = `${basePathOf(path)}\0${actionType}\0${replaySelector}`;
|
|
76
|
+
return this.store.has("generatedSelectors", key);
|
|
115
77
|
}
|
|
116
78
|
/**
|
|
117
79
|
* Record that a (actionType, replaySelector) was generated under a base
|
|
118
80
|
* path so future URL variants can skip it.
|
|
119
81
|
*/
|
|
120
82
|
markGeneratedSelectorForBasePath(path, actionType, replaySelector) {
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
if (!set) {
|
|
124
|
-
set = new Set();
|
|
125
|
-
this.generatedSelectorsByBasePath.set(bp, set);
|
|
126
|
-
}
|
|
127
|
-
set.add(`${actionType}\0${replaySelector}`);
|
|
83
|
+
const key = `${basePathOf(path)}\0${actionType}\0${replaySelector}`;
|
|
84
|
+
return this.store.add("generatedSelectors", key);
|
|
128
85
|
}
|
|
129
86
|
/**
|
|
130
87
|
* Normalize finding text for dedup: strip leading count numbers that vary
|
|
@@ -139,46 +96,43 @@ export class PageAnalyzer {
|
|
|
139
96
|
}
|
|
140
97
|
/**
|
|
141
98
|
* Returns true if an equivalent page-scoped finding has already been
|
|
142
|
-
* recorded during this run.
|
|
143
|
-
* to strip variable leading counts so that "3 console error(s): …" and
|
|
144
|
-
* "5 console error(s): …" are treated as the same finding.
|
|
99
|
+
* recorded during this run.
|
|
145
100
|
*/
|
|
146
101
|
hasReportedPageFinding(_path, title, description) {
|
|
147
102
|
const key = `${PageAnalyzer.normalizeFindingText(title)}\0${PageAnalyzer.normalizeFindingText(description)}`;
|
|
148
|
-
return this.
|
|
103
|
+
return this.store.has("reportedPageFindings", key);
|
|
149
104
|
}
|
|
150
105
|
/**
|
|
151
106
|
* Mark a page-scoped finding as recorded so it is not duplicated.
|
|
152
107
|
*/
|
|
153
108
|
markPageFindingReported(_path, title, description) {
|
|
154
109
|
const key = `${PageAnalyzer.normalizeFindingText(title)}\0${PageAnalyzer.normalizeFindingText(description)}`;
|
|
155
|
-
this.
|
|
110
|
+
return this.store.add("reportedPageFindings", key);
|
|
156
111
|
}
|
|
157
112
|
/** Check whether a finding with the given stable key has been reported. */
|
|
158
113
|
hasReportedFindingByKey(key) {
|
|
159
|
-
return this.
|
|
114
|
+
return this.store.has("reportedFindingKeys", key);
|
|
160
115
|
}
|
|
161
116
|
/** Mark a stable finding key as reported. */
|
|
162
117
|
markReportedFindingByKey(key) {
|
|
163
|
-
this.
|
|
118
|
+
return this.store.add("reportedFindingKeys", key);
|
|
164
119
|
}
|
|
165
120
|
/**
|
|
166
|
-
* Check if a finding with this description has already been reported
|
|
167
|
-
* regardless of which expectation produced it.
|
|
121
|
+
* Check if a finding with this description has already been reported.
|
|
168
122
|
*/
|
|
169
123
|
hasReportedDescription(description) {
|
|
170
|
-
return this.
|
|
124
|
+
return this.store.has("reportedDescriptions", PageAnalyzer.normalizeFindingText(description));
|
|
171
125
|
}
|
|
172
126
|
/** Mark a finding description as reported. */
|
|
173
127
|
markReportedDescription(description) {
|
|
174
|
-
this.
|
|
128
|
+
return this.store.add("reportedDescriptions", PageAnalyzer.normalizeFindingText(description));
|
|
175
129
|
}
|
|
176
130
|
/**
|
|
177
131
|
* Check whether full test generation already ran for a page state with the
|
|
178
132
|
* same visible actionable items (by hash).
|
|
179
133
|
*/
|
|
180
134
|
hasGeneratedForActionableHash(hash) {
|
|
181
|
-
return this.
|
|
135
|
+
return this.store.has("generatedActionableHashes", hash);
|
|
182
136
|
}
|
|
183
137
|
/**
|
|
184
138
|
* Generate baseline expectations for a test element.
|
|
@@ -343,7 +297,7 @@ export class PageAnalyzer {
|
|
|
343
297
|
// (scaffold resolution, hash computation, page-state creation) when the
|
|
344
298
|
// page has already been covered in this run.
|
|
345
299
|
if (!isHover) {
|
|
346
|
-
if (this.
|
|
300
|
+
if (await this.store.has("generatedPaths", dedupPath)) {
|
|
347
301
|
logAnalyzer("generate:page-already-covered", {
|
|
348
302
|
sourceTitle: testInteraction.title,
|
|
349
303
|
currentTestInteractionId: normalizedContext.currentTestInteractionId,
|
|
@@ -353,7 +307,7 @@ export class PageAnalyzer {
|
|
|
353
307
|
return;
|
|
354
308
|
}
|
|
355
309
|
const actionableHash = await computeActionableHash(normalizedContext.actionableItems);
|
|
356
|
-
if (this.
|
|
310
|
+
if (await this.store.has("generatedActionableHashes", actionableHash)) {
|
|
357
311
|
logAnalyzer("generate:actionable-items-already-covered", {
|
|
358
312
|
sourceTitle: testInteraction.title,
|
|
359
313
|
currentTestInteractionId: normalizedContext.currentTestInteractionId,
|
|
@@ -412,8 +366,8 @@ export class PageAnalyzer {
|
|
|
412
366
|
// (Render, which waits for load state) re-run the full generation pass
|
|
413
367
|
// with the complete HTML.
|
|
414
368
|
if (resolvedContext.actionableItems.length > 0) {
|
|
415
|
-
this.
|
|
416
|
-
this.
|
|
369
|
+
await this.store.add("generatedPaths", dedupPath);
|
|
370
|
+
await this.store.add("generatedActionableHashes", actionableHash);
|
|
417
371
|
}
|
|
418
372
|
// If a hover+click navigated to a new page, create a direct navigation
|
|
419
373
|
// interaction and use it as the dependency instead of the hover chain
|