create-coreback 1.0.4 → 1.0.5

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 (181) hide show
  1. package/README.md +30 -1
  2. package/dist/generators/docker.d.ts.map +1 -1
  3. package/dist/generators/docker.js +61 -4
  4. package/dist/generators/docker.js.map +1 -1
  5. package/dist/generators/envExample.d.ts.map +1 -1
  6. package/dist/generators/envExample.js +26 -0
  7. package/dist/generators/envExample.js.map +1 -1
  8. package/dist/generators/index.js +1 -1
  9. package/dist/generators/index.js.map +1 -1
  10. package/dist/generators/packageJson.d.ts.map +1 -1
  11. package/dist/generators/packageJson.js +36 -0
  12. package/dist/generators/packageJson.js.map +1 -1
  13. package/dist/generators/sourceFiles/controllers/index.d.ts +3 -0
  14. package/dist/generators/sourceFiles/controllers/index.d.ts.map +1 -0
  15. package/dist/generators/sourceFiles/controllers/index.js +147 -0
  16. package/dist/generators/sourceFiles/controllers/index.js.map +1 -0
  17. package/dist/generators/sourceFiles/core/configFiles.d.ts +3 -0
  18. package/dist/generators/sourceFiles/core/configFiles.d.ts.map +1 -0
  19. package/dist/generators/sourceFiles/core/configFiles.js +148 -0
  20. package/dist/generators/sourceFiles/core/configFiles.js.map +1 -0
  21. package/dist/generators/sourceFiles/core/index.d.ts +3 -0
  22. package/dist/generators/sourceFiles/core/index.d.ts.map +1 -0
  23. package/dist/generators/sourceFiles/core/index.js +17 -0
  24. package/dist/generators/sourceFiles/core/index.js.map +1 -0
  25. package/dist/generators/sourceFiles/core/indexFile.d.ts +3 -0
  26. package/dist/generators/sourceFiles/core/indexFile.d.ts.map +1 -0
  27. package/dist/generators/sourceFiles/core/indexFile.js +47 -0
  28. package/dist/generators/sourceFiles/core/indexFile.js.map +1 -0
  29. package/dist/generators/sourceFiles/core/middlewares.d.ts +3 -0
  30. package/dist/generators/sourceFiles/core/middlewares.d.ts.map +1 -0
  31. package/dist/generators/sourceFiles/core/middlewares.js +123 -0
  32. package/dist/generators/sourceFiles/core/middlewares.js.map +1 -0
  33. package/dist/generators/sourceFiles/core/routes.d.ts +3 -0
  34. package/dist/generators/sourceFiles/core/routes.d.ts.map +1 -0
  35. package/dist/generators/sourceFiles/core/routes.js +281 -0
  36. package/dist/generators/sourceFiles/core/routes.js.map +1 -0
  37. package/dist/generators/sourceFiles/core/tests.d.ts +3 -0
  38. package/dist/generators/sourceFiles/core/tests.d.ts.map +1 -0
  39. package/dist/generators/sourceFiles/core/tests.js +48 -0
  40. package/dist/generators/sourceFiles/core/tests.js.map +1 -0
  41. package/dist/generators/sourceFiles/core/types.d.ts +2 -0
  42. package/dist/generators/sourceFiles/core/types.d.ts.map +1 -0
  43. package/dist/generators/sourceFiles/core/types.js +13 -0
  44. package/dist/generators/sourceFiles/core/types.js.map +1 -0
  45. package/dist/generators/sourceFiles/core/utils.d.ts +2 -0
  46. package/dist/generators/sourceFiles/core/utils.d.ts.map +1 -0
  47. package/dist/generators/sourceFiles/core/utils.js +173 -0
  48. package/dist/generators/sourceFiles/core/utils.js.map +1 -0
  49. package/dist/generators/sourceFiles/core/validators.d.ts +3 -0
  50. package/dist/generators/sourceFiles/core/validators.d.ts.map +1 -0
  51. package/dist/generators/sourceFiles/core/validators.js +37 -0
  52. package/dist/generators/sourceFiles/core/validators.js.map +1 -0
  53. package/dist/generators/sourceFiles/features/fileUpload.d.ts +3 -0
  54. package/dist/generators/sourceFiles/features/fileUpload.d.ts.map +1 -0
  55. package/dist/generators/sourceFiles/features/fileUpload.js +229 -0
  56. package/dist/generators/sourceFiles/features/fileUpload.js.map +1 -0
  57. package/dist/generators/sourceFiles/features/queue.d.ts +3 -0
  58. package/dist/generators/sourceFiles/features/queue.d.ts.map +1 -0
  59. package/dist/generators/sourceFiles/features/queue.js +211 -0
  60. package/dist/generators/sourceFiles/features/queue.js.map +1 -0
  61. package/dist/generators/sourceFiles/features/redis.d.ts +3 -0
  62. package/dist/generators/sourceFiles/features/redis.d.ts.map +1 -0
  63. package/dist/generators/sourceFiles/features/redis.js +68 -0
  64. package/dist/generators/sourceFiles/features/redis.js.map +1 -0
  65. package/dist/generators/sourceFiles/index.d.ts +3 -0
  66. package/dist/generators/sourceFiles/index.d.ts.map +1 -0
  67. package/dist/generators/sourceFiles/index.js +99 -0
  68. package/dist/generators/sourceFiles/index.js.map +1 -0
  69. package/dist/generators/sourceFiles/phase1/cliGenerators.d.ts +2 -0
  70. package/dist/generators/sourceFiles/phase1/cliGenerators.d.ts.map +1 -0
  71. package/dist/generators/sourceFiles/phase1/cliGenerators.js +336 -0
  72. package/dist/generators/sourceFiles/phase1/cliGenerators.js.map +1 -0
  73. package/dist/generators/sourceFiles/phase1/seedersFactories.d.ts +3 -0
  74. package/dist/generators/sourceFiles/phase1/seedersFactories.d.ts.map +1 -0
  75. package/dist/generators/sourceFiles/phase1/seedersFactories.js +89 -0
  76. package/dist/generators/sourceFiles/phase1/seedersFactories.js.map +1 -0
  77. package/dist/generators/sourceFiles/phase2/dtos.d.ts +2 -0
  78. package/dist/generators/sourceFiles/phase2/dtos.d.ts.map +1 -0
  79. package/dist/generators/sourceFiles/phase2/dtos.js +59 -0
  80. package/dist/generators/sourceFiles/phase2/dtos.js.map +1 -0
  81. package/dist/generators/sourceFiles/phase2/events.d.ts +2 -0
  82. package/dist/generators/sourceFiles/phase2/events.d.ts.map +1 -0
  83. package/dist/generators/sourceFiles/phase2/events.js +76 -0
  84. package/dist/generators/sourceFiles/phase2/events.js.map +1 -0
  85. package/dist/generators/sourceFiles/phase2/exceptionHandling.d.ts +2 -0
  86. package/dist/generators/sourceFiles/phase2/exceptionHandling.d.ts.map +1 -0
  87. package/dist/generators/sourceFiles/phase2/exceptionHandling.js +107 -0
  88. package/dist/generators/sourceFiles/phase2/exceptionHandling.js.map +1 -0
  89. package/dist/generators/sourceFiles/phase2/guards.d.ts +2 -0
  90. package/dist/generators/sourceFiles/phase2/guards.d.ts.map +1 -0
  91. package/dist/generators/sourceFiles/phase2/guards.js +98 -0
  92. package/dist/generators/sourceFiles/phase2/guards.js.map +1 -0
  93. package/dist/generators/sourceFiles/phase2/healthChecks.d.ts +3 -0
  94. package/dist/generators/sourceFiles/phase2/healthChecks.d.ts.map +1 -0
  95. package/dist/generators/sourceFiles/phase2/healthChecks.js +73 -0
  96. package/dist/generators/sourceFiles/phase2/healthChecks.js.map +1 -0
  97. package/dist/generators/sourceFiles/phase2/scheduledTasks.d.ts +2 -0
  98. package/dist/generators/sourceFiles/phase2/scheduledTasks.d.ts.map +1 -0
  99. package/dist/generators/sourceFiles/phase2/scheduledTasks.js +56 -0
  100. package/dist/generators/sourceFiles/phase2/scheduledTasks.js.map +1 -0
  101. package/dist/generators/sourceFiles/phase3/apiVersioning.d.ts +3 -0
  102. package/dist/generators/sourceFiles/phase3/apiVersioning.d.ts.map +1 -0
  103. package/dist/generators/sourceFiles/phase3/apiVersioning.js +72 -0
  104. package/dist/generators/sourceFiles/phase3/apiVersioning.js.map +1 -0
  105. package/dist/generators/sourceFiles/phase3/cliCommands.d.ts +2 -0
  106. package/dist/generators/sourceFiles/phase3/cliCommands.d.ts.map +1 -0
  107. package/dist/generators/sourceFiles/phase3/cliCommands.js +102 -0
  108. package/dist/generators/sourceFiles/phase3/cliCommands.js.map +1 -0
  109. package/dist/generators/sourceFiles/phase3/configSystem.d.ts +2 -0
  110. package/dist/generators/sourceFiles/phase3/configSystem.d.ts.map +1 -0
  111. package/dist/generators/sourceFiles/phase3/configSystem.js +57 -0
  112. package/dist/generators/sourceFiles/phase3/configSystem.js.map +1 -0
  113. package/dist/generators/sourceFiles/phase3/dependencyInjection.d.ts +2 -0
  114. package/dist/generators/sourceFiles/phase3/dependencyInjection.d.ts.map +1 -0
  115. package/dist/generators/sourceFiles/phase3/dependencyInjection.js +153 -0
  116. package/dist/generators/sourceFiles/phase3/dependencyInjection.js.map +1 -0
  117. package/dist/generators/sourceFiles/phase3/moduleSystem.d.ts +2 -0
  118. package/dist/generators/sourceFiles/phase3/moduleSystem.d.ts.map +1 -0
  119. package/dist/generators/sourceFiles/phase3/moduleSystem.js +166 -0
  120. package/dist/generators/sourceFiles/phase3/moduleSystem.js.map +1 -0
  121. package/dist/generators/sourceFiles/phase3/structuredLogging.d.ts +3 -0
  122. package/dist/generators/sourceFiles/phase3/structuredLogging.d.ts.map +1 -0
  123. package/dist/generators/sourceFiles/phase3/structuredLogging.js +155 -0
  124. package/dist/generators/sourceFiles/phase3/structuredLogging.js.map +1 -0
  125. package/dist/generators/sourceFiles/repositories/index.d.ts +3 -0
  126. package/dist/generators/sourceFiles/repositories/index.d.ts.map +1 -0
  127. package/dist/generators/sourceFiles/repositories/index.js +109 -0
  128. package/dist/generators/sourceFiles/repositories/index.js.map +1 -0
  129. package/dist/generators/sourceFiles/services/index.d.ts +3 -0
  130. package/dist/generators/sourceFiles/services/index.d.ts.map +1 -0
  131. package/dist/generators/sourceFiles/services/index.js +353 -0
  132. package/dist/generators/sourceFiles/services/index.js.map +1 -0
  133. package/dist/generators/sourceFiles.d.ts +1 -2
  134. package/dist/generators/sourceFiles.d.ts.map +1 -1
  135. package/dist/generators/sourceFiles.js +2 -1238
  136. package/dist/generators/sourceFiles.js.map +1 -1
  137. package/dist/prompts.d.ts.map +1 -1
  138. package/dist/prompts.js +35 -0
  139. package/dist/prompts.js.map +1 -1
  140. package/dist/types.d.ts +5 -0
  141. package/dist/types.d.ts.map +1 -1
  142. package/jest.config.js +21 -0
  143. package/package.json +4 -1
  144. package/src/generators/docker.ts +61 -4
  145. package/src/generators/envExample.ts +28 -0
  146. package/src/generators/index.ts +1 -1
  147. package/src/generators/packageJson.ts +40 -1
  148. package/src/generators/sourceFiles/controllers/index.ts +157 -0
  149. package/src/generators/sourceFiles/core/configFiles.ts +158 -0
  150. package/src/generators/sourceFiles/core/index.ts +28 -0
  151. package/src/generators/sourceFiles/core/indexFile.ts +49 -0
  152. package/src/generators/sourceFiles/core/middlewares.ts +129 -0
  153. package/src/generators/sourceFiles/core/routes.ts +295 -0
  154. package/src/generators/sourceFiles/core/tests.ts +62 -0
  155. package/src/generators/sourceFiles/core/types.ts +14 -0
  156. package/src/generators/sourceFiles/core/utils.ts +178 -0
  157. package/src/generators/sourceFiles/core/validators.ts +39 -0
  158. package/src/generators/sourceFiles/features/fileUpload.ts +241 -0
  159. package/src/generators/sourceFiles/features/queue.ts +226 -0
  160. package/src/generators/sourceFiles/features/redis.ts +73 -0
  161. package/src/generators/sourceFiles/index.ts +125 -0
  162. package/src/generators/sourceFiles/phase1/cliGenerators.ts +338 -0
  163. package/src/generators/sourceFiles/phase1/seedersFactories.ts +97 -0
  164. package/src/generators/sourceFiles/phase2/dtos.ts +60 -0
  165. package/src/generators/sourceFiles/phase2/events.ts +80 -0
  166. package/src/generators/sourceFiles/phase2/exceptionHandling.ts +111 -0
  167. package/src/generators/sourceFiles/phase2/guards.ts +99 -0
  168. package/src/generators/sourceFiles/phase2/healthChecks.ts +81 -0
  169. package/src/generators/sourceFiles/phase2/scheduledTasks.ts +58 -0
  170. package/src/generators/sourceFiles/phase3/apiVersioning.ts +77 -0
  171. package/src/generators/sourceFiles/phase3/cliCommands.ts +110 -0
  172. package/src/generators/sourceFiles/phase3/configSystem.ts +64 -0
  173. package/src/generators/sourceFiles/phase3/dependencyInjection.ts +155 -0
  174. package/src/generators/sourceFiles/phase3/moduleSystem.ts +170 -0
  175. package/src/generators/sourceFiles/phase3/structuredLogging.ts +160 -0
  176. package/src/generators/sourceFiles/repositories/index.ts +114 -0
  177. package/src/generators/sourceFiles/services/index.ts +363 -0
  178. package/src/generators/sourceFiles.ts +2 -1317
  179. package/src/prompts.ts +36 -1
  180. package/src/types.ts +5 -0
  181. package/tests/integration.test.ts +233 -0
package/src/prompts.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import inquirer from 'inquirer';
2
2
 
3
- import { ProjectConfig, DatabaseType, PackageManager } from './types.js';
3
+ import { ProjectConfig, DatabaseType, PackageManager, FileStorageType } from './types.js';
4
4
 
5
5
  export async function promptProjectConfig(
6
6
  defaultName?: string
@@ -57,6 +57,37 @@ export async function promptProjectConfig(
57
57
  message: 'Include Docker configuration?',
58
58
  default: true,
59
59
  },
60
+ {
61
+ type: 'confirm',
62
+ name: 'includeFileUpload',
63
+ message: 'Include file upload system?',
64
+ default: true,
65
+ },
66
+ {
67
+ type: 'list',
68
+ name: 'fileStorage',
69
+ message: 'Select file storage type:',
70
+ choices: [
71
+ { name: 'Local Storage', value: 'local' },
72
+ { name: 'AWS S3 / Cloud Storage', value: 's3' },
73
+ { name: 'None', value: 'none' },
74
+ ],
75
+ when: (answers) => answers.includeFileUpload,
76
+ default: 'local',
77
+ },
78
+ {
79
+ type: 'confirm',
80
+ name: 'includeRedis',
81
+ message: 'Include Redis (caching, sessions, queues)?',
82
+ default: true,
83
+ },
84
+ {
85
+ type: 'confirm',
86
+ name: 'includeQueue',
87
+ message: 'Include queue system (background jobs)?',
88
+ default: true,
89
+ when: (answers) => answers.includeRedis,
90
+ },
60
91
  {
61
92
  type: 'list',
62
93
  name: 'packageManager',
@@ -72,6 +103,10 @@ export async function promptProjectConfig(
72
103
  return {
73
104
  ...answers,
74
105
  projectName: projectName || answers.projectName,
106
+ includeFileUpload: answers.includeFileUpload ?? false,
107
+ fileStorage: answers.fileStorage || 'none',
108
+ includeRedis: answers.includeRedis ?? false,
109
+ includeQueue: answers.includeQueue ?? false,
75
110
  } as ProjectConfig;
76
111
  }
77
112
 
package/src/types.ts CHANGED
@@ -1,11 +1,16 @@
1
1
  export type DatabaseType = 'postgresql' | 'mysql' | 'mongodb' | 'sqlite';
2
2
  export type PackageManager = 'npm' | 'pnpm' | 'yarn';
3
+ export type FileStorageType = 'local' | 's3' | 'none';
3
4
 
4
5
  export interface ProjectConfig {
5
6
  projectName: string;
6
7
  database: DatabaseType;
7
8
  includeAuth: boolean;
8
9
  includeDocker: boolean;
10
+ includeFileUpload: boolean;
11
+ fileStorage: FileStorageType;
12
+ includeRedis: boolean;
13
+ includeQueue: boolean;
9
14
  packageManager: PackageManager;
10
15
  }
11
16
 
@@ -0,0 +1,233 @@
1
+ import { describe, it, expect, beforeAll, afterAll } from '@jest/globals';
2
+ import fs from 'fs-extra';
3
+ import path from 'path';
4
+ import { execSync } from 'child_process';
5
+ import { fileURLToPath } from 'url';
6
+
7
+ const __filename = fileURLToPath(import.meta.url);
8
+ const __dirname = path.dirname(__filename);
9
+ const projectRoot = path.resolve(__dirname, '..');
10
+
11
+ describe('Project Generator Integration Tests', () => {
12
+ const testProjectPath = path.join(projectRoot, 'test-project');
13
+ const testProjectSrc = path.join(testProjectPath, 'src');
14
+
15
+ beforeAll(() => {
16
+ // Clean up test project if exists
17
+ if (fs.existsSync(testProjectPath)) {
18
+ fs.removeSync(testProjectPath);
19
+ }
20
+ });
21
+
22
+ afterAll(() => {
23
+ // Clean up test project
24
+ if (fs.existsSync(testProjectPath)) {
25
+ fs.removeSync(testProjectPath);
26
+ }
27
+ });
28
+
29
+ describe('Project Structure', () => {
30
+ it('should generate project with correct structure', async () => {
31
+ // This would require running the actual generator
32
+ // For now, we'll test that the generator files exist
33
+ const generatorPath = path.join(projectRoot, 'src', 'generators');
34
+ expect(fs.existsSync(generatorPath)).toBe(true);
35
+ });
36
+ });
37
+
38
+ describe('Phase 1 Features', () => {
39
+ describe('CLI Generators', () => {
40
+ it('should have make.ts script', () => {
41
+ const makeScript = path.join(projectRoot, 'src', 'generators', 'sourceFiles.ts');
42
+ const content = fs.readFileSync(makeScript, 'utf-8');
43
+ expect(content).toContain('generateCLIGenerators');
44
+ expect(content).toContain('make.ts');
45
+ });
46
+
47
+ it('should generate make.ts with correct templates', () => {
48
+ const sourceFiles = path.join(projectRoot, 'src', 'generators', 'sourceFiles.ts');
49
+ const content = fs.readFileSync(sourceFiles, 'utf-8');
50
+ expect(content).toContain('controller');
51
+ expect(content).toContain('service');
52
+ expect(content).toContain('repository');
53
+ expect(content).toContain('route');
54
+ });
55
+ });
56
+
57
+ describe('API Resources', () => {
58
+ it('should generate resource.ts utility', () => {
59
+ const sourceFiles = path.join(projectRoot, 'src', 'generators', 'sourceFiles.ts');
60
+ const content = fs.readFileSync(sourceFiles, 'utf-8');
61
+ expect(content).toContain('resource.ts');
62
+ expect(content).toContain('class Resource');
63
+ expect(content).toContain('transformResponse');
64
+ });
65
+ });
66
+
67
+ describe('Pagination Helpers', () => {
68
+ it('should generate pagination.ts utility', () => {
69
+ const sourceFiles = path.join(projectRoot, 'src', 'generators', 'sourceFiles.ts');
70
+ const content = fs.readFileSync(sourceFiles, 'utf-8');
71
+ expect(content).toContain('pagination.ts');
72
+ expect(content).toContain('paginate');
73
+ expect(content).toContain('paginateQuery');
74
+ expect(content).toContain('PaginationMeta');
75
+ });
76
+ });
77
+
78
+ describe('Seeders and Factories', () => {
79
+ it('should generate seed.ts and factories', () => {
80
+ const sourceFiles = path.join(projectRoot, 'src', 'generators', 'sourceFiles.ts');
81
+ const content = fs.readFileSync(sourceFiles, 'utf-8');
82
+ expect(content).toContain('generateSeedersAndFactories');
83
+ expect(content).toContain('seed.ts');
84
+ expect(content).toContain('user.factory.ts');
85
+ });
86
+ });
87
+ });
88
+
89
+ describe('Phase 2 Features', () => {
90
+ describe('DTOs', () => {
91
+ it('should generate DTO system', () => {
92
+ const sourceFiles = path.join(projectRoot, 'src', 'generators', 'sourceFiles.ts');
93
+ const content = fs.readFileSync(sourceFiles, 'utf-8');
94
+ expect(content).toContain('generateDTOs');
95
+ expect(content).toContain('class DTO');
96
+ expect(content).toContain('createDTO');
97
+ expect(content).toContain('PaginationDTO');
98
+ expect(content).toContain('IdDTO');
99
+ });
100
+ });
101
+
102
+ describe('Events and Listeners', () => {
103
+ it('should generate events system', () => {
104
+ const sourceFiles = path.join(projectRoot, 'src', 'generators', 'sourceFiles.ts');
105
+ const content = fs.readFileSync(sourceFiles, 'utf-8');
106
+ expect(content).toContain('generateEventsAndListeners');
107
+ expect(content).toContain('eventEmitter.ts');
108
+ expect(content).toContain('Events');
109
+ expect(content).toContain('USER_REGISTERED');
110
+ expect(content).toContain('registerListeners');
111
+ });
112
+ });
113
+
114
+ describe('Scheduled Tasks', () => {
115
+ it('should generate scheduled tasks system', () => {
116
+ const sourceFiles = path.join(projectRoot, 'src', 'generators', 'sourceFiles.ts');
117
+ const content = fs.readFileSync(sourceFiles, 'utf-8');
118
+ expect(content).toContain('generateScheduledTasks');
119
+ expect(content).toContain('node-cron');
120
+ expect(content).toContain('registerScheduledTasks');
121
+ });
122
+ });
123
+
124
+ describe('Advanced Health Checks', () => {
125
+ it('should generate advanced health checks', () => {
126
+ const sourceFiles = path.join(projectRoot, 'src', 'generators', 'sourceFiles.ts');
127
+ const content = fs.readFileSync(sourceFiles, 'utf-8');
128
+ expect(content).toContain('generateAdvancedHealthChecks');
129
+ expect(content).toContain('HealthCheck');
130
+ expect(content).toContain('database');
131
+ expect(content).toContain('redis');
132
+ });
133
+ });
134
+
135
+ describe('Exception Handling', () => {
136
+ it('should generate advanced exception handling', () => {
137
+ const sourceFiles = path.join(projectRoot, 'src', 'generators', 'sourceFiles.ts');
138
+ const content = fs.readFileSync(sourceFiles, 'utf-8');
139
+ expect(content).toContain('generateAdvancedExceptionHandling');
140
+ expect(content).toContain('ValidationError');
141
+ expect(content).toContain('NotFoundError');
142
+ expect(content).toContain('UnauthorizedError');
143
+ expect(content).toContain('ForbiddenError');
144
+ expect(content).toContain('ConflictError');
145
+ });
146
+ });
147
+
148
+ describe('Guards and Policies', () => {
149
+ it('should generate guards and policies', () => {
150
+ const sourceFiles = path.join(projectRoot, 'src', 'generators', 'sourceFiles.ts');
151
+ const content = fs.readFileSync(sourceFiles, 'utf-8');
152
+ expect(content).toContain('generateGuardsAndPolicies');
153
+ expect(content).toContain('requireRole');
154
+ expect(content).toContain('requirePermission');
155
+ expect(content).toContain('authorize');
156
+ });
157
+ });
158
+ });
159
+
160
+ describe('Package.json Scripts', () => {
161
+ it('should include all CLI generator scripts', () => {
162
+ const packageJson = path.join(projectRoot, 'src', 'generators', 'packageJson.ts');
163
+ const content = fs.readFileSync(packageJson, 'utf-8');
164
+ expect(content).toContain('make:controller');
165
+ expect(content).toContain('make:service');
166
+ expect(content).toContain('make:repository');
167
+ expect(content).toContain('make:route');
168
+ expect(content).toContain('db:seed');
169
+ });
170
+
171
+ it('should include node-cron dependency', () => {
172
+ const packageJson = path.join(projectRoot, 'src', 'generators', 'packageJson.ts');
173
+ const content = fs.readFileSync(packageJson, 'utf-8');
174
+ expect(content).toContain('node-cron');
175
+ expect(content).toContain('@types/node-cron');
176
+ });
177
+ });
178
+
179
+ describe('Documentation', () => {
180
+ it('should have documentation for all features', () => {
181
+ const docsDir = path.join(projectRoot, 'docs');
182
+ const expectedDocs = [
183
+ '11-cli-generators.md',
184
+ '12-api-resources.md',
185
+ '13-pagination.md',
186
+ '14-seeders-factories.md',
187
+ '15-dtos.md',
188
+ '16-events-listeners.md',
189
+ '17-scheduled-tasks.md',
190
+ '18-health-checks.md',
191
+ '19-exception-handling.md',
192
+ '20-guards-policies.md',
193
+ ];
194
+
195
+ expectedDocs.forEach((doc) => {
196
+ const docPath = path.join(docsDir, doc);
197
+ expect(fs.existsSync(docPath)).toBe(true);
198
+ });
199
+ });
200
+
201
+ it('should update README with all new docs', () => {
202
+ const readme = path.join(projectRoot, 'docs', 'README.md');
203
+ const content = fs.readFileSync(readme, 'utf-8');
204
+ expect(content).toContain('11-cli-generators.md');
205
+ expect(content).toContain('20-guards-policies.md');
206
+ });
207
+ });
208
+
209
+ describe('Integration Points', () => {
210
+ it('should integrate events with auth service', () => {
211
+ const sourceFiles = path.join(projectRoot, 'src', 'generators', 'sourceFiles.ts');
212
+ const content = fs.readFileSync(sourceFiles, 'utf-8');
213
+ expect(content).toContain('eventEmitter.emit(Events.USER_REGISTERED');
214
+ expect(content).toContain('eventEmitter.emit(Events.USER_VERIFIED');
215
+ expect(content).toContain('eventEmitter.emit(Events.PASSWORD_RESET');
216
+ });
217
+
218
+ it('should integrate scheduled tasks in index.ts', () => {
219
+ const sourceFiles = path.join(projectRoot, 'src', 'generators', 'sourceFiles.ts');
220
+ const content = fs.readFileSync(sourceFiles, 'utf-8');
221
+ expect(content).toContain('registerScheduledTasks');
222
+ expect(content).toContain('registerListeners');
223
+ });
224
+
225
+ it('should include prisma seed configuration', () => {
226
+ const packageJson = path.join(projectRoot, 'src', 'generators', 'packageJson.ts');
227
+ const content = fs.readFileSync(packageJson, 'utf-8');
228
+ expect(content).toContain('prisma');
229
+ expect(content).toContain('seed');
230
+ });
231
+ });
232
+ });
233
+