@friggframework/devtools 2.0.0--canary.395.495dc7d.0 → 2.0.0--canary.395.ada1d9d.0

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.
@@ -83,12 +83,16 @@ describe('DB Setup Command', () => {
83
83
  describe('Success Cases', () => {
84
84
  it('should complete setup successfully for MongoDB', async () => {
85
85
  mockValidator.getDatabaseType.mockReturnValue({ dbType: 'mongodb' });
86
+ mockValidator.checkPrismaClientGenerated.mockReturnValue({
87
+ generated: false // Client doesn't exist, will generate
88
+ });
86
89
  mockRunner.checkDatabaseState.mockResolvedValue({ upToDate: false });
87
90
 
88
91
  await dbSetupCommand({ verbose: false, stage: 'development' });
89
92
 
90
93
  expect(mockValidator.validateDatabaseUrl).toHaveBeenCalled();
91
94
  expect(mockValidator.getDatabaseType).toHaveBeenCalled();
95
+ expect(mockValidator.checkPrismaClientGenerated).toHaveBeenCalledWith('mongodb');
92
96
  expect(mockValidator.testDatabaseConnection).toHaveBeenCalled();
93
97
  expect(mockRunner.runPrismaGenerate).toHaveBeenCalledWith('mongodb', false);
94
98
  expect(mockRunner.runPrismaDbPush).toHaveBeenCalled();
@@ -97,10 +101,14 @@ describe('DB Setup Command', () => {
97
101
 
98
102
  it('should complete setup successfully for PostgreSQL', async () => {
99
103
  mockValidator.getDatabaseType.mockReturnValue({ dbType: 'postgresql' });
104
+ mockValidator.checkPrismaClientGenerated.mockReturnValue({
105
+ generated: false // Client doesn't exist, will generate
106
+ });
100
107
  mockRunner.checkDatabaseState.mockResolvedValue({ upToDate: false });
101
108
 
102
109
  await dbSetupCommand({ verbose: false, stage: 'development' });
103
110
 
111
+ expect(mockValidator.checkPrismaClientGenerated).toHaveBeenCalledWith('postgresql');
104
112
  expect(mockRunner.runPrismaGenerate).toHaveBeenCalledWith('postgresql', false);
105
113
  expect(mockRunner.runPrismaMigrate).toHaveBeenCalled();
106
114
  expect(mockProcessExit).not.toHaveBeenCalled();
@@ -140,6 +148,10 @@ describe('DB Setup Command', () => {
140
148
  });
141
149
 
142
150
  it('should respect --verbose flag', async () => {
151
+ mockValidator.checkPrismaClientGenerated.mockReturnValue({
152
+ generated: false // Client doesn't exist, will generate
153
+ });
154
+
143
155
  await dbSetupCommand({ verbose: true, stage: 'development' });
144
156
 
145
157
  expect(mockRunner.runPrismaGenerate).toHaveBeenCalledWith('mongodb', true);
@@ -154,6 +166,89 @@ describe('DB Setup Command', () => {
154
166
  });
155
167
  });
156
168
 
169
+ describe('Conditional Client Generation', () => {
170
+ it('should skip generation when client already exists', async () => {
171
+ // Client exists
172
+ mockValidator.checkPrismaClientGenerated.mockReturnValue({
173
+ generated: true,
174
+ path: '/path/to/client'
175
+ });
176
+
177
+ await dbSetupCommand({ verbose: false, stage: 'development' });
178
+
179
+ // Should check if client exists
180
+ expect(mockValidator.checkPrismaClientGenerated).toHaveBeenCalledWith('mongodb');
181
+ // Should NOT call generate
182
+ expect(mockRunner.runPrismaGenerate).not.toHaveBeenCalled();
183
+ // Should still test connection and complete setup
184
+ expect(mockValidator.testDatabaseConnection).toHaveBeenCalled();
185
+ expect(mockProcessExit).not.toHaveBeenCalled();
186
+ });
187
+
188
+ it('should generate client when it does not exist', async () => {
189
+ // Client does NOT exist
190
+ mockValidator.checkPrismaClientGenerated.mockReturnValue({
191
+ generated: false,
192
+ error: 'Client not found'
193
+ });
194
+
195
+ await dbSetupCommand({ verbose: false, stage: 'development' });
196
+
197
+ // Should check if client exists
198
+ expect(mockValidator.checkPrismaClientGenerated).toHaveBeenCalledWith('mongodb');
199
+ // Should call generate
200
+ expect(mockRunner.runPrismaGenerate).toHaveBeenCalledWith('mongodb', false);
201
+ // Should complete setup
202
+ expect(mockProcessExit).not.toHaveBeenCalled();
203
+ });
204
+
205
+ it('should regenerate client when --force flag is provided', async () => {
206
+ // Client exists
207
+ mockValidator.checkPrismaClientGenerated.mockReturnValue({
208
+ generated: true,
209
+ path: '/path/to/client'
210
+ });
211
+
212
+ await dbSetupCommand({ verbose: false, stage: 'development', force: true });
213
+
214
+ // Should check if client exists
215
+ expect(mockValidator.checkPrismaClientGenerated).toHaveBeenCalledWith('mongodb');
216
+ // Should STILL call generate because of --force
217
+ expect(mockRunner.runPrismaGenerate).toHaveBeenCalledWith('mongodb', false);
218
+ // Should complete setup
219
+ expect(mockProcessExit).not.toHaveBeenCalled();
220
+ });
221
+
222
+ it('should show client location in verbose mode when skipping generation', async () => {
223
+ mockValidator.checkPrismaClientGenerated.mockReturnValue({
224
+ generated: true,
225
+ path: '/path/to/prisma/client'
226
+ });
227
+
228
+ await dbSetupCommand({ verbose: true, stage: 'development' });
229
+
230
+ // Should log the client path
231
+ expect(mockConsoleLog).toHaveBeenCalledWith(
232
+ expect.stringContaining('/path/to/prisma/client')
233
+ );
234
+ expect(mockRunner.runPrismaGenerate).not.toHaveBeenCalled();
235
+ });
236
+
237
+ it('should generate for different database types', async () => {
238
+ // Test PostgreSQL
239
+ mockValidator.getDatabaseType.mockReturnValue({ dbType: 'postgresql' });
240
+ mockValidator.checkPrismaClientGenerated.mockReturnValue({
241
+ generated: false
242
+ });
243
+ mockRunner.checkDatabaseState.mockResolvedValue({ upToDate: false });
244
+
245
+ await dbSetupCommand({ verbose: false, stage: 'development' });
246
+
247
+ expect(mockValidator.checkPrismaClientGenerated).toHaveBeenCalledWith('postgresql');
248
+ expect(mockRunner.runPrismaGenerate).toHaveBeenCalledWith('postgresql', false);
249
+ });
250
+ });
251
+
157
252
  describe('Failure Cases - Validation', () => {
158
253
  it('should fail when DATABASE_URL missing', async () => {
159
254
  mockValidator.validateDatabaseUrl.mockReturnValue({
@@ -242,6 +337,9 @@ describe('DB Setup Command', () => {
242
337
 
243
338
  describe('Failure Cases - Prisma Operations', () => {
244
339
  it('should fail when prisma generate fails', async () => {
340
+ mockValidator.checkPrismaClientGenerated.mockReturnValue({
341
+ generated: false // Client doesn't exist, will attempt generation
342
+ });
245
343
  mockRunner.runPrismaGenerate.mockResolvedValue({
246
344
  success: false,
247
345
  error: 'Generation failed'
@@ -304,6 +402,9 @@ describe('DB Setup Command', () => {
304
402
  });
305
403
 
306
404
  it('should fail when schema file missing', async () => {
405
+ mockValidator.checkPrismaClientGenerated.mockReturnValue({
406
+ generated: false // Client doesn't exist, will attempt generation
407
+ });
307
408
  mockRunner.runPrismaGenerate.mockResolvedValue({
308
409
  success: false,
309
410
  error: 'Schema not found'
@@ -342,6 +443,9 @@ describe('DB Setup Command', () => {
342
443
  });
343
444
 
344
445
  it('should display helpful error for Prisma failures', async () => {
446
+ mockValidator.checkPrismaClientGenerated.mockReturnValue({
447
+ generated: false // Client doesn't exist, will attempt generation
448
+ });
345
449
  mockRunner.runPrismaGenerate.mockResolvedValue({
346
450
  success: false,
347
451
  error: 'Some error',
@@ -392,6 +496,10 @@ describe('DB Setup Command', () => {
392
496
  });
393
497
 
394
498
  it('should pass verbose flag to Prisma commands', async () => {
499
+ mockValidator.checkPrismaClientGenerated.mockReturnValue({
500
+ generated: false // Client doesn't exist, will generate
501
+ });
502
+
395
503
  await dbSetupCommand({ verbose: true });
396
504
 
397
505
  expect(mockRunner.runPrismaGenerate).toHaveBeenCalledWith('mongodb', true);
@@ -399,6 +507,10 @@ describe('DB Setup Command', () => {
399
507
  });
400
508
 
401
509
  it('should not show verbose output when flag disabled', async () => {
510
+ mockValidator.checkPrismaClientGenerated.mockReturnValue({
511
+ generated: false // Client doesn't exist, will generate
512
+ });
513
+
402
514
  await dbSetupCommand({ verbose: false });
403
515
 
404
516
  expect(mockRunner.runPrismaGenerate).toHaveBeenCalledWith('mongodb', false);