@igstack/app-catalog-test-kit 0.18.6

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 (92) hide show
  1. package/README.md +51 -0
  2. package/dist/esm/harness/MockBackendVerifier.d.ts +8 -0
  3. package/dist/esm/harness/MockBackendVerifier.js +15 -0
  4. package/dist/esm/harness/MockBackendVerifier.js.map +1 -0
  5. package/dist/esm/harness/given.d.ts +23 -0
  6. package/dist/esm/harness/given.js +144 -0
  7. package/dist/esm/harness/given.js.map +1 -0
  8. package/dist/esm/index.d.ts +38 -0
  9. package/dist/esm/index.js +45 -0
  10. package/dist/esm/index.js.map +1 -0
  11. package/dist/esm/mock-backend/BrowserStateCfg.d.ts +18 -0
  12. package/dist/esm/mock-backend/BrowserStateCfg.js +33 -0
  13. package/dist/esm/mock-backend/BrowserStateCfg.js.map +1 -0
  14. package/dist/esm/mock-backend/MockBackendConfigurer.d.ts +17 -0
  15. package/dist/esm/mock-backend/MockBackendConfigurer.js +80 -0
  16. package/dist/esm/mock-backend/MockBackendConfigurer.js.map +1 -0
  17. package/dist/esm/mock-backend/MockDb.d.ts +18 -0
  18. package/dist/esm/mock-backend/MockDb.js +56 -0
  19. package/dist/esm/mock-backend/MockDb.js.map +1 -0
  20. package/dist/esm/mock-backend/MockService.d.ts +10 -0
  21. package/dist/esm/mock-backend/MockService.js +16 -0
  22. package/dist/esm/mock-backend/MockService.js.map +1 -0
  23. package/dist/esm/mock-backend/MockUserContext.d.ts +11 -0
  24. package/dist/esm/mock-backend/MockUserContext.js +38 -0
  25. package/dist/esm/mock-backend/MockUserContext.js.map +1 -0
  26. package/dist/esm/mock-backend/magazines.d.ts +22 -0
  27. package/dist/esm/mock-backend/magazines.js +186 -0
  28. package/dist/esm/mock-backend/magazines.js.map +1 -0
  29. package/dist/esm/mock-network/NetworkCatalog.d.ts +12 -0
  30. package/dist/esm/mock-network/NetworkCatalog.js +24 -0
  31. package/dist/esm/mock-network/NetworkCatalog.js.map +1 -0
  32. package/dist/esm/mock-network/NetworkConfigurerCfg.d.ts +13 -0
  33. package/dist/esm/mock-network/NetworkConfigurerCfg.js +16 -0
  34. package/dist/esm/mock-network/NetworkConfigurerCfg.js.map +1 -0
  35. package/dist/esm/mock-network/SharedNetwork.d.ts +13 -0
  36. package/dist/esm/mock-network/SharedNetwork.js +149 -0
  37. package/dist/esm/mock-network/SharedNetwork.js.map +1 -0
  38. package/dist/esm/mock-network/errorFactories.d.ts +11 -0
  39. package/dist/esm/mock-network/errorFactories.js +22 -0
  40. package/dist/esm/mock-network/errorFactories.js.map +1 -0
  41. package/dist/esm/mock-network/makeNetworkReplyWithCatalog.d.ts +3 -0
  42. package/dist/esm/mock-network/makeNetworkReplyWithCatalog.js +17 -0
  43. package/dist/esm/mock-network/makeNetworkReplyWithCatalog.js.map +1 -0
  44. package/dist/esm/setup/polyfillLocalStorage.d.ts +0 -0
  45. package/dist/esm/setup/polyfillLocalStorage.js +25 -0
  46. package/dist/esm/setup/polyfillLocalStorage.js.map +1 -0
  47. package/dist/esm/setup/svgMock.d.ts +1 -0
  48. package/dist/esm/setup/testSetup.d.ts +0 -0
  49. package/dist/esm/setup/testSetup.js +58 -0
  50. package/dist/esm/setup/testSetup.js.map +1 -0
  51. package/dist/esm/tools/AppDetailTools.d.ts +63 -0
  52. package/dist/esm/tools/AppDetailTools.js +180 -0
  53. package/dist/esm/tools/AppDetailTools.js.map +1 -0
  54. package/dist/esm/tools/BrowserState.d.ts +25 -0
  55. package/dist/esm/tools/BrowserState.js +30 -0
  56. package/dist/esm/tools/BrowserState.js.map +1 -0
  57. package/dist/esm/tools/CatalogTools.d.ts +67 -0
  58. package/dist/esm/tools/CatalogTools.js +202 -0
  59. package/dist/esm/tools/CatalogTools.js.map +1 -0
  60. package/dist/esm/tools/ErrorTools.d.ts +15 -0
  61. package/dist/esm/tools/ErrorTools.js +34 -0
  62. package/dist/esm/tools/ErrorTools.js.map +1 -0
  63. package/dist/esm/tools/GalleryTools.d.ts +6 -0
  64. package/dist/esm/tools/GalleryTools.js +22 -0
  65. package/dist/esm/tools/GalleryTools.js.map +1 -0
  66. package/dist/esm/tools/suppressConsole.d.ts +19 -0
  67. package/dist/esm/tools/suppressConsole.js +44 -0
  68. package/dist/esm/tools/suppressConsole.js.map +1 -0
  69. package/package.json +87 -0
  70. package/src/harness/MockBackendVerifier.ts +14 -0
  71. package/src/harness/given.tsx +212 -0
  72. package/src/index.ts +44 -0
  73. package/src/mock-backend/BrowserStateCfg.ts +35 -0
  74. package/src/mock-backend/MockBackendConfigurer.ts +97 -0
  75. package/src/mock-backend/MockDb.ts +66 -0
  76. package/src/mock-backend/MockService.ts +18 -0
  77. package/src/mock-backend/MockUserContext.ts +42 -0
  78. package/src/mock-backend/magazines.ts +245 -0
  79. package/src/mock-network/NetworkCatalog.ts +30 -0
  80. package/src/mock-network/NetworkConfigurerCfg.ts +24 -0
  81. package/src/mock-network/SharedNetwork.ts +100 -0
  82. package/src/mock-network/errorFactories.ts +28 -0
  83. package/src/mock-network/makeNetworkReplyWithCatalog.ts +19 -0
  84. package/src/setup/polyfillLocalStorage.ts +34 -0
  85. package/src/setup/svgMock.tsx +3 -0
  86. package/src/setup/testSetup.ts +58 -0
  87. package/src/tools/AppDetailTools.ts +240 -0
  88. package/src/tools/BrowserState.ts +41 -0
  89. package/src/tools/CatalogTools.ts +254 -0
  90. package/src/tools/ErrorTools.ts +49 -0
  91. package/src/tools/GalleryTools.ts +26 -0
  92. package/src/tools/suppressConsole.ts +66 -0
@@ -0,0 +1,26 @@
1
+ import { screen } from '@testing-library/react'
2
+ import userEvent from '@testing-library/user-event'
3
+
4
+ export class GalleryTools {
5
+ private user = userEvent.setup()
6
+
7
+ async clickNext(): Promise<void> {
8
+ const nextBtn = screen.getByRole('button', { name: /next/i })
9
+ await this.user.click(nextBtn)
10
+ }
11
+
12
+ async clickPrev(): Promise<void> {
13
+ const prevBtn = screen.getByRole('button', { name: /prev/i })
14
+ await this.user.click(prevBtn)
15
+ }
16
+
17
+ isOpen(): boolean {
18
+ // Detect the SCREENSHOT gallery specifically — not just any [role="dialog"]
19
+ // (the app detail card is also a dialog now, #38). The gallery is the only
20
+ // dialog with next/prev navigation controls.
21
+ return !!(
22
+ screen.queryByRole('button', { name: /next/i }) &&
23
+ screen.queryByRole('button', { name: /prev/i })
24
+ )
25
+ }
26
+ }
@@ -0,0 +1,66 @@
1
+ import { afterEach } from 'vitest'
2
+
3
+ const globalPatterns: RegExp[] = []
4
+ let testPatterns: RegExp[] = []
5
+
6
+ const originals = {
7
+ log: console.log.bind(console),
8
+ warn: console.warn.bind(console),
9
+ error: console.error.bind(console),
10
+ debug: console.debug.bind(console),
11
+ }
12
+
13
+ function isSuppressed(args: unknown[]): boolean {
14
+ const all = [...globalPatterns, ...testPatterns]
15
+ if (all.length === 0) return false
16
+ const text = args.map(String).join(' ')
17
+ return all.some((p) => p.test(text))
18
+ }
19
+
20
+ let installed = false
21
+
22
+ function installOnce() {
23
+ if (installed) return
24
+ installed = true
25
+
26
+ for (const method of ['log', 'warn', 'error', 'debug'] as const) {
27
+ const original = originals[method]
28
+ console[method] = (...args: unknown[]) => {
29
+ if (!isSuppressed(args)) original(...args)
30
+ }
31
+ }
32
+
33
+ // Auto-clear test-scoped patterns after each test (global patterns persist)
34
+ afterEach(() => {
35
+ testPatterns = []
36
+ })
37
+ }
38
+
39
+ /**
40
+ * Suppress console output matching the given patterns for the current test only.
41
+ * Automatically resumes after the test completes (pass or fail).
42
+ *
43
+ * Usage:
44
+ * suppressConsole(/Failed to fetch/)
45
+ * suppressConsole([/Failed to fetch/, /error boundary/])
46
+ */
47
+ export function suppressConsole(patterns: RegExp | RegExp[]): void {
48
+ installOnce()
49
+ const arr = Array.isArray(patterns) ? patterns : [patterns]
50
+ testPatterns.push(...arr)
51
+ }
52
+
53
+ /**
54
+ * Suppress console output matching the given patterns for ALL tests in this file.
55
+ * Call at the top level of `describe()` or at module scope.
56
+ * Does NOT auto-clear between tests.
57
+ *
58
+ * Usage:
59
+ * suppressConsoleGlobal(/Background sync failed/)
60
+ * suppressConsoleGlobal([/Background sync/, /some other noise/])
61
+ */
62
+ export function suppressConsoleGlobal(patterns: RegExp | RegExp[]): void {
63
+ installOnce()
64
+ const arr = Array.isArray(patterns) ? patterns : [patterns]
65
+ globalPatterns.push(...arr)
66
+ }