@skyramp/mcp 0.3.2-rc.pom-3 → 0.3.2

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 (289) hide show
  1. package/build/commands/commandLibrary.d.ts +1 -0
  2. package/build/commands/commandLibrary.js +19 -13
  3. package/build/commands/localDevTestChangesCommand.d.ts +15 -0
  4. package/build/commands/localDevTestChangesCommand.js +201 -0
  5. package/build/index.js +80 -6
  6. package/build/prompts/code-reuse.js +3 -0
  7. package/build/prompts/enhance-assertions/sharedAssertionRules.d.ts +1 -0
  8. package/build/prompts/enhance-assertions/sharedAssertionRules.js +17 -0
  9. package/build/prompts/initialize-workspace/initializeWorkspacePrompt.js +11 -9
  10. package/build/prompts/local-dev/local-dev-plan.d.ts +35 -0
  11. package/build/prompts/local-dev/local-dev-plan.js +429 -0
  12. package/build/prompts/local-dev/local-dev-prompts.d.ts +4 -0
  13. package/build/prompts/local-dev/local-dev-prompts.js +190 -0
  14. package/build/prompts/pom-aware-code-reuse.js +12 -0
  15. package/build/prompts/prompt-utils.d.ts +8 -0
  16. package/build/prompts/prompt-utils.js +33 -0
  17. package/build/prompts/sut-setup/modes/adaptWorkflowPrompt.js +37 -14
  18. package/build/prompts/sut-setup/shared.js +16 -12
  19. package/build/prompts/test-recommendation/analysisOutputPrompt.js +21 -29
  20. package/build/prompts/test-recommendation/scopeAssessment.d.ts +24 -7
  21. package/build/prompts/test-recommendation/scopeAssessment.js +111 -12
  22. package/build/prompts/test-recommendation/test-recommendation-prompt.js +41 -4
  23. package/build/prompts/testbot/testbot-prompts.d.ts +0 -5
  24. package/build/prompts/testbot/testbot-prompts.js +32 -52
  25. package/build/recommendation/planRanker.d.ts +15 -2
  26. package/build/recommendation/planRanker.js +76 -5
  27. package/build/resources/testbotResource.js +2 -1
  28. package/build/services/AnalyticsService.d.ts +1 -1
  29. package/build/services/TestExecutionService.d.ts +2 -1
  30. package/build/services/TestExecutionService.js +8 -3
  31. package/build/services/TestGenerationService.d.ts +2 -2
  32. package/build/services/TestGenerationService.js +39 -21
  33. package/build/services/containerEnv.js +3 -1
  34. package/build/tool-phases.js +6 -0
  35. package/build/tools/code-refactor/codeReuseTool.js +43 -4
  36. package/build/tools/code-refactor/enhanceAssertionsTool.js +68 -18
  37. package/build/tools/code-refactor/reuse-outcome.d.ts +109 -0
  38. package/build/tools/code-refactor/reuse-outcome.js +158 -0
  39. package/build/tools/code-refactor/reuse-state.d.ts +45 -0
  40. package/build/tools/code-refactor/reuse-state.js +140 -0
  41. package/build/tools/enrichTestWithMocksTool.d.ts +28 -0
  42. package/build/tools/enrichTestWithMocksTool.js +726 -0
  43. package/build/tools/executeSkyrampTestTool.d.ts +11 -0
  44. package/build/tools/executeSkyrampTestTool.js +62 -21
  45. package/build/tools/generate-tests/batchMockGenerationTool.d.ts +106 -0
  46. package/build/tools/generate-tests/batchMockGenerationTool.js +545 -0
  47. package/build/tools/generate-tests/generateBatchScenarioRestTool.js +25 -23
  48. package/build/tools/generate-tests/generateContractRestTool.js +2 -2
  49. package/build/tools/generate-tests/generateE2ERestTool.d.ts +1 -1
  50. package/build/tools/generate-tests/generateE2ERestTool.js +1 -1
  51. package/build/tools/generate-tests/generateLoadRestTool.d.ts +1 -1
  52. package/build/tools/generate-tests/generateLoadRestTool.js +1 -1
  53. package/build/tools/generate-tests/generateMockRestTool.d.ts +179 -6
  54. package/build/tools/generate-tests/generateMockRestTool.js +391 -22
  55. package/build/tools/generate-tests/loadTestSchema.d.ts +1 -1
  56. package/build/tools/generate-tests/planGuard.js +2 -22
  57. package/build/tools/generateEnrichedIntegrationTestTool.d.ts +25 -0
  58. package/build/tools/generateEnrichedIntegrationTestTool.js +235 -0
  59. package/build/tools/localDevWorkerComposeTool.d.ts +24 -0
  60. package/build/tools/localDevWorkerComposeTool.js +264 -0
  61. package/build/tools/one-click/oneClickTool.d.ts +13 -0
  62. package/build/tools/one-click/oneClickTool.js +195 -24
  63. package/build/tools/preflightMockCheckTool.d.ts +2 -0
  64. package/build/tools/preflightMockCheckTool.js +96 -0
  65. package/build/tools/queryProxyMocksTool.d.ts +70 -0
  66. package/build/tools/queryProxyMocksTool.js +522 -0
  67. package/build/tools/runExistingTestsTool.d.ts +31 -0
  68. package/build/tools/runExistingTestsTool.js +214 -13
  69. package/build/tools/submitReportTool.js +38 -3
  70. package/build/tools/test-management/analyzeChangesTool.d.ts +2 -1
  71. package/build/tools/test-management/analyzeChangesTool.js +63 -40
  72. package/build/tools/test-management/registerTestPlanTool.js +55 -7
  73. package/build/tools/trace/startTraceCollectionTool.js +3 -3
  74. package/build/types/FrontendIntegration.d.ts +3 -0
  75. package/build/types/FrontendIntegration.js +3 -0
  76. package/build/types/OneClickCommands.d.ts +1 -1
  77. package/build/types/Recommendation.d.ts +20 -0
  78. package/build/types/Recommendation.js +32 -6
  79. package/build/types/RepositoryAnalysis.d.ts +131 -14
  80. package/build/types/RepositoryAnalysis.js +16 -2
  81. package/build/types/ReuseOutcome.d.ts +63 -0
  82. package/build/types/ReuseOutcome.js +33 -0
  83. package/build/types/TestExecution.d.ts +1 -0
  84. package/build/types/TestTypes.d.ts +25 -7
  85. package/build/types/TestTypes.js +22 -6
  86. package/build/types/TestbotReport.d.ts +7 -0
  87. package/build/types/index.d.ts +2 -0
  88. package/build/types/index.js +1 -0
  89. package/build/utils/AnalysisStateManager.d.ts +26 -0
  90. package/build/utils/AnalysisStateManager.js +31 -1
  91. package/build/utils/analyze-openapi.js +18 -1
  92. package/build/utils/branchDiff.d.ts +17 -1
  93. package/build/utils/branchDiff.js +99 -14
  94. package/build/utils/featureFlags.d.ts +31 -0
  95. package/build/utils/featureFlags.js +37 -0
  96. package/build/utils/frontendIntegration.js +8 -1
  97. package/build/utils/grpcMockValidation.d.ts +1 -0
  98. package/build/utils/grpcMockValidation.js +49 -0
  99. package/build/utils/httpMethodValidation.d.ts +4 -0
  100. package/build/utils/httpMethodValidation.js +15 -0
  101. package/build/utils/logger.js +1 -1
  102. package/build/utils/mockCompatibility.d.ts +49 -0
  103. package/build/utils/mockCompatibility.js +82 -0
  104. package/build/utils/pom-scope/pom-files.js +7 -0
  105. package/build/utils/pom-verify/bindings.js +11 -1
  106. package/build/utils/pom-verify/re-exports.d.ts +10 -0
  107. package/build/utils/pom-verify/re-exports.js +61 -0
  108. package/build/utils/pom-verify/resolve.d.ts +4 -1
  109. package/build/utils/pom-verify/resolve.js +7 -4
  110. package/build/utils/pom-verify/verify.d.ts +5 -0
  111. package/build/utils/pom-verify/verify.js +25 -3
  112. package/build/utils/progress.js +10 -5
  113. package/build/utils/proxy-terminal.js +3 -3
  114. package/build/utils/routeParsers.d.ts +3 -9
  115. package/build/utils/routeParsers.js +79 -4
  116. package/build/utils/utils.js +2 -2
  117. package/build/utils/versions.d.ts +4 -3
  118. package/build/utils/versions.js +3 -1
  119. package/build/utils/workspaceAuth.d.ts +46 -0
  120. package/build/utils/workspaceAuth.js +156 -1
  121. package/build/workspace/testSuites.d.ts +2 -1
  122. package/build/workspace/testSuites.js +1 -1
  123. package/build/workspace/workspace.d.ts +108 -32
  124. package/build/workspace/workspace.js +32 -4
  125. package/package.json +5 -2
  126. package/build/adapters/jestAdapter.test.d.ts +0 -1
  127. package/build/adapters/jestAdapter.test.js +0 -93
  128. package/build/adapters/mochaAdapter.test.d.ts +0 -1
  129. package/build/adapters/mochaAdapter.test.js +0 -63
  130. package/build/adapters/playwrightAdapter.test.d.ts +0 -1
  131. package/build/adapters/playwrightAdapter.test.js +0 -169
  132. package/build/adapters/pytestAdapter.test.d.ts +0 -1
  133. package/build/adapters/pytestAdapter.test.js +0 -90
  134. package/build/prompts/code-reuse.test.d.ts +0 -1
  135. package/build/prompts/code-reuse.test.js +0 -62
  136. package/build/prompts/pom-aware-code-reuse.test.d.ts +0 -1
  137. package/build/prompts/pom-aware-code-reuse.test.js +0 -11
  138. package/build/prompts/test-maintenance/drift-analysis-prompt.test.d.ts +0 -1
  139. package/build/prompts/test-maintenance/drift-analysis-prompt.test.js +0 -51
  140. package/build/prompts/test-recommendation/analysisOutputPrompt.test.d.ts +0 -1
  141. package/build/prompts/test-recommendation/analysisOutputPrompt.test.js +0 -264
  142. package/build/prompts/test-recommendation/mergeEnrichedScenarios.test.d.ts +0 -1
  143. package/build/prompts/test-recommendation/mergeEnrichedScenarios.test.js +0 -126
  144. package/build/prompts/test-recommendation/promptPlan.test.d.ts +0 -1
  145. package/build/prompts/test-recommendation/promptPlan.test.js +0 -336
  146. package/build/prompts/test-recommendation/scopeAssessment.test.d.ts +0 -1
  147. package/build/prompts/test-recommendation/scopeAssessment.test.js +0 -371
  148. package/build/prompts/test-recommendation/test-recommendation-prompt.test.d.ts +0 -1
  149. package/build/prompts/test-recommendation/test-recommendation-prompt.test.js +0 -1925
  150. package/build/prompts/testbot/testbot-prompts.test.d.ts +0 -1
  151. package/build/prompts/testbot/testbot-prompts.test.js +0 -451
  152. package/build/recommendation/budgeters/diversityBalancedBudgeter.test.d.ts +0 -1
  153. package/build/recommendation/budgeters/diversityBalancedBudgeter.test.js +0 -138
  154. package/build/recommendation/budgeters/fixedNBudgeter.test.d.ts +0 -1
  155. package/build/recommendation/budgeters/fixedNBudgeter.test.js +0 -66
  156. package/build/recommendation/discriminators.test.d.ts +0 -1
  157. package/build/recommendation/discriminators.test.js +0 -324
  158. package/build/recommendation/diversity.test.d.ts +0 -1
  159. package/build/recommendation/diversity.test.js +0 -77
  160. package/build/recommendation/planRanker.test.d.ts +0 -1
  161. package/build/recommendation/planRanker.test.js +0 -110
  162. package/build/resources/testbotResource.test.d.ts +0 -1
  163. package/build/resources/testbotResource.test.js +0 -44
  164. package/build/services/AnalyticsService.test.d.ts +0 -1
  165. package/build/services/AnalyticsService.test.js +0 -86
  166. package/build/services/ScenarioGenerationService.integration.test.d.ts +0 -1
  167. package/build/services/ScenarioGenerationService.integration.test.js +0 -162
  168. package/build/services/ScenarioGenerationService.test.d.ts +0 -1
  169. package/build/services/ScenarioGenerationService.test.js +0 -414
  170. package/build/services/TestDiscoveryService.test.d.ts +0 -1
  171. package/build/services/TestDiscoveryService.test.js +0 -983
  172. package/build/services/TestExecutionService.test.d.ts +0 -1
  173. package/build/services/TestExecutionService.test.js +0 -1032
  174. package/build/services/TestGenerationService.test.d.ts +0 -1
  175. package/build/services/TestGenerationService.test.js +0 -578
  176. package/build/tool-phase-coverage.test.d.ts +0 -1
  177. package/build/tool-phase-coverage.test.js +0 -49
  178. package/build/tools/code-refactor/codeReuseTool.test.d.ts +0 -1
  179. package/build/tools/code-refactor/codeReuseTool.test.js +0 -572
  180. package/build/tools/generate-tests/generateBatchScenarioRestTool.test.d.ts +0 -1
  181. package/build/tools/generate-tests/generateBatchScenarioRestTool.test.js +0 -433
  182. package/build/tools/generate-tests/generateContractRestTool.test.d.ts +0 -1
  183. package/build/tools/generate-tests/generateContractRestTool.test.js +0 -142
  184. package/build/tools/generate-tests/generateIntegrationRestTool.test.d.ts +0 -1
  185. package/build/tools/generate-tests/generateIntegrationRestTool.test.js +0 -159
  186. package/build/tools/generate-tests/generateLoadRestTool.test.d.ts +0 -1
  187. package/build/tools/generate-tests/generateLoadRestTool.test.js +0 -169
  188. package/build/tools/generate-tests/generateUIRestTool.test.d.ts +0 -1
  189. package/build/tools/generate-tests/generateUIRestTool.test.js +0 -32
  190. package/build/tools/generate-tests/planGuard.test.d.ts +0 -1
  191. package/build/tools/generate-tests/planGuard.test.js +0 -185
  192. package/build/tools/generate-tests/scenarioLint.test.d.ts +0 -1
  193. package/build/tools/generate-tests/scenarioLint.test.js +0 -100
  194. package/build/tools/runExistingTestsTool.test.d.ts +0 -1
  195. package/build/tools/runExistingTestsTool.test.js +0 -379
  196. package/build/tools/submitReportTool.test.d.ts +0 -1
  197. package/build/tools/submitReportTool.test.js +0 -1428
  198. package/build/tools/test-management/actionsTool.test.d.ts +0 -1
  199. package/build/tools/test-management/actionsTool.test.js +0 -436
  200. package/build/tools/test-management/analyzeChangesTool.test.d.ts +0 -1
  201. package/build/tools/test-management/analyzeChangesTool.test.js +0 -522
  202. package/build/tools/test-management/analyzeTestHealthTool.test.d.ts +0 -1
  203. package/build/tools/test-management/analyzeTestHealthTool.test.js +0 -385
  204. package/build/tools/test-management/registerTestPlanTool.test.d.ts +0 -1
  205. package/build/tools/test-management/registerTestPlanTool.test.js +0 -296
  206. package/build/tools/trace/resolveSaveStoragePath.test.d.ts +0 -1
  207. package/build/tools/trace/resolveSaveStoragePath.test.js +0 -17
  208. package/build/tools/trace/resolveSessionPaths.test.d.ts +0 -1
  209. package/build/tools/trace/resolveSessionPaths.test.js +0 -104
  210. package/build/tools/trace/sessionState.test.d.ts +0 -1
  211. package/build/tools/trace/sessionState.test.js +0 -17
  212. package/build/tools/workspace/initializeWorkspaceTool.test.d.ts +0 -1
  213. package/build/tools/workspace/initializeWorkspaceTool.test.js +0 -139
  214. package/build/tools/workspace/serviceUpsert.test.d.ts +0 -1
  215. package/build/tools/workspace/serviceUpsert.test.js +0 -50
  216. package/build/utils/AnalysisStateManager.test.d.ts +0 -1
  217. package/build/utils/AnalysisStateManager.test.js +0 -134
  218. package/build/utils/dartRouteExtractor.test.d.ts +0 -1
  219. package/build/utils/dartRouteExtractor.test.js +0 -307
  220. package/build/utils/docker.test.d.ts +0 -1
  221. package/build/utils/docker.test.js +0 -114
  222. package/build/utils/featureFlags.test.d.ts +0 -1
  223. package/build/utils/featureFlags.test.js +0 -81
  224. package/build/utils/fileWalk.test.d.ts +0 -1
  225. package/build/utils/fileWalk.test.js +0 -252
  226. package/build/utils/frontendIntegration.test.d.ts +0 -1
  227. package/build/utils/frontendIntegration.test.js +0 -229
  228. package/build/utils/frontendSelectors.test.d.ts +0 -1
  229. package/build/utils/frontendSelectors.test.js +0 -118
  230. package/build/utils/gitStaging.test.d.ts +0 -1
  231. package/build/utils/gitStaging.test.js +0 -111
  232. package/build/utils/httpDefaults.test.d.ts +0 -1
  233. package/build/utils/httpDefaults.test.js +0 -21
  234. package/build/utils/importerHop.test.d.ts +0 -1
  235. package/build/utils/importerHop.test.js +0 -469
  236. package/build/utils/pathAffinityClassification.test.d.ts +0 -1
  237. package/build/utils/pathAffinityClassification.test.js +0 -208
  238. package/build/utils/planMatchKeys.test.d.ts +0 -1
  239. package/build/utils/planMatchKeys.test.js +0 -123
  240. package/build/utils/pom-scope/index.test.d.ts +0 -1
  241. package/build/utils/pom-scope/index.test.js +0 -278
  242. package/build/utils/pom-scope/pom-files.test.d.ts +0 -1
  243. package/build/utils/pom-scope/pom-files.test.js +0 -29
  244. package/build/utils/pom-scope/scoring.test.d.ts +0 -1
  245. package/build/utils/pom-scope/scoring.test.js +0 -39
  246. package/build/utils/pom-scope/selector-extractor.test.d.ts +0 -1
  247. package/build/utils/pom-scope/selector-extractor.test.js +0 -67
  248. package/build/utils/pom-verify/bindings.test.d.ts +0 -1
  249. package/build/utils/pom-verify/bindings.test.js +0 -164
  250. package/build/utils/pom-verify/calls.test.d.ts +0 -1
  251. package/build/utils/pom-verify/calls.test.js +0 -61
  252. package/build/utils/pom-verify/resolve.test.d.ts +0 -1
  253. package/build/utils/pom-verify/resolve.test.js +0 -114
  254. package/build/utils/pom-verify/verify.test.d.ts +0 -1
  255. package/build/utils/pom-verify/verify.test.js +0 -374
  256. package/build/utils/pr-comment-parser.test.d.ts +0 -1
  257. package/build/utils/pr-comment-parser.test.js +0 -428
  258. package/build/utils/progress.test.d.ts +0 -1
  259. package/build/utils/progress.test.js +0 -37
  260. package/build/utils/projectMetadata.test.d.ts +0 -1
  261. package/build/utils/projectMetadata.test.js +0 -172
  262. package/build/utils/pythonMountPrefixes.test.d.ts +0 -1
  263. package/build/utils/pythonMountPrefixes.test.js +0 -113
  264. package/build/utils/repoScanner.test.d.ts +0 -1
  265. package/build/utils/repoScanner.test.js +0 -190
  266. package/build/utils/reportVerification.test.d.ts +0 -1
  267. package/build/utils/reportVerification.test.js +0 -185
  268. package/build/utils/routeParsers.test.d.ts +0 -1
  269. package/build/utils/routeParsers.test.js +0 -1011
  270. package/build/utils/scenarioDrafting.test.d.ts +0 -1
  271. package/build/utils/scenarioDrafting.test.js +0 -876
  272. package/build/utils/sourceRouteExtractor.test.d.ts +0 -1
  273. package/build/utils/sourceRouteExtractor.test.js +0 -738
  274. package/build/utils/telemetry.test.d.ts +0 -1
  275. package/build/utils/telemetry.test.js +0 -70
  276. package/build/utils/trace-parser.test.d.ts +0 -6
  277. package/build/utils/trace-parser.test.js +0 -140
  278. package/build/utils/uiPageEnumerator.test.d.ts +0 -1
  279. package/build/utils/uiPageEnumerator.test.js +0 -824
  280. package/build/utils/utils.test.d.ts +0 -1
  281. package/build/utils/utils.test.js +0 -103
  282. package/build/utils/walkerCharacterization.test.d.ts +0 -1
  283. package/build/utils/walkerCharacterization.test.js +0 -233
  284. package/build/utils/workspaceAuth.test.d.ts +0 -1
  285. package/build/utils/workspaceAuth.test.js +0 -260
  286. package/build/workspace/testSuites.test.d.ts +0 -1
  287. package/build/workspace/testSuites.test.js +0 -23
  288. package/build/workspace/workspace.test.d.ts +0 -1
  289. package/build/workspace/workspace.test.js +0 -264
@@ -1,374 +0,0 @@
1
- import * as fs from "fs";
2
- import * as os from "os";
3
- import * as path from "path";
4
- import { fileURLToPath } from "url";
5
- import { verifyReuse } from "./verify.js";
6
- const OO = path.join(path.dirname(fileURLToPath(import.meta.url)), "__fixtures__", "oo-style");
7
- const AF = path.join(path.dirname(fileURLToPath(import.meta.url)), "__fixtures__", "af-style");
8
- /** Materializes a hermetic mkdtemp project (so `findRoot`/`globPomFiles` resolve deterministically
9
- * against just this tree, not the real monorepo checkout) and returns its root + a cleanup fn. */
10
- function makeProject(files) {
11
- const root = fs.mkdtempSync(path.join(os.tmpdir(), "pom-verify-"));
12
- for (const [rel, content] of Object.entries(files)) {
13
- const full = path.join(root, rel);
14
- fs.mkdirSync(path.dirname(full), { recursive: true });
15
- fs.writeFileSync(full, content);
16
- }
17
- return { root, cleanup: () => fs.rmSync(root, { recursive: true, force: true }) };
18
- }
19
- const read = (dir, name) => fs.readFileSync(path.join(dir, name), "utf8");
20
- describe("verifyReuse -- oo-style (page-manager convention)", () => {
21
- it("passes a clean spec: real method via pm binding -> ok:true, checkedCalls>0", async () => {
22
- const { root, cleanup } = makeProject({
23
- "package.json": `{"type":"module"}`,
24
- "pages/page-manager.js": read(OO, "page-manager.js"),
25
- "pages/loginPage.js": read(OO, "loginPage.js"),
26
- "pages/widgetsPage.js": read(OO, "widgetsPage.js"),
27
- "pages/widgetHelpers.js": read(OO, "widgetHelpers.js"),
28
- "clean.spec.js": `
29
- import { PageManager } from './pages/page-manager.js';
30
- async function run() {
31
- const pm = new PageManager(page);
32
- await pm.loginPage.signInAs(user);
33
- }
34
- await run();
35
- `,
36
- });
37
- try {
38
- const result = await verifyReuse(path.join(root, "clean.spec.js"), "javascript");
39
- expect(result.ok).toBe(true);
40
- expect(result.violations).toEqual([]);
41
- expect(result.checkedCalls).toBeGreaterThan(0);
42
- expect(result.parseError).toBeUndefined();
43
- }
44
- finally {
45
- cleanup();
46
- }
47
- });
48
- it("flags a hallucinated member with the real member list", async () => {
49
- const { root, cleanup } = makeProject({
50
- "package.json": `{"type":"module"}`,
51
- "pages/widgetsPage.js": read(OO, "widgetsPage.js"),
52
- "pages/widgetHelpers.js": read(OO, "widgetHelpers.js"),
53
- "violation.spec.js": `
54
- import { WidgetsPage } from './pages/widgetsPage.js';
55
- async function run() {
56
- const widgets = new WidgetsPage(page);
57
- await widgets.dragWidgetFake();
58
- }
59
- await run();
60
- `,
61
- });
62
- try {
63
- const result = await verifyReuse(path.join(root, "violation.spec.js"), "javascript");
64
- expect(result.violations).toEqual([
65
- {
66
- binding: "widgets",
67
- member: "dragWidgetFake",
68
- searched: [path.join(root, "pages", "widgetsPage.js"), path.join(root, "pages", "widgetHelpers.js")],
69
- availableMembers: expect.arrayContaining(["addBtn"]),
70
- },
71
- ]);
72
- expect(result.ok).toBe(false);
73
- }
74
- finally {
75
- cleanup();
76
- }
77
- });
78
- });
79
- describe("verifyReuse -- oo-style (CJS page-manager convention)", () => {
80
- it("engages on a CJS PageManager (no `export` on the class, module.exports, a default import, an extensionless require) -- real call passes, checkedCalls>0", async () => {
81
- const { root, cleanup } = makeProject({
82
- "package.json": `{}`,
83
- "pages/page-manager.js": read(OO, "page-manager-cjs.js"),
84
- "pages/loginPage.js": read(OO, "loginPage.js"),
85
- "pages/widgetsPage.js": read(OO, "widgetsPage.js"),
86
- "pages/widgetHelpers.js": read(OO, "widgetHelpers.js"),
87
- "cjs-clean.spec.js": `
88
- const PageManager = require('./pages/page-manager.js');
89
- async function run() {
90
- const pm = new PageManager(page);
91
- await pm.loginPage.signInAs(user);
92
- }
93
- run();
94
- `,
95
- });
96
- try {
97
- const result = await verifyReuse(path.join(root, "cjs-clean.spec.js"), "javascript");
98
- expect(result.ok).toBe(true);
99
- expect(result.violations).toEqual([]);
100
- expect(result.checkedCalls).toBeGreaterThan(0);
101
- expect(result.parseError).toBeUndefined();
102
- }
103
- finally {
104
- cleanup();
105
- }
106
- });
107
- it("flags a hallucinated method on a real pm member as a violation, with the real member list", async () => {
108
- const { root, cleanup } = makeProject({
109
- "package.json": `{}`,
110
- "pages/page-manager.js": read(OO, "page-manager-cjs.js"),
111
- "pages/loginPage.js": read(OO, "loginPage.js"),
112
- "pages/widgetsPage.js": read(OO, "widgetsPage.js"),
113
- "pages/widgetHelpers.js": read(OO, "widgetHelpers.js"),
114
- "cjs-violation.spec.js": `
115
- const PageManager = require('./pages/page-manager.js');
116
- async function run() {
117
- const pm = new PageManager(page);
118
- await pm.widgetsPage.dragWidgetFake();
119
- }
120
- run();
121
- `,
122
- });
123
- try {
124
- const result = await verifyReuse(path.join(root, "cjs-violation.spec.js"), "javascript");
125
- expect(result.violations).toEqual([
126
- {
127
- binding: "pm.widgetsPage",
128
- member: "dragWidgetFake",
129
- searched: [path.join(root, "pages", "widgetsPage.js"), path.join(root, "pages", "widgetHelpers.js")],
130
- availableMembers: expect.arrayContaining(["addBtn"]),
131
- },
132
- ]);
133
- expect(result.ok).toBe(false);
134
- }
135
- finally {
136
- cleanup();
137
- }
138
- });
139
- });
140
- describe("verifyReuse -- af-style (tsconfig path-alias imports)", () => {
141
- it("engages via a `@pageobjects/*` tsconfig alias -- real member passes, checkedCalls>0", async () => {
142
- const { root, cleanup } = makeProject({
143
- "tsconfig.json": read(AF, "alias.tsconfig.json"),
144
- "src/pageobjects/asset-list-page.ts": read(AF, "pageobjects/asset-list-page.ts"),
145
- "src/tests/alias.spec.ts": `
146
- import { AssetListPage } from '@pageobjects/asset-list-page';
147
- const list = new AssetListPage(page);
148
- await list.clickSearch();
149
- `,
150
- });
151
- try {
152
- const result = await verifyReuse(path.join(root, "src", "tests", "alias.spec.ts"), "typescript");
153
- expect(result.ok).toBe(true);
154
- expect(result.violations).toEqual([]);
155
- expect(result.checkedCalls).toBeGreaterThan(0);
156
- }
157
- finally {
158
- cleanup();
159
- }
160
- });
161
- it("flags a hallucinated method reached via the alias import as a violation", async () => {
162
- const { root, cleanup } = makeProject({
163
- "tsconfig.json": read(AF, "alias.tsconfig.json"),
164
- "src/pageobjects/asset-list-page.ts": read(AF, "pageobjects/asset-list-page.ts"),
165
- "src/tests/alias-violation.spec.ts": `
166
- import { AssetListPage } from '@pageobjects/asset-list-page';
167
- const list = new AssetListPage(page);
168
- await list.clickSearchFake();
169
- `,
170
- });
171
- try {
172
- const result = await verifyReuse(path.join(root, "src", "tests", "alias-violation.spec.ts"), "typescript");
173
- expect(result.violations).toEqual([
174
- {
175
- binding: "list",
176
- member: "clickSearchFake",
177
- searched: [path.join(root, "src", "pageobjects", "asset-list-page.ts")],
178
- availableMembers: expect.arrayContaining(["clickSearch"]),
179
- },
180
- ]);
181
- expect(result.ok).toBe(false);
182
- }
183
- finally {
184
- cleanup();
185
- }
186
- });
187
- });
188
- describe("verifyReuse -- af-style (direct instantiation)", () => {
189
- it("routes deep chains and unknown bindings to unverifiable, never violations", async () => {
190
- const { root, cleanup } = makeProject({
191
- "components/asset-list.page.ts": read(AF, "asset-list.page.ts"),
192
- "components/workflow-footer.page.ts": read(AF, "workflow-footer.page.ts"),
193
- "deep.spec.ts": `
194
- import { AssetListPage } from './components/asset-list.page.js';
195
- import { Unknown } from './components/unknown.js';
196
- const list = new AssetListPage(page);
197
- const thing = new Unknown();
198
- await list.footer.okBtn.click();
199
- `,
200
- });
201
- try {
202
- const result = await verifyReuse(path.join(root, "deep.spec.ts"), "typescript");
203
- expect(result.violations).toEqual([]);
204
- expect(result.unverifiable).toEqual(expect.arrayContaining(["list.footer.okBtn.click", "thing"]));
205
- expect(result.ok).toBe(true);
206
- }
207
- finally {
208
- cleanup();
209
- }
210
- });
211
- it("verifies a direct-instantiation class's own member against the class file", async () => {
212
- const { root, cleanup } = makeProject({
213
- "components/report.iframe.page.ts": read(AF, "report.iframe.page.ts"),
214
- "iframe.spec.ts": `
215
- import { ReportIframePage } from './components/report.iframe.page.js';
216
- const report = new ReportIframePage(frame);
217
- expect(report.exportBtn).toBeVisible();
218
- `,
219
- });
220
- try {
221
- const result = await verifyReuse(path.join(root, "iframe.spec.ts"), "typescript");
222
- expect(result.violations).toEqual([]);
223
- expect(result.ok).toBe(true);
224
- expect(result.checkedCalls).toBeGreaterThan(0);
225
- }
226
- finally {
227
- cleanup();
228
- }
229
- });
230
- });
231
- describe("verifyReuse -- free-function bindings", () => {
232
- it("verifies a real free-function call (empty chain) against its source file -- ok:true, checkedCalls>0", async () => {
233
- const { root, cleanup } = makeProject({
234
- "package.json": `{"type":"module"}`,
235
- "pages/commonActions.js": read(OO, "commonActions.js"),
236
- "clean-fn.spec.js": `
237
- import { openNavFlyout } from './pages/commonActions.js';
238
- async function run() {
239
- await openNavFlyout(page);
240
- }
241
- await run();
242
- `,
243
- });
244
- try {
245
- const result = await verifyReuse(path.join(root, "clean-fn.spec.js"), "javascript");
246
- expect(result.violations).toEqual([]);
247
- expect(result.ok).toBe(true);
248
- expect(result.checkedCalls).toBeGreaterThan(0);
249
- }
250
- finally {
251
- cleanup();
252
- }
253
- });
254
- it("flags a hallucinated free-function call instead of crashing on the empty chain", async () => {
255
- const { root, cleanup } = makeProject({
256
- "package.json": `{"type":"module"}`,
257
- "pages/commonActions.js": read(OO, "commonActions.js"),
258
- "violation-fn.spec.js": `
259
- import { fakeHelper } from './pages/commonActions.js';
260
- async function run() {
261
- await fakeHelper(page);
262
- }
263
- await run();
264
- `,
265
- });
266
- try {
267
- const result = await verifyReuse(path.join(root, "violation-fn.spec.js"), "javascript");
268
- expect(result.violations).toEqual([
269
- {
270
- binding: "fakeHelper",
271
- member: "fakeHelper",
272
- searched: [path.join(root, "pages", "commonActions.js")],
273
- availableMembers: expect.any(Array),
274
- },
275
- ]);
276
- expect(result.ok).toBe(false);
277
- }
278
- finally {
279
- cleanup();
280
- }
281
- });
282
- });
283
- describe("verifyReuse -- listMembers keyword noise", () => {
284
- it("excludes control-flow keywords and constructor from availableMembers, but keeps real methods", async () => {
285
- const { root, cleanup } = makeProject({
286
- "package.json": `{"type":"module"}`,
287
- "pages/controlFlowPage.js": `
288
- export class ControlFlowPage {
289
- constructor(page) {
290
- this.page = page;
291
- }
292
- realMethod() {
293
- if (this.page) {
294
- }
295
- for (let i = 0; i < 1; i++) {
296
- }
297
- while (this.page) {
298
- }
299
- switch (this.page) {
300
- }
301
- try {
302
- }
303
- catch (e) {
304
- }
305
- return(this.page);
306
- }
307
- }
308
- `,
309
- "control-flow.spec.js": `
310
- import { ControlFlowPage } from './pages/controlFlowPage.js';
311
- async function run() {
312
- const page = new ControlFlowPage(p);
313
- await page.doesNotExist();
314
- }
315
- await run();
316
- `,
317
- });
318
- try {
319
- const result = await verifyReuse(path.join(root, "control-flow.spec.js"), "javascript");
320
- expect(result.violations).toHaveLength(1);
321
- const { availableMembers } = result.violations[0];
322
- expect(availableMembers).toEqual(expect.arrayContaining(["realMethod"]));
323
- for (const keyword of ["if", "for", "while", "switch", "catch", "return", "constructor"]) {
324
- expect(availableMembers).not.toContain(keyword);
325
- }
326
- }
327
- finally {
328
- cleanup();
329
- }
330
- });
331
- });
332
- describe("verifyReuse -- tsconfig paths with non-string values", () => {
333
- it("skips a non-string paths target instead of throwing -- verification still runs", async () => {
334
- const { root, cleanup } = makeProject({
335
- "package.json": `{"type":"module"}`,
336
- "tsconfig.json": `{"compilerOptions":{"paths":{"@x/*":[42]}}}`,
337
- "pages/commonActions.js": read(OO, "commonActions.js"),
338
- "clean-fn.spec.js": `
339
- import { openNavFlyout } from './pages/commonActions.js';
340
- async function run() {
341
- await openNavFlyout(page);
342
- }
343
- await run();
344
- `,
345
- });
346
- try {
347
- const result = await verifyReuse(path.join(root, "clean-fn.spec.js"), "javascript");
348
- expect(result.parseError).toBeUndefined();
349
- expect(result.violations).toEqual([]);
350
- expect(result.ok).toBe(true);
351
- expect(result.checkedCalls).toBeGreaterThan(0);
352
- }
353
- finally {
354
- cleanup();
355
- }
356
- });
357
- });
358
- describe("verifyReuse -- parse errors", () => {
359
- it("reports a parse error for broken JS output", async () => {
360
- const { root, cleanup } = makeProject({
361
- "package.json": `{"type":"module"}`,
362
- "broken.spec.js": `function broken( {\n`,
363
- });
364
- try {
365
- const result = await verifyReuse(path.join(root, "broken.spec.js"), "javascript");
366
- expect(result.ok).toBe(false);
367
- expect(result.parseError).toBeDefined();
368
- expect(result.parseError.length).toBeLessThanOrEqual(500);
369
- }
370
- finally {
371
- cleanup();
372
- }
373
- });
374
- });
@@ -1 +0,0 @@
1
- export {};