@sudobility/testomniac_runner_service 0.1.140 → 0.1.145

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 (102) hide show
  1. package/CLAUDE.md +35 -24
  2. package/dist/adapter.d.ts +12 -0
  3. package/dist/adapter.d.ts.map +1 -1
  4. package/dist/analyzer/page-analyzer/index.d.ts +4 -154
  5. package/dist/analyzer/page-analyzer/index.d.ts.map +1 -1
  6. package/dist/analyzer/page-analyzer/index.js +112 -2535
  7. package/dist/analyzer/page-analyzer/index.js.map +1 -1
  8. package/dist/analyzer/page-analyzer/types.d.ts +0 -1
  9. package/dist/analyzer/page-analyzer/types.d.ts.map +1 -1
  10. package/dist/api/client.d.ts +4 -7
  11. package/dist/api/client.d.ts.map +1 -1
  12. package/dist/api/client.js +6 -22
  13. package/dist/api/client.js.map +1 -1
  14. package/dist/browser/network-idle.d.ts +37 -0
  15. package/dist/browser/network-idle.d.ts.map +1 -0
  16. package/dist/browser/network-idle.js +72 -0
  17. package/dist/browser/network-idle.js.map +1 -0
  18. package/dist/index.d.ts +1 -4
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +1 -5
  21. package/dist/index.js.map +1 -1
  22. package/dist/orchestrator/login-manager.d.ts +2 -11
  23. package/dist/orchestrator/login-manager.d.ts.map +1 -1
  24. package/dist/orchestrator/login-manager.js.map +1 -1
  25. package/dist/orchestrator/runner.d.ts.map +1 -1
  26. package/dist/orchestrator/runner.js +23 -8
  27. package/dist/orchestrator/runner.js.map +1 -1
  28. package/dist/orchestrator/settle-for-read.d.ts +9 -0
  29. package/dist/orchestrator/settle-for-read.d.ts.map +1 -0
  30. package/dist/orchestrator/settle-for-read.js +10 -0
  31. package/dist/orchestrator/settle-for-read.js.map +1 -0
  32. package/dist/orchestrator/test-interaction-executor.d.ts.map +1 -1
  33. package/dist/orchestrator/test-interaction-executor.js +84 -88
  34. package/dist/orchestrator/test-interaction-executor.js.map +1 -1
  35. package/dist/scanner/login-detector.d.ts +2 -14
  36. package/dist/scanner/login-detector.d.ts.map +1 -1
  37. package/dist/scanner/login-detector.js.map +1 -1
  38. package/package.json +4 -18
  39. package/dist/ai/analyzer.d.ts +0 -17
  40. package/dist/ai/analyzer.d.ts.map +0 -1
  41. package/dist/ai/analyzer.js +0 -55
  42. package/dist/ai/analyzer.js.map +0 -1
  43. package/dist/ai/input-generator.d.ts +0 -9
  44. package/dist/ai/input-generator.d.ts.map +0 -1
  45. package/dist/ai/input-generator.js +0 -20
  46. package/dist/ai/input-generator.js.map +0 -1
  47. package/dist/ai/persona-generator.d.ts +0 -7
  48. package/dist/ai/persona-generator.d.ts.map +0 -1
  49. package/dist/ai/persona-generator.js +0 -23
  50. package/dist/ai/persona-generator.js.map +0 -1
  51. package/dist/ai/use-case-generator.d.ts +0 -7
  52. package/dist/ai/use-case-generator.d.ts.map +0 -1
  53. package/dist/ai/use-case-generator.js +0 -23
  54. package/dist/ai/use-case-generator.js.map +0 -1
  55. package/dist/analyzer/page-analyzer/generators/content.d.ts +0 -4
  56. package/dist/analyzer/page-analyzer/generators/content.d.ts.map +0 -1
  57. package/dist/analyzer/page-analyzer/generators/content.js +0 -63
  58. package/dist/analyzer/page-analyzer/generators/content.js.map +0 -1
  59. package/dist/analyzer/page-analyzer/generators/dialogs.d.ts +0 -4
  60. package/dist/analyzer/page-analyzer/generators/dialogs.d.ts.map +0 -1
  61. package/dist/analyzer/page-analyzer/generators/dialogs.js +0 -46
  62. package/dist/analyzer/page-analyzer/generators/dialogs.js.map +0 -1
  63. package/dist/analyzer/page-analyzer/generators/e2e.d.ts +0 -4
  64. package/dist/analyzer/page-analyzer/generators/e2e.d.ts.map +0 -1
  65. package/dist/analyzer/page-analyzer/generators/e2e.js +0 -37
  66. package/dist/analyzer/page-analyzer/generators/e2e.js.map +0 -1
  67. package/dist/analyzer/page-analyzer/generators/forms.d.ts +0 -4
  68. package/dist/analyzer/page-analyzer/generators/forms.d.ts.map +0 -1
  69. package/dist/analyzer/page-analyzer/generators/forms.js +0 -95
  70. package/dist/analyzer/page-analyzer/generators/forms.js.map +0 -1
  71. package/dist/analyzer/page-analyzer/generators/hover-follow-up.d.ts +0 -4
  72. package/dist/analyzer/page-analyzer/generators/hover-follow-up.d.ts.map +0 -1
  73. package/dist/analyzer/page-analyzer/generators/hover-follow-up.js +0 -140
  74. package/dist/analyzer/page-analyzer/generators/hover-follow-up.js.map +0 -1
  75. package/dist/analyzer/page-analyzer/generators/keyboard-disclosure.d.ts +0 -4
  76. package/dist/analyzer/page-analyzer/generators/keyboard-disclosure.d.ts.map +0 -1
  77. package/dist/analyzer/page-analyzer/generators/keyboard-disclosure.js +0 -61
  78. package/dist/analyzer/page-analyzer/generators/keyboard-disclosure.js.map +0 -1
  79. package/dist/analyzer/page-analyzer/generators/login.d.ts +0 -15
  80. package/dist/analyzer/page-analyzer/generators/login.d.ts.map +0 -1
  81. package/dist/analyzer/page-analyzer/generators/login.js +0 -218
  82. package/dist/analyzer/page-analyzer/generators/login.js.map +0 -1
  83. package/dist/analyzer/page-analyzer/generators/navigation.d.ts +0 -15
  84. package/dist/analyzer/page-analyzer/generators/navigation.d.ts.map +0 -1
  85. package/dist/analyzer/page-analyzer/generators/navigation.js +0 -165
  86. package/dist/analyzer/page-analyzer/generators/navigation.js.map +0 -1
  87. package/dist/analyzer/page-analyzer/generators/render.d.ts +0 -4
  88. package/dist/analyzer/page-analyzer/generators/render.d.ts.map +0 -1
  89. package/dist/analyzer/page-analyzer/generators/render.js +0 -31
  90. package/dist/analyzer/page-analyzer/generators/render.js.map +0 -1
  91. package/dist/analyzer/page-analyzer/generators/scaffolds.d.ts +0 -4
  92. package/dist/analyzer/page-analyzer/generators/scaffolds.d.ts.map +0 -1
  93. package/dist/analyzer/page-analyzer/generators/scaffolds.js +0 -64
  94. package/dist/analyzer/page-analyzer/generators/scaffolds.js.map +0 -1
  95. package/dist/analyzer/page-analyzer/generators/semantic-journeys.d.ts +0 -4
  96. package/dist/analyzer/page-analyzer/generators/semantic-journeys.d.ts.map +0 -1
  97. package/dist/analyzer/page-analyzer/generators/semantic-journeys.js +0 -37
  98. package/dist/analyzer/page-analyzer/generators/semantic-journeys.js.map +0 -1
  99. package/dist/analyzer/page-analyzer/generators/variants.d.ts +0 -4
  100. package/dist/analyzer/page-analyzer/generators/variants.d.ts.map +0 -1
  101. package/dist/analyzer/page-analyzer/generators/variants.js +0 -60
  102. package/dist/analyzer/page-analyzer/generators/variants.js.map +0 -1
@@ -1,140 +0,0 @@
1
- import { matchesActionableItemSelector } from "../../../browser/replay-selector";
2
- import { computeActionableHash } from "../../../browser/page-utils";
3
- export async function generateHoverFollowUpCases(analyzer, testInteraction, context) {
4
- const selector = analyzer.getPrimarySelector(testInteraction);
5
- if (!selector || !context.currentPageStateId) {
6
- console.info("[PageAnalyzer][hover-follow-up] skipped", {
7
- reason: !selector ? "missing-selector" : "missing-current-page-state",
8
- testInteractionId: context.currentTestInteractionId,
9
- title: testInteraction.title,
10
- selector,
11
- currentPageStateId: context.currentPageStateId,
12
- beginningPageStateId: context.beginningPageStateId,
13
- currentPath: context.currentPath,
14
- });
15
- return;
16
- }
17
- const beginningItems = context.beginningPageStateId > 0
18
- ? await context.api.getItemsByPageState(context.beginningPageStateId)
19
- : [];
20
- const beginningKeys = new Set(beginningItems.map(item => analyzer.getItemKey(item)).filter(Boolean));
21
- const revealedItems = analyzer.selectRepresentativeItems(context.actionableItems.filter((item) => {
22
- if (!analyzer.isMouseActionable(item))
23
- return false;
24
- const key = analyzer.getItemKey(item);
25
- return Boolean(key) && !beginningKeys.has(key);
26
- }));
27
- const hoveredItem = context.actionableItems.find(item => matchesActionableItemSelector(selector, item)) ?? null;
28
- const startingItem = beginningItems.find(item => matchesActionableItemSelector(selector, item)) ?? null;
29
- const stableHoveredItem = hoveredItem ?? startingItem;
30
- const stayedOnSamePageState = context.beginningPageStateId > 0 &&
31
- context.currentPageStateId === context.beginningPageStateId;
32
- console.info("[PageAnalyzer][hover-follow-up] evaluated", {
33
- testInteractionId: context.currentTestInteractionId,
34
- title: testInteraction.title,
35
- selector,
36
- currentPath: context.currentPath,
37
- currentPageStateId: context.currentPageStateId,
38
- beginningPageStateId: context.beginningPageStateId,
39
- stayedOnSamePageState,
40
- beginningItemsCount: beginningItems.length,
41
- actionableItemsCount: context.actionableItems.length,
42
- revealedItemsCount: revealedItems.length,
43
- hasHoveredItem: Boolean(hoveredItem),
44
- hasStartingItem: Boolean(startingItem),
45
- hasStableHoveredItem: Boolean(stableHoveredItem),
46
- });
47
- if ((stayedOnSamePageState || revealedItems.length === 0) &&
48
- stableHoveredItem) {
49
- console.info("[PageAnalyzer][hover-follow-up] inline-click-already-required", {
50
- testInteractionId: context.currentTestInteractionId,
51
- sourceTitle: testInteraction.title,
52
- selector,
53
- currentPageStateId: context.currentPageStateId,
54
- beginningPageStateId: context.beginningPageStateId,
55
- stayedOnSamePageState,
56
- revealedItemsCount: revealedItems.length,
57
- });
58
- await analyzer.reconcileGeneratedSurfaceElements(context, {
59
- surfaceId: context.currentTestSurfaceId,
60
- surfaceTitle: "",
61
- desiredKeys: [],
62
- dependencyTestInteractionId: context.currentTestInteractionId,
63
- });
64
- return;
65
- }
66
- // Skip follow-up generation if this page path was already generated for in
67
- // this run (the analyzer instance tracks covered paths per run)
68
- const currentPath = context.currentPath.trim();
69
- const pageAlreadyCovered = await analyzer.hasGeneratedForPath(currentPath);
70
- if (pageAlreadyCovered) {
71
- console.info("[PageAnalyzer][hover-follow-up] page-already-covered", {
72
- testInteractionId: context.currentTestInteractionId,
73
- sourceTitle: testInteraction.title,
74
- currentPath,
75
- currentPageStateId: context.currentPageStateId,
76
- });
77
- await analyzer.reconcileGeneratedSurfaceElements(context, {
78
- surfaceId: context.currentTestSurfaceId,
79
- surfaceTitle: "",
80
- desiredKeys: [],
81
- dependencyTestInteractionId: context.currentTestInteractionId,
82
- });
83
- return;
84
- }
85
- // Skip if a different path already produced the same interactive elements.
86
- // Note: we check the hash but don't register it — registration happens in
87
- // the full generateTestInteractions pass. Registering here would
88
- // incorrectly block full generation for a page reached via non-hover.
89
- const actionableHash = await computeActionableHash(context.actionableItems);
90
- if (await analyzer.hasGeneratedForActionableHash(actionableHash)) {
91
- console.info("[PageAnalyzer][hover-follow-up] actionable-items-already-covered", {
92
- testInteractionId: context.currentTestInteractionId,
93
- sourceTitle: testInteraction.title,
94
- currentPath,
95
- actionableHash,
96
- });
97
- await analyzer.reconcileGeneratedSurfaceElements(context, {
98
- surfaceId: context.currentTestSurfaceId,
99
- surfaceTitle: "",
100
- desiredKeys: [],
101
- dependencyTestInteractionId: context.currentTestInteractionId,
102
- });
103
- return;
104
- }
105
- console.info("[PageAnalyzer][hover-follow-up] generating-hover-follow-ups", {
106
- testInteractionId: context.currentTestInteractionId,
107
- sourceTitle: testInteraction.title,
108
- selector,
109
- currentPageStateId: context.currentPageStateId,
110
- beginningPageStateId: context.beginningPageStateId,
111
- stayedOnSamePageState,
112
- revealedItemsCount: revealedItems.length,
113
- revealedSelectors: revealedItems
114
- .map((item) => item.selector)
115
- .filter(Boolean)
116
- .slice(0, 10),
117
- });
118
- const desiredKeys = revealedItems.map((item) => analyzer.getGeneratedKey(analyzer.buildHoverTestInteraction(item, context.currentPath, context.sizeClass, context.uid, context.currentPageStateId, context.currentTestInteractionId)));
119
- await analyzer.reconcileGeneratedSurfaceElements(context, {
120
- surfaceId: context.currentTestSurfaceId,
121
- surfaceTitle: "",
122
- desiredKeys,
123
- dependencyTestInteractionId: context.currentTestInteractionId,
124
- });
125
- const batchItems = [];
126
- for (const item of revealedItems) {
127
- const nextHover = analyzer.buildHoverTestInteraction(item, context.currentPath, context.sizeClass, context.uid, context.currentPageStateId, context.currentTestInteractionId);
128
- batchItems.push({
129
- runnerId: context.runnerId,
130
- testSurfaceId: context.currentTestSurfaceId,
131
- testInteraction: nextHover,
132
- testEnvironmentId: context.testEnvironmentId,
133
- testSurfaceRunId: context.currentSurfaceRunId ?? 0,
134
- });
135
- }
136
- if (batchItems.length > 0) {
137
- await context.api.ensureTestInteractionBatch(batchItems);
138
- }
139
- }
140
- //# sourceMappingURL=hover-follow-up.js.map
@@ -1 +0,0 @@
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,4 +0,0 @@
1
- import type { GeneratorOutput } from "@sudobility/testomniac_types";
2
- import type { AnalyzerContext } from "../types";
3
- export declare function generateKeyboardAndDisclosureTestInteractions(analyzer: any, context: AnalyzerContext): Promise<GeneratorOutput>;
4
- //# sourceMappingURL=keyboard-disclosure.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"keyboard-disclosure.d.ts","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/keyboard-disclosure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,wBAAsB,6CAA6C,CACjE,QAAQ,EAAE,GAAG,EACb,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,eAAe,CAAC,CAyE1B"}
@@ -1,61 +0,0 @@
1
- export async function generateKeyboardAndDisclosureTestInteractions(analyzer, context) {
2
- const allTests = analyzer.buildKeyboardAndDisclosureTestInteractions(context);
3
- // Filter out interactions whose replay selector was already generated
4
- // under a different URL variant of the same base path.
5
- const tests = [];
6
- for (const test of allTests) {
7
- const selector = test.steps?.[0]?.action?.path;
8
- const actionType = test.steps?.[0]?.action?.actionType;
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
- }
18
- const surfaceTitle = `Keyboard: ${context.currentPath}`;
19
- if (tests.length === 0) {
20
- return {
21
- creates: [],
22
- reconciles: [{ surfaceTitle, desiredKeys: [] }],
23
- };
24
- }
25
- const { runnerId, testEnvironmentId } = context;
26
- const batchItems = [];
27
- for (const test of tests) {
28
- batchItems.push({
29
- runnerId,
30
- testSurfaceId: 0,
31
- testInteraction: test,
32
- testEnvironmentId,
33
- });
34
- // Mark selector as generated for this base path
35
- const selector = test.steps?.[0]?.action?.path;
36
- const actionType = test.steps?.[0]?.action?.actionType;
37
- if (selector && actionType) {
38
- await analyzer.markGeneratedSelectorForBasePath(context.currentPath, actionType, selector);
39
- }
40
- }
41
- return {
42
- creates: [
43
- {
44
- testSurface: {
45
- title: surfaceTitle,
46
- description: `Keyboard parity and disclosure checks for ${context.currentPath}`,
47
- startingPageStateId: context.currentPageStateId,
48
- startingPath: context.currentPath,
49
- sizeClass: context.sizeClass,
50
- priority: 3,
51
- surface_tags: ["keyboard", "disclosure"],
52
- uid: context.uid,
53
- },
54
- interactions: batchItems,
55
- desiredKeys: tests.map((test) => analyzer.getGeneratedKey(test)),
56
- },
57
- ],
58
- reconciles: [],
59
- };
60
- }
61
- //# sourceMappingURL=keyboard-disclosure.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"keyboard-disclosure.js","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/keyboard-disclosure.ts"],"names":[],"mappings":"AAMA,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,GAAU,EAAE,CAAC;IACxB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC;QACvD,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,SAAS;QACX,CAAC;QACD,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC,+BAA+B,CACrE,OAAO,CAAC,WAAW,EACnB,UAAU,EACV,QAAQ,CACT,CAAC;QACF,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,aAAa,OAAO,CAAC,WAAW,EAAE,CAAC;IACxD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,OAAO,EAAE,EAAE;YACX,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;SAChD,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;IAEhD,MAAM,UAAU,GAAqC,EAAE,CAAC;IACxD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,UAAU,CAAC,IAAI,CAAC;YACd,QAAQ;YACR,aAAa,EAAE,CAAC;YAChB,eAAe,EAAE,IAAI;YACrB,iBAAiB;SAClB,CAAC,CAAC;QAEH,gDAAgD;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC;QACvD,IAAI,QAAQ,IAAI,UAAU,EAAE,CAAC;YAC3B,MAAM,QAAQ,CAAC,gCAAgC,CAC7C,OAAO,CAAC,WAAW,EACnB,UAAU,EACV,QAAQ,CACT,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,WAAW,EAAE;oBACX,KAAK,EAAE,YAAY;oBACnB,WAAW,EAAE,6CAA6C,OAAO,CAAC,WAAW,EAAE;oBAC/E,mBAAmB,EAAE,OAAO,CAAC,kBAAkB;oBAC/C,YAAY,EAAE,OAAO,CAAC,WAAW;oBACjC,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,QAAQ,EAAE,CAAC;oBACX,YAAY,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC;oBACxC,GAAG,EAAE,OAAO,CAAC,GAAG;iBACjB;gBACD,YAAY,EAAE,UAAU;gBACxB,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;aACtE;SACF;QACD,UAAU,EAAE,EAAE;KACf,CAAC;AACJ,CAAC"}
@@ -1,15 +0,0 @@
1
- import type { AnalyzerContext } from "../types";
2
- import type { LoginDetectionResult } from "../../../scanner/login-detector";
3
- import type { LoginConfig } from "../../../orchestrator/login-manager";
4
- /**
5
- * Generate login-specific test interactions when a login page is detected.
6
- *
7
- * Creates a `Login: {path}` surface with:
8
- * 1. Invalid email format test
9
- * 2. Empty password test
10
- * 3. Wrong password test
11
- * 4. Correct email/password login test
12
- * 5. SSO button click tests (per detected provider)
13
- */
14
- export declare function generateLoginTestInteractions(analyzer: any, context: AnalyzerContext, loginDetection: LoginDetectionResult, loginConfig?: LoginConfig): Promise<void>;
15
- //# sourceMappingURL=login.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAEvE;;;;;;;;;GASG;AACH,wBAAsB,6BAA6B,CACjD,QAAQ,EAAE,GAAG,EACb,OAAO,EAAE,eAAe,EACxB,cAAc,EAAE,oBAAoB,EACpC,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,IAAI,CAAC,CAiPf"}
@@ -1,218 +0,0 @@
1
- /**
2
- * Generate login-specific test interactions when a login page is detected.
3
- *
4
- * Creates a `Login: {path}` surface with:
5
- * 1. Invalid email format test
6
- * 2. Empty password test
7
- * 3. Wrong password test
8
- * 4. Correct email/password login test
9
- * 5. SSO button click tests (per detected provider)
10
- */
11
- export async function generateLoginTestInteractions(analyzer, context, loginDetection, loginConfig) {
12
- if (!loginDetection.isLoginPage)
13
- return;
14
- const surfaceTitle = `Login: ${context.currentPath}`;
15
- const { api, runnerId, testEnvironmentId, sizeClass, uid, bundleRun } = context;
16
- const { surface, surfaceRun } = await api.ensureTestSurfaceWithRun({
17
- runnerId,
18
- testEnvironmentId,
19
- testSurface: {
20
- title: surfaceTitle,
21
- description: `Login flow tests for ${context.currentPath}`,
22
- startingPageStateId: context.currentPageStateId,
23
- startingPath: context.currentPath,
24
- sizeClass,
25
- priority: 0, // High priority — login tests should run early
26
- surface_tags: ["login", "auth"],
27
- uid,
28
- },
29
- testSurfaceBundleId: bundleRun.testSurfaceBundleId,
30
- testSurfaceBundleRunId: bundleRun.id,
31
- });
32
- analyzer.invalidateSurfacesCache();
33
- context.events.onTestSurfaceCreated({
34
- surfaceId: surface.id,
35
- title: surface.title,
36
- });
37
- const desiredKeys = [];
38
- let previousInteractionId;
39
- // -------------------------------------------------------------------------
40
- // Email/password form tests
41
- // -------------------------------------------------------------------------
42
- if (loginDetection.loginForm && loginConfig?.password) {
43
- const form = loginDetection.loginForm;
44
- const emailField = form.fields.find(f => f.type === "email" ||
45
- f.name?.toLowerCase().includes("email") ||
46
- f.name?.toLowerCase().includes("user"));
47
- const passwordField = form.fields.find(f => f.type === "password");
48
- // Test 1: Invalid email format
49
- if (emailField?.selector) {
50
- const key = `login-invalid-email:${context.currentPath}`;
51
- desiredKeys.push(key);
52
- const interaction = await analyzer.ensureTestInteraction(api, {
53
- runnerId,
54
- testSurfaceId: surface.id,
55
- title: `Login: invalid email format`,
56
- testType: "form",
57
- sizeClass,
58
- startingPath: context.currentPath,
59
- startingPageStateId: context.currentPageStateId,
60
- uid,
61
- generatedKey: key,
62
- dependencyTestInteractionId: undefined,
63
- surfaceTags: ["login", "negative"],
64
- steps: [
65
- {
66
- action: "type",
67
- selector: emailField.selector,
68
- value: "not-an-email",
69
- },
70
- ...(passwordField?.selector
71
- ? [
72
- {
73
- action: "type",
74
- selector: passwordField.selector,
75
- value: "anypassword123",
76
- },
77
- ]
78
- : []),
79
- { action: "pressKey", key: "Enter" },
80
- ],
81
- globalExpectations: [
82
- {
83
- type: "error_visible",
84
- description: "An error message should be displayed for invalid email format",
85
- severity: "warning",
86
- priority: 2,
87
- },
88
- ],
89
- });
90
- await analyzer.ensureInteractionRun(api, interaction.id, surfaceRun.id, bundleRun.id);
91
- previousInteractionId = interaction.id;
92
- }
93
- // Test 2: Wrong password
94
- if (emailField?.selector && passwordField?.selector && loginConfig.email) {
95
- const key = `login-wrong-password:${context.currentPath}`;
96
- desiredKeys.push(key);
97
- const interaction = await analyzer.ensureTestInteraction(api, {
98
- runnerId,
99
- testSurfaceId: surface.id,
100
- title: `Login: wrong password`,
101
- testType: "form",
102
- sizeClass,
103
- startingPath: context.currentPath,
104
- startingPageStateId: context.currentPageStateId,
105
- uid,
106
- generatedKey: key,
107
- dependencyTestInteractionId: previousInteractionId,
108
- surfaceTags: ["login", "negative"],
109
- steps: [
110
- {
111
- action: "type",
112
- selector: emailField.selector,
113
- value: loginConfig.email,
114
- },
115
- {
116
- action: "type",
117
- selector: passwordField.selector,
118
- value: "incorrect_password_" + Date.now(),
119
- },
120
- { action: "pressKey", key: "Enter" },
121
- ],
122
- globalExpectations: [
123
- {
124
- type: "error_visible",
125
- description: "An authentication error message should be displayed for incorrect credentials",
126
- severity: "warning",
127
- priority: 2,
128
- },
129
- ],
130
- });
131
- await analyzer.ensureInteractionRun(api, interaction.id, surfaceRun.id, bundleRun.id);
132
- previousInteractionId = interaction.id;
133
- }
134
- // Test 3: Correct login (depends on the negative tests completing first)
135
- if (emailField?.selector && passwordField?.selector && loginConfig.email) {
136
- const key = `login-correct:${context.currentPath}`;
137
- desiredKeys.push(key);
138
- const interaction = await analyzer.ensureTestInteraction(api, {
139
- runnerId,
140
- testSurfaceId: surface.id,
141
- title: `Login: correct credentials`,
142
- testType: "form",
143
- sizeClass,
144
- startingPath: context.currentPath,
145
- startingPageStateId: context.currentPageStateId,
146
- uid,
147
- generatedKey: key,
148
- dependencyTestInteractionId: previousInteractionId,
149
- surfaceTags: ["login", "positive"],
150
- steps: [
151
- {
152
- action: "type",
153
- selector: emailField.selector,
154
- value: loginConfig.email,
155
- },
156
- {
157
- action: "type",
158
- selector: passwordField.selector,
159
- value: loginConfig.password,
160
- },
161
- { action: "pressKey", key: "Enter" },
162
- ],
163
- globalExpectations: [
164
- {
165
- type: "navigation_away",
166
- description: "Should navigate away from login page after successful authentication",
167
- severity: "error",
168
- priority: 1,
169
- },
170
- ],
171
- });
172
- await analyzer.ensureInteractionRun(api, interaction.id, surfaceRun.id, bundleRun.id);
173
- previousInteractionId = interaction.id;
174
- }
175
- }
176
- // -------------------------------------------------------------------------
177
- // SSO button tests
178
- // -------------------------------------------------------------------------
179
- for (const ssoButton of loginDetection.ssoButtons) {
180
- const key = `login-sso-${ssoButton.provider}:${context.currentPath}`;
181
- desiredKeys.push(key);
182
- const interaction = await analyzer.ensureTestInteraction(api, {
183
- runnerId,
184
- testSurfaceId: surface.id,
185
- title: `Login: ${ssoButton.provider} SSO`,
186
- testType: "interaction",
187
- sizeClass,
188
- startingPath: context.currentPath,
189
- startingPageStateId: context.currentPageStateId,
190
- uid,
191
- generatedKey: key,
192
- dependencyTestInteractionId: undefined,
193
- surfaceTags: ["login", "sso", ssoButton.provider],
194
- steps: [
195
- {
196
- action: "click",
197
- selector: ssoButton.selector,
198
- },
199
- ],
200
- globalExpectations: [
201
- {
202
- type: "navigation_away",
203
- description: `Should navigate to ${ssoButton.provider} SSO provider page`,
204
- severity: "warning",
205
- priority: 2,
206
- },
207
- ],
208
- });
209
- await analyzer.ensureInteractionRun(api, interaction.id, surfaceRun.id, bundleRun.id);
210
- }
211
- // Reconcile: mark any previously generated login interactions that are
212
- // no longer desired as inactive
213
- await analyzer.reconcileGeneratedSurfaceElements(context, {
214
- surfaceTitle,
215
- desiredKeys,
216
- });
217
- }
218
- //# sourceMappingURL=login.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/login.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import type { AnalyzerContext } from "../types";
2
- /**
3
- * Create direct navigation interactions for same-origin links discovered on
4
- * the current page. These are placed in the "Direct Navigations" surface
5
- * which runs as execution group 0 (before hover/content interactions), so
6
- * discovered pages get short dependency chains.
7
- *
8
- * Navigation interactions never have a dependencyTestInteractionId — they
9
- * navigate directly via goto.
10
- *
11
- * Items are deduplicated by relative path. Action URLs (add-to-cart, etc.)
12
- * are not navigated directly but their base page path is discovered.
13
- */
14
- export declare function generateNavigationTestInteractions(analyzer: any, context: AnalyzerContext): Promise<void>;
15
- //# sourceMappingURL=navigation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/navigation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD;;;;;;;;;;;GAWG;AACH,wBAAsB,kCAAkC,CACtD,QAAQ,EAAE,GAAG,EACb,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CAsHf"}