@friggframework/devtools 2.0.0-next.45 → 2.0.0-next.47

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 (212) hide show
  1. package/infrastructure/ARCHITECTURE.md +487 -0
  2. package/infrastructure/HEALTH.md +468 -0
  3. package/infrastructure/README.md +51 -0
  4. package/infrastructure/__tests__/postgres-config.test.js +914 -0
  5. package/infrastructure/__tests__/template-generation.test.js +687 -0
  6. package/infrastructure/create-frigg-infrastructure.js +1 -1
  7. package/infrastructure/docs/POSTGRES-CONFIGURATION.md +630 -0
  8. package/infrastructure/{DEPLOYMENT-INSTRUCTIONS.md → docs/deployment-instructions.md} +3 -3
  9. package/infrastructure/{IAM-POLICY-TEMPLATES.md → docs/iam-policy-templates.md} +9 -10
  10. package/infrastructure/domains/database/aurora-builder.js +809 -0
  11. package/infrastructure/domains/database/aurora-builder.test.js +950 -0
  12. package/infrastructure/domains/database/aurora-discovery.js +87 -0
  13. package/infrastructure/domains/database/aurora-discovery.test.js +188 -0
  14. package/infrastructure/domains/database/aurora-resolver.js +210 -0
  15. package/infrastructure/domains/database/aurora-resolver.test.js +347 -0
  16. package/infrastructure/domains/database/migration-builder.js +695 -0
  17. package/infrastructure/domains/database/migration-builder.test.js +294 -0
  18. package/infrastructure/domains/database/migration-resolver.js +163 -0
  19. package/infrastructure/domains/database/migration-resolver.test.js +337 -0
  20. package/infrastructure/domains/health/application/ports/IPropertyReconciler.js +164 -0
  21. package/infrastructure/domains/health/application/ports/IResourceDetector.js +129 -0
  22. package/infrastructure/domains/health/application/ports/IResourceImporter.js +142 -0
  23. package/infrastructure/domains/health/application/ports/IStackRepository.js +131 -0
  24. package/infrastructure/domains/health/application/ports/index.js +26 -0
  25. package/infrastructure/domains/health/application/use-cases/__tests__/execute-resource-import-use-case.test.js +679 -0
  26. package/infrastructure/domains/health/application/use-cases/__tests__/mismatch-analyzer-method-name.test.js +167 -0
  27. package/infrastructure/domains/health/application/use-cases/__tests__/repair-via-import-use-case.test.js +1130 -0
  28. package/infrastructure/domains/health/application/use-cases/execute-resource-import-use-case.js +221 -0
  29. package/infrastructure/domains/health/application/use-cases/reconcile-properties-use-case.js +152 -0
  30. package/infrastructure/domains/health/application/use-cases/reconcile-properties-use-case.test.js +343 -0
  31. package/infrastructure/domains/health/application/use-cases/repair-via-import-use-case.js +535 -0
  32. package/infrastructure/domains/health/application/use-cases/repair-via-import-use-case.test.js +376 -0
  33. package/infrastructure/domains/health/application/use-cases/run-health-check-use-case.js +213 -0
  34. package/infrastructure/domains/health/application/use-cases/run-health-check-use-case.test.js +441 -0
  35. package/infrastructure/domains/health/docs/ACME-DEV-DRIFT-ANALYSIS.md +267 -0
  36. package/infrastructure/domains/health/docs/BUILD-VS-DEPLOYED-TEMPLATE-ANALYSIS.md +324 -0
  37. package/infrastructure/domains/health/docs/ORPHAN-DETECTION-ANALYSIS.md +386 -0
  38. package/infrastructure/domains/health/docs/SPEC-CLEANUP-COMMAND.md +1419 -0
  39. package/infrastructure/domains/health/docs/TDD-IMPLEMENTATION-SUMMARY.md +391 -0
  40. package/infrastructure/domains/health/docs/TEMPLATE-COMPARISON-IMPLEMENTATION.md +551 -0
  41. package/infrastructure/domains/health/domain/entities/issue.js +299 -0
  42. package/infrastructure/domains/health/domain/entities/issue.test.js +528 -0
  43. package/infrastructure/domains/health/domain/entities/property-mismatch.js +108 -0
  44. package/infrastructure/domains/health/domain/entities/property-mismatch.test.js +275 -0
  45. package/infrastructure/domains/health/domain/entities/resource.js +159 -0
  46. package/infrastructure/domains/health/domain/entities/resource.test.js +432 -0
  47. package/infrastructure/domains/health/domain/entities/stack-health-report.js +306 -0
  48. package/infrastructure/domains/health/domain/entities/stack-health-report.test.js +601 -0
  49. package/infrastructure/domains/health/domain/services/__tests__/health-score-percentage-based.test.js +380 -0
  50. package/infrastructure/domains/health/domain/services/__tests__/import-progress-monitor.test.js +971 -0
  51. package/infrastructure/domains/health/domain/services/__tests__/import-template-generator.test.js +1150 -0
  52. package/infrastructure/domains/health/domain/services/__tests__/logical-id-mapper.test.js +672 -0
  53. package/infrastructure/domains/health/domain/services/__tests__/template-parser.test.js +496 -0
  54. package/infrastructure/domains/health/domain/services/__tests__/update-progress-monitor.test.js +419 -0
  55. package/infrastructure/domains/health/domain/services/health-score-calculator.js +248 -0
  56. package/infrastructure/domains/health/domain/services/health-score-calculator.test.js +504 -0
  57. package/infrastructure/domains/health/domain/services/import-progress-monitor.js +195 -0
  58. package/infrastructure/domains/health/domain/services/import-template-generator.js +435 -0
  59. package/infrastructure/domains/health/domain/services/logical-id-mapper.js +345 -0
  60. package/infrastructure/domains/health/domain/services/mismatch-analyzer.js +234 -0
  61. package/infrastructure/domains/health/domain/services/mismatch-analyzer.test.js +431 -0
  62. package/infrastructure/domains/health/domain/services/property-mutability-config.js +382 -0
  63. package/infrastructure/domains/health/domain/services/template-parser.js +245 -0
  64. package/infrastructure/domains/health/domain/services/update-progress-monitor.js +192 -0
  65. package/infrastructure/domains/health/domain/value-objects/health-score.js +138 -0
  66. package/infrastructure/domains/health/domain/value-objects/health-score.test.js +267 -0
  67. package/infrastructure/domains/health/domain/value-objects/property-mutability.js +161 -0
  68. package/infrastructure/domains/health/domain/value-objects/property-mutability.test.js +198 -0
  69. package/infrastructure/domains/health/domain/value-objects/resource-state.js +167 -0
  70. package/infrastructure/domains/health/domain/value-objects/resource-state.test.js +196 -0
  71. package/infrastructure/domains/health/domain/value-objects/stack-identifier.js +192 -0
  72. package/infrastructure/domains/health/domain/value-objects/stack-identifier.test.js +262 -0
  73. package/infrastructure/domains/health/infrastructure/adapters/__tests__/orphan-detection-cfn-tagged.test.js +312 -0
  74. package/infrastructure/domains/health/infrastructure/adapters/__tests__/orphan-detection-multi-stack.test.js +367 -0
  75. package/infrastructure/domains/health/infrastructure/adapters/__tests__/orphan-detection-relationship-analysis.test.js +432 -0
  76. package/infrastructure/domains/health/infrastructure/adapters/aws-property-reconciler.js +784 -0
  77. package/infrastructure/domains/health/infrastructure/adapters/aws-property-reconciler.test.js +1133 -0
  78. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-detector.js +565 -0
  79. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-detector.test.js +554 -0
  80. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-importer.js +318 -0
  81. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-importer.test.js +398 -0
  82. package/infrastructure/domains/health/infrastructure/adapters/aws-stack-repository.js +777 -0
  83. package/infrastructure/domains/health/infrastructure/adapters/aws-stack-repository.test.js +580 -0
  84. package/infrastructure/domains/integration/integration-builder.js +397 -0
  85. package/infrastructure/domains/integration/integration-builder.test.js +593 -0
  86. package/infrastructure/domains/integration/integration-resolver.js +170 -0
  87. package/infrastructure/domains/integration/integration-resolver.test.js +369 -0
  88. package/infrastructure/domains/integration/websocket-builder.js +69 -0
  89. package/infrastructure/domains/integration/websocket-builder.test.js +195 -0
  90. package/infrastructure/domains/networking/vpc-builder.js +1829 -0
  91. package/infrastructure/domains/networking/vpc-builder.test.js +1262 -0
  92. package/infrastructure/domains/networking/vpc-discovery.js +177 -0
  93. package/infrastructure/domains/networking/vpc-discovery.test.js +350 -0
  94. package/infrastructure/domains/networking/vpc-resolver.js +324 -0
  95. package/infrastructure/domains/networking/vpc-resolver.test.js +501 -0
  96. package/infrastructure/domains/parameters/ssm-builder.js +79 -0
  97. package/infrastructure/domains/parameters/ssm-builder.test.js +189 -0
  98. package/infrastructure/domains/parameters/ssm-discovery.js +84 -0
  99. package/infrastructure/domains/parameters/ssm-discovery.test.js +210 -0
  100. package/infrastructure/{iam-generator.js → domains/security/iam-generator.js} +2 -2
  101. package/infrastructure/domains/security/kms-builder.js +366 -0
  102. package/infrastructure/domains/security/kms-builder.test.js +374 -0
  103. package/infrastructure/domains/security/kms-discovery.js +80 -0
  104. package/infrastructure/domains/security/kms-discovery.test.js +177 -0
  105. package/infrastructure/domains/security/kms-resolver.js +96 -0
  106. package/infrastructure/domains/security/kms-resolver.test.js +216 -0
  107. package/infrastructure/domains/shared/base-builder.js +112 -0
  108. package/infrastructure/domains/shared/base-resolver.js +186 -0
  109. package/infrastructure/domains/shared/base-resolver.test.js +305 -0
  110. package/infrastructure/domains/shared/builder-orchestrator.js +212 -0
  111. package/infrastructure/domains/shared/builder-orchestrator.test.js +213 -0
  112. package/infrastructure/domains/shared/cloudformation-discovery-v2.js +334 -0
  113. package/infrastructure/domains/shared/cloudformation-discovery.js +375 -0
  114. package/infrastructure/domains/shared/cloudformation-discovery.test.js +590 -0
  115. package/infrastructure/domains/shared/environment-builder.js +119 -0
  116. package/infrastructure/domains/shared/environment-builder.test.js +247 -0
  117. package/infrastructure/domains/shared/providers/aws-provider-adapter.js +544 -0
  118. package/infrastructure/domains/shared/providers/aws-provider-adapter.test.js +377 -0
  119. package/infrastructure/domains/shared/providers/azure-provider-adapter.stub.js +93 -0
  120. package/infrastructure/domains/shared/providers/cloud-provider-adapter.js +136 -0
  121. package/infrastructure/domains/shared/providers/gcp-provider-adapter.stub.js +82 -0
  122. package/infrastructure/domains/shared/providers/provider-factory.js +108 -0
  123. package/infrastructure/domains/shared/providers/provider-factory.test.js +170 -0
  124. package/infrastructure/domains/shared/resource-discovery.js +192 -0
  125. package/infrastructure/domains/shared/resource-discovery.test.js +552 -0
  126. package/infrastructure/domains/shared/types/app-definition.js +205 -0
  127. package/infrastructure/domains/shared/types/discovery-result.js +106 -0
  128. package/infrastructure/domains/shared/types/discovery-result.test.js +258 -0
  129. package/infrastructure/domains/shared/types/index.js +46 -0
  130. package/infrastructure/domains/shared/types/resource-ownership.js +108 -0
  131. package/infrastructure/domains/shared/types/resource-ownership.test.js +101 -0
  132. package/infrastructure/domains/shared/utilities/base-definition-factory.js +380 -0
  133. package/infrastructure/domains/shared/utilities/base-definition-factory.js.bak +338 -0
  134. package/infrastructure/domains/shared/utilities/base-definition-factory.test.js +248 -0
  135. package/infrastructure/domains/shared/utilities/handler-path-resolver.js +134 -0
  136. package/infrastructure/domains/shared/utilities/handler-path-resolver.test.js +268 -0
  137. package/infrastructure/domains/shared/utilities/prisma-layer-manager.js +55 -0
  138. package/infrastructure/domains/shared/utilities/prisma-layer-manager.test.js +138 -0
  139. package/infrastructure/{env-validator.js → domains/shared/validation/env-validator.js} +2 -1
  140. package/infrastructure/domains/shared/validation/env-validator.test.js +173 -0
  141. package/infrastructure/esbuild.config.js +53 -0
  142. package/infrastructure/infrastructure-composer.js +87 -0
  143. package/infrastructure/{serverless-template.test.js → infrastructure-composer.test.js} +115 -24
  144. package/infrastructure/scripts/build-prisma-layer.js +553 -0
  145. package/infrastructure/scripts/build-prisma-layer.test.js +102 -0
  146. package/infrastructure/{build-time-discovery.js → scripts/build-time-discovery.js} +80 -48
  147. package/infrastructure/{build-time-discovery.test.js → scripts/build-time-discovery.test.js} +5 -4
  148. package/layers/prisma/nodejs/package.json +8 -0
  149. package/management-ui/server/utils/cliIntegration.js +1 -1
  150. package/management-ui/server/utils/environment/awsParameterStore.js +29 -18
  151. package/package.json +11 -11
  152. package/frigg-cli/.eslintrc.js +0 -141
  153. package/frigg-cli/__tests__/unit/commands/build.test.js +0 -251
  154. package/frigg-cli/__tests__/unit/commands/db-setup.test.js +0 -548
  155. package/frigg-cli/__tests__/unit/commands/install.test.js +0 -400
  156. package/frigg-cli/__tests__/unit/commands/ui.test.js +0 -346
  157. package/frigg-cli/__tests__/unit/utils/database-validator.test.js +0 -366
  158. package/frigg-cli/__tests__/unit/utils/error-messages.test.js +0 -304
  159. package/frigg-cli/__tests__/unit/utils/prisma-runner.test.js +0 -486
  160. package/frigg-cli/__tests__/utils/mock-factory.js +0 -270
  161. package/frigg-cli/__tests__/utils/prisma-mock.js +0 -194
  162. package/frigg-cli/__tests__/utils/test-fixtures.js +0 -463
  163. package/frigg-cli/__tests__/utils/test-setup.js +0 -287
  164. package/frigg-cli/build-command/index.js +0 -65
  165. package/frigg-cli/db-setup-command/index.js +0 -193
  166. package/frigg-cli/deploy-command/index.js +0 -175
  167. package/frigg-cli/generate-command/__tests__/generate-command.test.js +0 -301
  168. package/frigg-cli/generate-command/azure-generator.js +0 -43
  169. package/frigg-cli/generate-command/gcp-generator.js +0 -47
  170. package/frigg-cli/generate-command/index.js +0 -332
  171. package/frigg-cli/generate-command/terraform-generator.js +0 -555
  172. package/frigg-cli/generate-iam-command.js +0 -118
  173. package/frigg-cli/index.js +0 -75
  174. package/frigg-cli/index.test.js +0 -158
  175. package/frigg-cli/init-command/backend-first-handler.js +0 -756
  176. package/frigg-cli/init-command/index.js +0 -93
  177. package/frigg-cli/init-command/template-handler.js +0 -143
  178. package/frigg-cli/install-command/backend-js.js +0 -33
  179. package/frigg-cli/install-command/commit-changes.js +0 -16
  180. package/frigg-cli/install-command/environment-variables.js +0 -127
  181. package/frigg-cli/install-command/environment-variables.test.js +0 -136
  182. package/frigg-cli/install-command/index.js +0 -54
  183. package/frigg-cli/install-command/install-package.js +0 -13
  184. package/frigg-cli/install-command/integration-file.js +0 -30
  185. package/frigg-cli/install-command/logger.js +0 -12
  186. package/frigg-cli/install-command/template.js +0 -90
  187. package/frigg-cli/install-command/validate-package.js +0 -75
  188. package/frigg-cli/jest.config.js +0 -124
  189. package/frigg-cli/package.json +0 -54
  190. package/frigg-cli/start-command/index.js +0 -149
  191. package/frigg-cli/start-command/start-command.test.js +0 -297
  192. package/frigg-cli/test/init-command.test.js +0 -180
  193. package/frigg-cli/test/npm-registry.test.js +0 -319
  194. package/frigg-cli/ui-command/index.js +0 -154
  195. package/frigg-cli/utils/app-resolver.js +0 -319
  196. package/frigg-cli/utils/backend-path.js +0 -25
  197. package/frigg-cli/utils/database-validator.js +0 -161
  198. package/frigg-cli/utils/error-messages.js +0 -257
  199. package/frigg-cli/utils/npm-registry.js +0 -167
  200. package/frigg-cli/utils/prisma-runner.js +0 -280
  201. package/frigg-cli/utils/process-manager.js +0 -199
  202. package/frigg-cli/utils/repo-detection.js +0 -405
  203. package/infrastructure/aws-discovery.js +0 -1176
  204. package/infrastructure/aws-discovery.test.js +0 -1220
  205. package/infrastructure/serverless-template.js +0 -2094
  206. /package/infrastructure/{WEBSOCKET-CONFIGURATION.md → docs/WEBSOCKET-CONFIGURATION.md} +0 -0
  207. /package/infrastructure/{GENERATE-IAM-DOCS.md → docs/generate-iam-command.md} +0 -0
  208. /package/infrastructure/{iam-generator.test.js → domains/security/iam-generator.test.js} +0 -0
  209. /package/infrastructure/{frigg-deployment-iam-stack.yaml → domains/security/templates/frigg-deployment-iam-stack.yaml} +0 -0
  210. /package/infrastructure/{iam-policy-basic.json → domains/security/templates/iam-policy-basic.json} +0 -0
  211. /package/infrastructure/{iam-policy-full.json → domains/security/templates/iam-policy-full.json} +0 -0
  212. /package/infrastructure/{run-discovery.js → scripts/run-discovery.js} +0 -0
@@ -1,270 +0,0 @@
1
- /**
2
- * MockFactory - Factory for creating standardized mocks
3
- * Provides consistent mock implementations across all CLI tests
4
- */
5
- class MockFactory {
6
- /**
7
- * Create a file system mock
8
- * @returns {object} - Mock fs implementation
9
- */
10
- static createFileSystem() {
11
- return {
12
- existsSync: jest.fn().mockReturnValue(true),
13
- readFileSync: jest.fn().mockReturnValue('{}'),
14
- writeFileSync: jest.fn(),
15
- mkdirSync: jest.fn(),
16
- readdirSync: jest.fn().mockReturnValue([]),
17
- statSync: jest.fn().mockReturnValue({
18
- isDirectory: () => false,
19
- isFile: () => true
20
- }),
21
- copyFileSync: jest.fn(),
22
- unlinkSync: jest.fn(),
23
- rmdirSync: jest.fn(),
24
- constants: {
25
- F_OK: 0,
26
- R_OK: 4,
27
- W_OK: 2,
28
- X_OK: 1
29
- }
30
- };
31
- }
32
-
33
- /**
34
- * Create a logger mock
35
- * @returns {object} - Mock logger implementation
36
- */
37
- static createLogger() {
38
- return {
39
- info: jest.fn(),
40
- error: jest.fn(),
41
- debug: jest.fn(),
42
- warn: jest.fn(),
43
- logInfo: jest.fn(),
44
- logError: jest.fn(),
45
- logDebug: jest.fn(),
46
- logWarn: jest.fn()
47
- };
48
- }
49
-
50
- /**
51
- * Create a package manager mock
52
- * @returns {object} - Mock package manager implementation
53
- */
54
- static createPackageManager() {
55
- return {
56
- install: jest.fn().mockResolvedValue({ success: true }),
57
- list: jest.fn().mockResolvedValue([]),
58
- exists: jest.fn().mockResolvedValue(true),
59
- getInfo: jest.fn().mockResolvedValue({
60
- name: 'test-package',
61
- version: '1.0.0'
62
- }),
63
- search: jest.fn().mockResolvedValue([])
64
- };
65
- }
66
-
67
- /**
68
- * Create a child process mock
69
- * @returns {object} - Mock child_process implementation
70
- */
71
- static createChildProcess() {
72
- return {
73
- execSync: jest.fn().mockReturnValue(''),
74
- exec: jest.fn(),
75
- spawn: jest.fn().mockReturnValue({
76
- stdout: { on: jest.fn() },
77
- stderr: { on: jest.fn() },
78
- on: jest.fn((event, callback) => {
79
- if (event === 'close') {
80
- callback(0);
81
- }
82
- })
83
- }),
84
- fork: jest.fn()
85
- };
86
- }
87
-
88
- /**
89
- * Create a git mock
90
- * @returns {object} - Mock git implementation
91
- */
92
- static createGit() {
93
- return {
94
- init: jest.fn(),
95
- add: jest.fn(),
96
- commit: jest.fn(),
97
- status: jest.fn().mockReturnValue({
98
- clean: true,
99
- files: []
100
- }),
101
- branch: jest.fn().mockReturnValue('main'),
102
- remote: jest.fn().mockReturnValue('origin'),
103
- isRepo: jest.fn().mockReturnValue(true)
104
- };
105
- }
106
-
107
- /**
108
- * Create a config loader mock
109
- * @returns {object} - Mock config loader implementation
110
- */
111
- static createConfigLoader() {
112
- return {
113
- load: jest.fn().mockReturnValue({
114
- stage: 'dev',
115
- region: 'us-east-1',
116
- profile: 'default'
117
- }),
118
- validate: jest.fn().mockReturnValue(true),
119
- save: jest.fn(),
120
- merge: jest.fn()
121
- };
122
- }
123
-
124
- /**
125
- * Create an app resolver mock
126
- * @returns {object} - Mock app resolver implementation
127
- */
128
- static createAppResolver() {
129
- return {
130
- resolveAppPath: jest.fn().mockReturnValue('/mock/app/path'),
131
- findNearestBackendPackageJson: jest.fn().mockReturnValue('/mock/backend/package.json'),
132
- validateBackendPath: jest.fn().mockReturnValue(true),
133
- getProjectRoot: jest.fn().mockReturnValue('/mock/project'),
134
- findConfigFile: jest.fn().mockReturnValue('/mock/config.json')
135
- };
136
- }
137
-
138
- /**
139
- * Create a network mock
140
- * @returns {object} - Mock network implementation
141
- */
142
- static createNetwork() {
143
- return {
144
- get: jest.fn().mockResolvedValue({
145
- status: 200,
146
- data: {}
147
- }),
148
- post: jest.fn().mockResolvedValue({
149
- status: 200,
150
- data: {}
151
- }),
152
- put: jest.fn().mockResolvedValue({
153
- status: 200,
154
- data: {}
155
- }),
156
- delete: jest.fn().mockResolvedValue({
157
- status: 200,
158
- data: {}
159
- })
160
- };
161
- }
162
-
163
- /**
164
- * Create a comprehensive mock environment
165
- * @returns {object} - Complete mock environment
166
- */
167
- static createMockEnvironment() {
168
- return {
169
- fs: this.createFileSystem(),
170
- logger: this.createLogger(),
171
- packageManager: this.createPackageManager(),
172
- childProcess: this.createChildProcess(),
173
- git: this.createGit(),
174
- config: this.createConfigLoader(),
175
- appResolver: this.createAppResolver(),
176
- network: this.createNetwork()
177
- };
178
- }
179
-
180
- /**
181
- * Create a mock for process.env
182
- * @param {object} customEnv - Custom environment variables
183
- * @returns {object} - Mock environment
184
- */
185
- static createProcessEnv(customEnv = {}) {
186
- return {
187
- NODE_ENV: 'test',
188
- HOME: '/mock/home',
189
- PATH: '/mock/path',
190
- ...customEnv
191
- };
192
- }
193
-
194
- /**
195
- * Create success response mock
196
- * @param {any} data - Response data
197
- * @returns {object} - Success response
198
- */
199
- static createSuccessResponse(data = {}) {
200
- return {
201
- success: true,
202
- data,
203
- message: 'Operation completed successfully'
204
- };
205
- }
206
-
207
- /**
208
- * Create error response mock
209
- * @param {string} message - Error message
210
- * @param {string} code - Error code
211
- * @returns {object} - Error response
212
- */
213
- static createErrorResponse(message = 'An error occurred', code = 'GENERIC_ERROR') {
214
- return {
215
- success: false,
216
- error: {
217
- message,
218
- code,
219
- stack: 'Mock stack trace'
220
- }
221
- };
222
- }
223
-
224
- /**
225
- * Create package.json mock
226
- * @param {object} overrides - Custom package.json properties
227
- * @returns {object} - Mock package.json
228
- */
229
- static createPackageJson(overrides = {}) {
230
- return {
231
- name: 'test-package',
232
- version: '1.0.0',
233
- description: 'Test package',
234
- main: 'index.js',
235
- scripts: {
236
- test: 'jest',
237
- start: 'node index.js'
238
- },
239
- dependencies: {},
240
- devDependencies: {},
241
- ...overrides
242
- };
243
- }
244
-
245
- /**
246
- * Create frigg config mock
247
- * @param {object} overrides - Custom config properties
248
- * @returns {object} - Mock frigg config
249
- */
250
- static createFriggConfig(overrides = {}) {
251
- return {
252
- stage: 'dev',
253
- region: 'us-east-1',
254
- profile: 'default',
255
- backend: {
256
- runtime: 'nodejs18.x',
257
- timeout: 30,
258
- memory: 128
259
- },
260
- frontend: {
261
- framework: 'react',
262
- buildCommand: 'npm run build',
263
- outputDir: 'dist'
264
- },
265
- ...overrides
266
- };
267
- }
268
- }
269
-
270
- module.exports = { MockFactory };
@@ -1,194 +0,0 @@
1
- /**
2
- * Prisma Mock Utilities
3
- * Standardized mocking for Prisma Client in CLI tests
4
- * Following official Prisma testing patterns with jest-mock-extended
5
- */
6
-
7
- /**
8
- * Creates a mock Prisma client with common operations
9
- * @returns {object} Mock Prisma client
10
- */
11
- function createMockPrismaClient() {
12
- return {
13
- $connect: jest.fn().mockResolvedValue(undefined),
14
- $disconnect: jest.fn().mockResolvedValue(undefined),
15
- $queryRaw: jest.fn().mockResolvedValue([{ result: 1 }]),
16
- $executeRaw: jest.fn().mockResolvedValue(1),
17
- $runCommandRaw: jest.fn().mockResolvedValue({ ok: 1 }), // MongoDB command support
18
- $transaction: jest.fn().mockImplementation(async (fn) => fn(createMockPrismaClient())),
19
- // Common model operations
20
- user: {
21
- findMany: jest.fn().mockResolvedValue([]),
22
- findUnique: jest.fn().mockResolvedValue(null),
23
- create: jest.fn().mockResolvedValue({}),
24
- update: jest.fn().mockResolvedValue({}),
25
- delete: jest.fn().mockResolvedValue({}),
26
- },
27
- credential: {
28
- findMany: jest.fn().mockResolvedValue([]),
29
- findUnique: jest.fn().mockResolvedValue(null),
30
- create: jest.fn().mockResolvedValue({}),
31
- update: jest.fn().mockResolvedValue({}),
32
- delete: jest.fn().mockResolvedValue({}),
33
- },
34
- };
35
- }
36
-
37
- /**
38
- * Creates a mock for successful Prisma connection
39
- * @param {object} mockClient - Optional pre-configured mock client
40
- * @returns {jest.Mock} Mock connectPrisma function
41
- */
42
- function createMockConnectPrisma(mockClient = null) {
43
- const client = mockClient || createMockPrismaClient();
44
- return jest.fn().mockResolvedValue(client);
45
- }
46
-
47
- /**
48
- * Creates a mock for successful Prisma disconnection
49
- * @returns {jest.Mock} Mock disconnectPrisma function
50
- */
51
- function createMockDisconnectPrisma() {
52
- return jest.fn().mockResolvedValue(undefined);
53
- }
54
-
55
- /**
56
- * Creates a mock for Prisma connection that fails
57
- * @param {string} errorMessage - Error message to throw
58
- * @returns {jest.Mock} Mock connectPrisma that throws error
59
- */
60
- function createMockConnectPrismaWithError(errorMessage = 'Connection failed') {
61
- return jest.fn().mockRejectedValue(new Error(errorMessage));
62
- }
63
-
64
- /**
65
- * Creates a mock for Prisma query that times out
66
- * @param {number} timeout - Timeout in milliseconds
67
- * @returns {jest.Mock} Mock that times out
68
- */
69
- function createMockPrismaTimeout(timeout = 5000) {
70
- return jest.fn().mockImplementation(() =>
71
- new Promise((_, reject) =>
72
- setTimeout(() => reject(new Error('Connection timeout')), timeout)
73
- )
74
- );
75
- }
76
-
77
- /**
78
- * Common Prisma error types for testing
79
- */
80
- const PrismaErrors = {
81
- /**
82
- * Connection error (P1001)
83
- */
84
- CONNECTION_ERROR: {
85
- code: 'P1001',
86
- message: 'Can\'t reach database server',
87
- clientVersion: '5.0.0',
88
- },
89
-
90
- /**
91
- * Authentication error (P1002)
92
- */
93
- AUTH_ERROR: {
94
- code: 'P1002',
95
- message: 'The database server was reached but timed out',
96
- clientVersion: '5.0.0',
97
- },
98
-
99
- /**
100
- * Database not found error (P1003)
101
- */
102
- DATABASE_NOT_FOUND: {
103
- code: 'P1003',
104
- message: 'Database does not exist',
105
- clientVersion: '5.0.0',
106
- },
107
-
108
- /**
109
- * Connection timeout (P1008)
110
- */
111
- TIMEOUT_ERROR: {
112
- code: 'P1008',
113
- message: 'Operations timed out',
114
- clientVersion: '5.0.0',
115
- },
116
-
117
- /**
118
- * Invalid credentials
119
- */
120
- INVALID_CREDENTIALS: {
121
- code: 'P1000',
122
- message: 'Authentication failed against database server',
123
- clientVersion: '5.0.0',
124
- },
125
- };
126
-
127
- /**
128
- * Creates a Prisma error object
129
- * @param {string} errorType - Error type from PrismaErrors
130
- * @param {object} customFields - Additional custom fields
131
- * @returns {Error} Prisma-style error object
132
- */
133
- function createPrismaError(errorType = 'CONNECTION_ERROR', customFields = {}) {
134
- const baseError = PrismaErrors[errorType] || PrismaErrors.CONNECTION_ERROR;
135
- const error = new Error(baseError.message);
136
- error.code = baseError.code;
137
- error.clientVersion = baseError.clientVersion;
138
- Object.assign(error, customFields);
139
- return error;
140
- }
141
-
142
- /**
143
- * Creates a mock for database validator functions
144
- * @param {object} overrides - Override specific mock behaviors
145
- * @returns {object} Mock database validator
146
- */
147
- function createMockDatabaseValidator(overrides = {}) {
148
- return {
149
- validateDatabaseUrl: jest.fn().mockReturnValue({
150
- valid: true,
151
- url: 'mongodb://localhost:27017/test'
152
- }),
153
- getDatabaseType: jest.fn().mockReturnValue({
154
- dbType: 'mongodb'
155
- }),
156
- testDatabaseConnection: jest.fn().mockResolvedValue({
157
- connected: true
158
- }),
159
- checkPrismaClientGenerated: jest.fn().mockReturnValue({
160
- generated: true,
161
- path: '/mock/path'
162
- }),
163
- ...overrides,
164
- };
165
- }
166
-
167
- /**
168
- * Creates a mock for Prisma runner functions
169
- * @param {object} overrides - Override specific mock behaviors
170
- * @returns {object} Mock Prisma runner
171
- */
172
- function createMockPrismaRunner(overrides = {}) {
173
- return {
174
- getPrismaSchemaPath: jest.fn().mockReturnValue('/mock/schema.prisma'),
175
- runPrismaGenerate: jest.fn().mockResolvedValue({ success: true }),
176
- checkDatabaseState: jest.fn().mockResolvedValue({ upToDate: true }),
177
- runPrismaMigrate: jest.fn().mockResolvedValue({ success: true }),
178
- runPrismaDbPush: jest.fn().mockResolvedValue({ success: true }),
179
- getMigrationCommand: jest.fn().mockReturnValue('dev'),
180
- ...overrides,
181
- };
182
- }
183
-
184
- module.exports = {
185
- createMockPrismaClient,
186
- createMockConnectPrisma,
187
- createMockDisconnectPrisma,
188
- createMockConnectPrismaWithError,
189
- createMockPrismaTimeout,
190
- createPrismaError,
191
- PrismaErrors,
192
- createMockDatabaseValidator,
193
- createMockPrismaRunner,
194
- };