@sudobility/testomniac_runner_service 0.1.74 → 0.1.76

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 (59) hide show
  1. package/dist/analyzer/page-analyzer/generators/login.d.ts +15 -0
  2. package/dist/analyzer/page-analyzer/generators/login.d.ts.map +1 -0
  3. package/dist/analyzer/page-analyzer/generators/login.js +209 -0
  4. package/dist/analyzer/page-analyzer/generators/login.js.map +1 -0
  5. package/dist/analyzer/page-analyzer/index.d.ts.map +1 -1
  6. package/dist/analyzer/page-analyzer/index.js +16 -0
  7. package/dist/analyzer/page-analyzer/index.js.map +1 -1
  8. package/dist/analyzer/page-analyzer/types.d.ts +5 -0
  9. package/dist/analyzer/page-analyzer/types.d.ts.map +1 -1
  10. package/dist/api/client.d.ts +11 -0
  11. package/dist/api/client.d.ts.map +1 -1
  12. package/dist/api/client.js +6 -0
  13. package/dist/api/client.js.map +1 -1
  14. package/dist/crawler/link-extractor.d.ts +1 -1
  15. package/dist/crawler/link-extractor.d.ts.map +1 -1
  16. package/dist/crawler/link-extractor.js +4 -1
  17. package/dist/crawler/link-extractor.js.map +1 -1
  18. package/dist/crawler/scope-checker.d.ts +6 -0
  19. package/dist/crawler/scope-checker.d.ts.map +1 -0
  20. package/dist/crawler/scope-checker.js +14 -0
  21. package/dist/crawler/scope-checker.js.map +1 -0
  22. package/dist/expertise/content-expertise.d.ts +3 -0
  23. package/dist/expertise/content-expertise.d.ts.map +1 -1
  24. package/dist/expertise/content-expertise.js +95 -0
  25. package/dist/expertise/content-expertise.js.map +1 -1
  26. package/dist/expertise/ui-expertise.d.ts +2 -0
  27. package/dist/expertise/ui-expertise.d.ts.map +1 -1
  28. package/dist/expertise/ui-expertise.js +77 -0
  29. package/dist/expertise/ui-expertise.js.map +1 -1
  30. package/dist/index.d.ts +4 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +3 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/orchestrator/login-manager.d.ts +62 -0
  35. package/dist/orchestrator/login-manager.d.ts.map +1 -0
  36. package/dist/orchestrator/login-manager.js +241 -0
  37. package/dist/orchestrator/login-manager.js.map +1 -0
  38. package/dist/orchestrator/runner.d.ts.map +1 -1
  39. package/dist/orchestrator/runner.js +49 -1
  40. package/dist/orchestrator/runner.js.map +1 -1
  41. package/dist/orchestrator/sso-handler.d.ts +29 -0
  42. package/dist/orchestrator/sso-handler.d.ts.map +1 -0
  43. package/dist/orchestrator/sso-handler.js +223 -0
  44. package/dist/orchestrator/sso-handler.js.map +1 -0
  45. package/dist/orchestrator/test-interaction-executor.d.ts +1 -1
  46. package/dist/orchestrator/test-interaction-executor.d.ts.map +1 -1
  47. package/dist/orchestrator/test-interaction-executor.js +62 -1
  48. package/dist/orchestrator/test-interaction-executor.js.map +1 -1
  49. package/dist/orchestrator/types.d.ts +5 -0
  50. package/dist/orchestrator/types.d.ts.map +1 -1
  51. package/dist/scanner/login-detector.d.ts +25 -0
  52. package/dist/scanner/login-detector.d.ts.map +1 -0
  53. package/dist/scanner/login-detector.js +232 -0
  54. package/dist/scanner/login-detector.js.map +1 -0
  55. package/dist/scanner/page-health-evaluator.d.ts +16 -0
  56. package/dist/scanner/page-health-evaluator.d.ts.map +1 -0
  57. package/dist/scanner/page-health-evaluator.js +222 -0
  58. package/dist/scanner/page-health-evaluator.js.map +1 -0
  59. package/package.json +3 -3
@@ -0,0 +1,15 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,209 @@
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 = await api.ensureTestSurface(runnerId, {
17
+ title: surfaceTitle,
18
+ description: `Login flow tests for ${context.currentPath}`,
19
+ startingPageStateId: context.currentPageStateId,
20
+ startingPath: context.currentPath,
21
+ sizeClass,
22
+ priority: 0, // High priority — login tests should run early
23
+ surface_tags: ["login", "auth"],
24
+ uid,
25
+ }, testEnvironmentId);
26
+ context.events.onTestSurfaceCreated({
27
+ surfaceId: surface.id,
28
+ title: surface.title,
29
+ });
30
+ await api.ensureBundleSurfaceLink(bundleRun.testSurfaceBundleId, surface.id);
31
+ const surfaceRun = await analyzer.ensureSurfaceRun(api, surface.id, bundleRun.id);
32
+ const desiredKeys = [];
33
+ let previousInteractionId;
34
+ // -------------------------------------------------------------------------
35
+ // Email/password form tests
36
+ // -------------------------------------------------------------------------
37
+ if (loginDetection.loginForm && loginConfig?.password) {
38
+ const form = loginDetection.loginForm;
39
+ const emailField = form.fields.find(f => f.type === "email" ||
40
+ f.name?.toLowerCase().includes("email") ||
41
+ f.name?.toLowerCase().includes("user"));
42
+ const passwordField = form.fields.find(f => f.type === "password");
43
+ // Test 1: Invalid email format
44
+ if (emailField?.selector) {
45
+ const key = `login-invalid-email:${context.currentPath}`;
46
+ desiredKeys.push(key);
47
+ const interaction = await analyzer.ensureTestInteraction(api, {
48
+ runnerId,
49
+ testSurfaceId: surface.id,
50
+ title: `Login: invalid email format`,
51
+ testType: "form",
52
+ sizeClass,
53
+ startingPath: context.currentPath,
54
+ startingPageStateId: context.currentPageStateId,
55
+ uid,
56
+ generatedKey: key,
57
+ dependencyTestInteractionId: undefined,
58
+ surfaceTags: ["login", "negative"],
59
+ steps: [
60
+ {
61
+ action: "type",
62
+ selector: emailField.selector,
63
+ value: "not-an-email",
64
+ },
65
+ ...(passwordField?.selector
66
+ ? [
67
+ {
68
+ action: "type",
69
+ selector: passwordField.selector,
70
+ value: "anypassword123",
71
+ },
72
+ ]
73
+ : []),
74
+ { action: "pressKey", key: "Enter" },
75
+ ],
76
+ globalExpectations: [
77
+ {
78
+ type: "error_visible",
79
+ description: "An error message should be displayed for invalid email format",
80
+ severity: "warning",
81
+ },
82
+ ],
83
+ });
84
+ await analyzer.ensureInteractionRun(api, interaction.id, surfaceRun.id, bundleRun.id);
85
+ previousInteractionId = interaction.id;
86
+ }
87
+ // Test 2: Wrong password
88
+ if (emailField?.selector && passwordField?.selector && loginConfig.email) {
89
+ const key = `login-wrong-password:${context.currentPath}`;
90
+ desiredKeys.push(key);
91
+ const interaction = await analyzer.ensureTestInteraction(api, {
92
+ runnerId,
93
+ testSurfaceId: surface.id,
94
+ title: `Login: wrong password`,
95
+ testType: "form",
96
+ sizeClass,
97
+ startingPath: context.currentPath,
98
+ startingPageStateId: context.currentPageStateId,
99
+ uid,
100
+ generatedKey: key,
101
+ dependencyTestInteractionId: previousInteractionId,
102
+ surfaceTags: ["login", "negative"],
103
+ steps: [
104
+ {
105
+ action: "type",
106
+ selector: emailField.selector,
107
+ value: loginConfig.email,
108
+ },
109
+ {
110
+ action: "type",
111
+ selector: passwordField.selector,
112
+ value: "incorrect_password_" + Date.now(),
113
+ },
114
+ { action: "pressKey", key: "Enter" },
115
+ ],
116
+ globalExpectations: [
117
+ {
118
+ type: "error_visible",
119
+ description: "An authentication error message should be displayed for incorrect credentials",
120
+ severity: "warning",
121
+ },
122
+ ],
123
+ });
124
+ await analyzer.ensureInteractionRun(api, interaction.id, surfaceRun.id, bundleRun.id);
125
+ previousInteractionId = interaction.id;
126
+ }
127
+ // Test 3: Correct login (depends on the negative tests completing first)
128
+ if (emailField?.selector && passwordField?.selector && loginConfig.email) {
129
+ const key = `login-correct:${context.currentPath}`;
130
+ desiredKeys.push(key);
131
+ const interaction = await analyzer.ensureTestInteraction(api, {
132
+ runnerId,
133
+ testSurfaceId: surface.id,
134
+ title: `Login: correct credentials`,
135
+ testType: "form",
136
+ sizeClass,
137
+ startingPath: context.currentPath,
138
+ startingPageStateId: context.currentPageStateId,
139
+ uid,
140
+ generatedKey: key,
141
+ dependencyTestInteractionId: previousInteractionId,
142
+ surfaceTags: ["login", "positive"],
143
+ steps: [
144
+ {
145
+ action: "type",
146
+ selector: emailField.selector,
147
+ value: loginConfig.email,
148
+ },
149
+ {
150
+ action: "type",
151
+ selector: passwordField.selector,
152
+ value: loginConfig.password,
153
+ },
154
+ { action: "pressKey", key: "Enter" },
155
+ ],
156
+ globalExpectations: [
157
+ {
158
+ type: "navigation_away",
159
+ description: "Should navigate away from login page after successful authentication",
160
+ severity: "error",
161
+ },
162
+ ],
163
+ });
164
+ await analyzer.ensureInteractionRun(api, interaction.id, surfaceRun.id, bundleRun.id);
165
+ previousInteractionId = interaction.id;
166
+ }
167
+ }
168
+ // -------------------------------------------------------------------------
169
+ // SSO button tests
170
+ // -------------------------------------------------------------------------
171
+ for (const ssoButton of loginDetection.ssoButtons) {
172
+ const key = `login-sso-${ssoButton.provider}:${context.currentPath}`;
173
+ desiredKeys.push(key);
174
+ const interaction = await analyzer.ensureTestInteraction(api, {
175
+ runnerId,
176
+ testSurfaceId: surface.id,
177
+ title: `Login: ${ssoButton.provider} SSO`,
178
+ testType: "interaction",
179
+ sizeClass,
180
+ startingPath: context.currentPath,
181
+ startingPageStateId: context.currentPageStateId,
182
+ uid,
183
+ generatedKey: key,
184
+ dependencyTestInteractionId: undefined,
185
+ surfaceTags: ["login", "sso", ssoButton.provider],
186
+ steps: [
187
+ {
188
+ action: "click",
189
+ selector: ssoButton.selector,
190
+ },
191
+ ],
192
+ globalExpectations: [
193
+ {
194
+ type: "navigation_away",
195
+ description: `Should navigate to ${ssoButton.provider} SSO provider page`,
196
+ severity: "warning",
197
+ },
198
+ ],
199
+ });
200
+ await analyzer.ensureInteractionRun(api, interaction.id, surfaceRun.id, bundleRun.id);
201
+ }
202
+ // Reconcile: mark any previously generated login interactions that are
203
+ // no longer desired as inactive
204
+ await analyzer.reconcileGeneratedSurfaceElements(context, {
205
+ surfaceTitle,
206
+ desiredKeys,
207
+ });
208
+ }
209
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/login.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analyzer/page-analyzer/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analyzer/page-analyzer/index.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ import { generateDialogLifecycleTestInteractions } from "./generators/dialogs";
16
16
  import { generateKeyboardAndDisclosureTestInteractions } from "./generators/keyboard-disclosure";
17
17
  import { generateVariantTestInteractions } from "./generators/variants";
18
18
  import { generateContentTestInteractions } from "./generators/content";
19
+ import { generateLoginTestInteractions } from "./generators/login";
19
20
  function logAnalyzer(step, details) {
20
21
  console.info("[PageAnalyzer]", step, details ?? {});
21
22
  }
@@ -165,6 +166,16 @@ export class PageAnalyzer {
165
166
  formsCount: context.forms.length,
166
167
  scaffoldsCount: context.scaffolds.length,
167
168
  });
169
+ // Skip generation if the current path is outside the scan scope boundary
170
+ if (context.scanScopePath &&
171
+ !context.currentPath.startsWith(context.scanScopePath)) {
172
+ logAnalyzer("generate:out-of-scope", {
173
+ sourceTitle: testInteraction.title,
174
+ currentPath: context.currentPath,
175
+ scanScopePath: context.scanScopePath,
176
+ });
177
+ return;
178
+ }
168
179
  const normalizedContext = this.normalizeContext(context);
169
180
  const currentPageStateId = await this.ensureTargetPageState(normalizedContext);
170
181
  const resolvedContext = {
@@ -247,6 +258,11 @@ export class PageAnalyzer {
247
258
  });
248
259
  await generateRenderTestInteractions(this, contextForFullPass);
249
260
  await generateFormTestInteractions(this, contextForFullPass);
261
+ // Login test generation: detect login forms in context and generate
262
+ // login-specific tests if the page appears to be a login page
263
+ if (contextForFullPass.loginDetection?.isLoginPage) {
264
+ await generateLoginTestInteractions(this, contextForFullPass, contextForFullPass.loginDetection, contextForFullPass.loginConfig);
265
+ }
250
266
  await generateSemanticJourneyTestInteractions(this, contextForFullPass);
251
267
  await generateE2ETestInteractions(this, contextForFullPass);
252
268
  await generateDialogLifecycleTestInteractions(this, contextForFullPass);