@sudobility/testomniac_runner_service 0.1.74 → 0.1.75

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 (47) 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/index.d.ts +3 -0
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +2 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/orchestrator/login-manager.d.ts +62 -0
  27. package/dist/orchestrator/login-manager.d.ts.map +1 -0
  28. package/dist/orchestrator/login-manager.js +241 -0
  29. package/dist/orchestrator/login-manager.js.map +1 -0
  30. package/dist/orchestrator/runner.d.ts.map +1 -1
  31. package/dist/orchestrator/runner.js +49 -1
  32. package/dist/orchestrator/runner.js.map +1 -1
  33. package/dist/orchestrator/sso-handler.d.ts +29 -0
  34. package/dist/orchestrator/sso-handler.d.ts.map +1 -0
  35. package/dist/orchestrator/sso-handler.js +223 -0
  36. package/dist/orchestrator/sso-handler.js.map +1 -0
  37. package/dist/orchestrator/test-interaction-executor.d.ts +1 -1
  38. package/dist/orchestrator/test-interaction-executor.d.ts.map +1 -1
  39. package/dist/orchestrator/test-interaction-executor.js +35 -1
  40. package/dist/orchestrator/test-interaction-executor.js.map +1 -1
  41. package/dist/orchestrator/types.d.ts +5 -0
  42. package/dist/orchestrator/types.d.ts.map +1 -1
  43. package/dist/scanner/login-detector.d.ts +25 -0
  44. package/dist/scanner/login-detector.d.ts.map +1 -0
  45. package/dist/scanner/login-detector.js +232 -0
  46. package/dist/scanner/login-detector.js.map +1 -0
  47. 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);