@maestro-ai/cli 1.0.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.
Files changed (252) hide show
  1. package/README.md +59 -0
  2. package/content/guides/Cat/303/241logo de Stacks para Cloud Moderna.md" +119 -0
  3. package/content/guides/Cat/303/241logo de Stacks para Hospedagem Compartilhada.md" +147 -0
  4. package/content/guides/Checklist Mestre de Entrega.md +68 -0
  5. package/content/guides/Gates de Qualidade.md +209 -0
  6. package/content/guides/Guia de Adi/303/247/303/243o de Novas Funcionalidades.md" +355 -0
  7. package/content/guides/Guia de Chaos Engineering.md +267 -0
  8. package/content/guides/Guia de Debugging com IA.md +135 -0
  9. package/content/guides/Guia de Estrat/303/251gias de Cache.md" +352 -0
  10. package/content/guides/Guia de Migrations Zero-Downtime.md +311 -0
  11. package/content/guides/Guia de Multi-tenancy.md +368 -0
  12. package/content/guides/Guia de Otimiza/303/247/303/243o de Custos Cloud.md" +195 -0
  13. package/content/guides/Guia de Refatora/303/247/303/243o de C/303/263digo Legado com IA.md" +162 -0
  14. package/content/guides/Guia de SLOs e Error Budgets.md +315 -0
  15. package/content/guides/M/303/251tricas de Efici/303/252ncia do Desenvolvimento com IA.md" +93 -0
  16. package/content/guides/Rules base.md +90 -0
  17. package/content/prompts/README.md +203 -0
  18. package/content/prompts/acessibilidade/analise-acessibilidade.md +257 -0
  19. package/content/prompts/apis/design-api-rest.md +303 -0
  20. package/content/prompts/apis/idempotencia.md +254 -0
  21. package/content/prompts/apis/versionamento.md +313 -0
  22. package/content/prompts/arquitetura/arquitetura-c4-completo.md +190 -0
  23. package/content/prompts/arquitetura/clean-architecture.md +151 -0
  24. package/content/prompts/arquitetura/ddd-bounded-contexts.md +183 -0
  25. package/content/prompts/arquitetura/ddd-cqrs.md +176 -0
  26. package/content/prompts/arquitetura/modelo-dominio.md +207 -0
  27. package/content/prompts/arquitetura/multi-tenancy.md +235 -0
  28. package/content/prompts/database/migrations-zero-downtime.md +192 -0
  29. package/content/prompts/database/otimizacao-queries.md +296 -0
  30. package/content/prompts/desenvolvimento/code-review.md +301 -0
  31. package/content/prompts/desenvolvimento/gerar-servico.md +271 -0
  32. package/content/prompts/devops/docker-compose.md +336 -0
  33. package/content/prompts/devops/feature-flags.md +374 -0
  34. package/content/prompts/devops/kubernetes-deploy.md +460 -0
  35. package/content/prompts/devops/pipeline-cicd.md +358 -0
  36. package/content/prompts/devops/terraform-iac.md +502 -0
  37. package/content/prompts/escalabilidade/analise-performance.md +240 -0
  38. package/content/prompts/escalabilidade/analise-performance.txt +94 -0
  39. package/content/prompts/escalabilidade/caching.md +255 -0
  40. package/content/prompts/observabilidade/chaos-testing.md +237 -0
  41. package/content/prompts/observabilidade/estrategia-observabilidade.md +263 -0
  42. package/content/prompts/observabilidade/estrategia-observabilidade.txt +134 -0
  43. package/content/prompts/observabilidade/slos.md +215 -0
  44. package/content/prompts/produto/discovery-inicial.md +203 -0
  45. package/content/prompts/produto/discovery-inicial.txt +33 -0
  46. package/content/prompts/requisitos/refinar-requisitos.md +232 -0
  47. package/content/prompts/requisitos/refinar-requisitos.txt +40 -0
  48. package/content/prompts/seguranca/analise-seguranca.md +243 -0
  49. package/content/prompts/seguranca/pentest-checklist.md +333 -0
  50. package/content/prompts/seguranca/rate-limiting.md +356 -0
  51. package/content/prompts/seguranca/revisao-lgpd.md +227 -0
  52. package/content/prompts/seguranca/threat-modeling.md +224 -0
  53. package/content/prompts/testes/contract-testing.md +340 -0
  54. package/content/prompts/testes/gerar-testes-unitarios.md +474 -0
  55. package/content/prompts/testes/testes-e2e.md +460 -0
  56. package/content/prompts/testes/testes-integracao.md +418 -0
  57. package/content/prompts/testes/testes-performance.md +458 -0
  58. package/content/prompts/ux/gerar-ui-stitch.md +151 -0
  59. package/content/skills/api-patterns/SKILL.md +81 -0
  60. package/content/skills/api-patterns/api-style.md +42 -0
  61. package/content/skills/api-patterns/auth.md +24 -0
  62. package/content/skills/api-patterns/documentation.md +26 -0
  63. package/content/skills/api-patterns/graphql.md +41 -0
  64. package/content/skills/api-patterns/rate-limiting.md +31 -0
  65. package/content/skills/api-patterns/response.md +37 -0
  66. package/content/skills/api-patterns/rest.md +40 -0
  67. package/content/skills/api-patterns/scripts/api_validator.py +211 -0
  68. package/content/skills/api-patterns/security-testing.md +122 -0
  69. package/content/skills/api-patterns/trpc.md +41 -0
  70. package/content/skills/api-patterns/versioning.md +22 -0
  71. package/content/skills/app-builder/SKILL.md +75 -0
  72. package/content/skills/app-builder/agent-coordination.md +71 -0
  73. package/content/skills/app-builder/feature-building.md +53 -0
  74. package/content/skills/app-builder/project-detection.md +34 -0
  75. package/content/skills/app-builder/scaffolding.md +118 -0
  76. package/content/skills/app-builder/tech-stack.md +40 -0
  77. package/content/skills/app-builder/templates/SKILL.md +39 -0
  78. package/content/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
  79. package/content/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
  80. package/content/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
  81. package/content/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
  82. package/content/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
  83. package/content/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
  84. package/content/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
  85. package/content/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +82 -0
  86. package/content/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +100 -0
  87. package/content/skills/app-builder/templates/nextjs-static/TEMPLATE.md +106 -0
  88. package/content/skills/app-builder/templates/nuxt-app/TEMPLATE.md +101 -0
  89. package/content/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
  90. package/content/skills/app-builder/templates/react-native-app/TEMPLATE.md +93 -0
  91. package/content/skills/architecture/SKILL.md +55 -0
  92. package/content/skills/architecture/context-discovery.md +43 -0
  93. package/content/skills/architecture/examples.md +94 -0
  94. package/content/skills/architecture/pattern-selection.md +68 -0
  95. package/content/skills/architecture/patterns-reference.md +50 -0
  96. package/content/skills/architecture/trade-off-analysis.md +77 -0
  97. package/content/skills/bash-linux/SKILL.md +199 -0
  98. package/content/skills/behavioral-modes/SKILL.md +242 -0
  99. package/content/skills/brainstorming/SKILL.md +163 -0
  100. package/content/skills/brainstorming/dynamic-questioning.md +350 -0
  101. package/content/skills/clean-code/SKILL.md +201 -0
  102. package/content/skills/code-review-checklist/SKILL.md +109 -0
  103. package/content/skills/database-design/SKILL.md +52 -0
  104. package/content/skills/database-design/database-selection.md +43 -0
  105. package/content/skills/database-design/indexing.md +39 -0
  106. package/content/skills/database-design/migrations.md +48 -0
  107. package/content/skills/database-design/optimization.md +36 -0
  108. package/content/skills/database-design/orm-selection.md +30 -0
  109. package/content/skills/database-design/schema-design.md +56 -0
  110. package/content/skills/database-design/scripts/schema_validator.py +172 -0
  111. package/content/skills/deployment-procedures/SKILL.md +241 -0
  112. package/content/skills/doc.md +177 -0
  113. package/content/skills/documentation-templates/SKILL.md +194 -0
  114. package/content/skills/frontend-design/SKILL.md +396 -0
  115. package/content/skills/frontend-design/animation-guide.md +331 -0
  116. package/content/skills/frontend-design/color-system.md +311 -0
  117. package/content/skills/frontend-design/decision-trees.md +418 -0
  118. package/content/skills/frontend-design/motion-graphics.md +306 -0
  119. package/content/skills/frontend-design/scripts/accessibility_checker.py +183 -0
  120. package/content/skills/frontend-design/scripts/ux_audit.py +722 -0
  121. package/content/skills/frontend-design/typography-system.md +345 -0
  122. package/content/skills/frontend-design/ux-psychology.md +541 -0
  123. package/content/skills/frontend-design/visual-effects.md +383 -0
  124. package/content/skills/game-development/2d-games/SKILL.md +119 -0
  125. package/content/skills/game-development/3d-games/SKILL.md +135 -0
  126. package/content/skills/game-development/SKILL.md +167 -0
  127. package/content/skills/game-development/game-art/SKILL.md +185 -0
  128. package/content/skills/game-development/game-audio/SKILL.md +190 -0
  129. package/content/skills/game-development/game-design/SKILL.md +129 -0
  130. package/content/skills/game-development/mobile-games/SKILL.md +108 -0
  131. package/content/skills/game-development/multiplayer/SKILL.md +132 -0
  132. package/content/skills/game-development/pc-games/SKILL.md +144 -0
  133. package/content/skills/game-development/vr-ar/SKILL.md +123 -0
  134. package/content/skills/game-development/web-games/SKILL.md +150 -0
  135. package/content/skills/geo-fundamentals/SKILL.md +156 -0
  136. package/content/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
  137. package/content/skills/i18n-localization/SKILL.md +154 -0
  138. package/content/skills/i18n-localization/scripts/i18n_checker.py +241 -0
  139. package/content/skills/intelligent-routing/SKILL.md +334 -0
  140. package/content/skills/lint-and-validate/SKILL.md +45 -0
  141. package/content/skills/lint-and-validate/scripts/lint_runner.py +172 -0
  142. package/content/skills/lint-and-validate/scripts/type_coverage.py +173 -0
  143. package/content/skills/mcp-builder/SKILL.md +176 -0
  144. package/content/skills/mobile-design/SKILL.md +394 -0
  145. package/content/skills/mobile-design/decision-trees.md +516 -0
  146. package/content/skills/mobile-design/mobile-backend.md +491 -0
  147. package/content/skills/mobile-design/mobile-color-system.md +420 -0
  148. package/content/skills/mobile-design/mobile-debugging.md +122 -0
  149. package/content/skills/mobile-design/mobile-design-thinking.md +357 -0
  150. package/content/skills/mobile-design/mobile-navigation.md +458 -0
  151. package/content/skills/mobile-design/mobile-performance.md +767 -0
  152. package/content/skills/mobile-design/mobile-testing.md +356 -0
  153. package/content/skills/mobile-design/mobile-typography.md +433 -0
  154. package/content/skills/mobile-design/platform-android.md +666 -0
  155. package/content/skills/mobile-design/platform-ios.md +561 -0
  156. package/content/skills/mobile-design/scripts/mobile_audit.py +670 -0
  157. package/content/skills/mobile-design/touch-psychology.md +537 -0
  158. package/content/skills/nextjs-best-practices/SKILL.md +203 -0
  159. package/content/skills/nodejs-best-practices/SKILL.md +333 -0
  160. package/content/skills/parallel-agents/SKILL.md +175 -0
  161. package/content/skills/performance-profiling/SKILL.md +143 -0
  162. package/content/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
  163. package/content/skills/plan-writing/SKILL.md +152 -0
  164. package/content/skills/powershell-windows/SKILL.md +167 -0
  165. package/content/skills/python-patterns/SKILL.md +441 -0
  166. package/content/skills/react-patterns/SKILL.md +198 -0
  167. package/content/skills/red-team-tactics/SKILL.md +199 -0
  168. package/content/skills/seo-fundamentals/SKILL.md +129 -0
  169. package/content/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
  170. package/content/skills/server-management/SKILL.md +161 -0
  171. package/content/skills/systematic-debugging/SKILL.md +109 -0
  172. package/content/skills/tailwind-patterns/SKILL.md +269 -0
  173. package/content/skills/tdd-workflow/SKILL.md +149 -0
  174. package/content/skills/testing-patterns/SKILL.md +178 -0
  175. package/content/skills/testing-patterns/scripts/test_runner.py +219 -0
  176. package/content/skills/vulnerability-scanner/SKILL.md +276 -0
  177. package/content/skills/vulnerability-scanner/checklists.md +121 -0
  178. package/content/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
  179. package/content/skills/webapp-testing/SKILL.md +187 -0
  180. package/content/skills/webapp-testing/scripts/playwright_runner.py +173 -0
  181. package/content/specialists/Especialista em Acessibilidade.md +266 -0
  182. package/content/specialists/Especialista em An/303/241lise de Testes.md" +434 -0
  183. package/content/specialists/Especialista em Arquitetura Avan/303/247ada.md" +358 -0
  184. package/content/specialists/Especialista em Arquitetura de Software.md +177 -0
  185. package/content/specialists/Especialista em Banco de Dados.md +260 -0
  186. package/content/specialists/Especialista em Contrato de API.md +172 -0
  187. package/content/specialists/Especialista em Dados e Analytics com IA.md +246 -0
  188. package/content/specialists/Especialista em Debugging e Troubleshooting.md +191 -0
  189. package/content/specialists/Especialista em Desenvolvimento Frontend.md +477 -0
  190. package/content/specialists/Especialista em Desenvolvimento Mobile.md +241 -0
  191. package/content/specialists/Especialista em Desenvolvimento e Vibe Coding Estruturado.md +417 -0
  192. package/content/specialists/Especialista em DevOps e Infraestrutura.md +294 -0
  193. package/content/specialists/Especialista em Documenta/303/247/303/243o T/303/251cnica.md" +227 -0
  194. package/content/specialists/Especialista em Engenharia de Requisitos com IA.md +299 -0
  195. package/content/specialists/Especialista em Explora/303/247/303/243o de Codebase.md" +179 -0
  196. package/content/specialists/Especialista em Gest/303/243o de Produto.md" +179 -0
  197. package/content/specialists/Especialista em Migra/303/247/303/243o e Moderniza/303/247/303/243o.md" +410 -0
  198. package/content/specialists/Especialista em Modelagem e Arquitetura de Dom/303/255nio com IA.md" +248 -0
  199. package/content/specialists/Especialista em Observabilidade.md +415 -0
  200. package/content/specialists/Especialista em Performance e Escalabilidade.md +373 -0
  201. package/content/specialists/Especialista em Plano de Execu/303/247/303/243o com IA.md" +341 -0
  202. package/content/specialists/Especialista em Prototipagem R/303/241pida com Google Stitch.md" +419 -0
  203. package/content/specialists/Especialista em Seguran/303/247a da Informa/303/247/303/243o.md" +508 -0
  204. package/content/specialists/Especialista em UX Design.md +453 -0
  205. package/content/specialists/INDEX.md +43 -0
  206. package/content/templates/PRD.md +165 -0
  207. package/content/templates/README.md +65 -0
  208. package/content/templates/adr.md +103 -0
  209. package/content/templates/arquitetura.md +279 -0
  210. package/content/templates/backlog.md +185 -0
  211. package/content/templates/checklist-seguranca.md +180 -0
  212. package/content/templates/contexto.md +120 -0
  213. package/content/templates/criterios-aceite.md +99 -0
  214. package/content/templates/design-banco.md +270 -0
  215. package/content/templates/design-doc.md +240 -0
  216. package/content/templates/feature.md +88 -0
  217. package/content/templates/historia-backend.md +84 -0
  218. package/content/templates/historia-frontend.md +75 -0
  219. package/content/templates/historia-usuario.md +125 -0
  220. package/content/templates/mapa-navegacao.md +133 -0
  221. package/content/templates/matriz-rastreabilidade.md +121 -0
  222. package/content/templates/modelo-dominio.md +219 -0
  223. package/content/templates/plano-testes.md +199 -0
  224. package/content/templates/prototipo-stitch.md +138 -0
  225. package/content/templates/requisitos.md +162 -0
  226. package/content/templates/slo-sli.md +197 -0
  227. package/content/workflows/README-MCP.md +363 -0
  228. package/content/workflows/brainstorm.md +113 -0
  229. package/content/workflows/create.md +59 -0
  230. package/content/workflows/debug.md +103 -0
  231. package/content/workflows/deploy.md +176 -0
  232. package/content/workflows/enhance.md +63 -0
  233. package/content/workflows/mcp-debug.md +506 -0
  234. package/content/workflows/mcp-feature.md +385 -0
  235. package/content/workflows/mcp-gate.md +413 -0
  236. package/content/workflows/mcp-next.md +388 -0
  237. package/content/workflows/mcp-refactor.md +600 -0
  238. package/content/workflows/mcp-start.md +304 -0
  239. package/content/workflows/mcp-status.md +400 -0
  240. package/content/workflows/orchestrate.md +237 -0
  241. package/content/workflows/plan.md +89 -0
  242. package/content/workflows/preview.md +81 -0
  243. package/content/workflows/status.md +86 -0
  244. package/content/workflows/test.md +144 -0
  245. package/content/workflows/ui-ux-pro-max.md +296 -0
  246. package/dist/commands/init.d.ts +6 -0
  247. package/dist/commands/init.js +138 -0
  248. package/dist/commands/update.d.ts +5 -0
  249. package/dist/commands/update.js +50 -0
  250. package/dist/index.d.ts +2 -0
  251. package/dist/index.js +21 -0
  252. package/package.json +48 -0
@@ -0,0 +1,418 @@
1
+ # Prompt: Testes de Integração
2
+
3
+ > **Quando usar**: Após testes unitários, para validar interação entre componentes
4
+ > **Especialista**: [Análise de Testes](../../02-especialistas/Especialista%20em%20Análise%20de%20Testes.md)
5
+ > **Nível**: Médio
6
+
7
+ ---
8
+
9
+ ## Fluxo de Contexto
10
+
11
+ Antes de usar este prompt, tenha em mãos:
12
+ - `docs/CONTEXTO.md` - Entendimento do projeto
13
+ - `docs/05-arquitetura/arquitetura.md` - Componentes e integrações
14
+ - Código dos serviços/repositórios a testar
15
+
16
+ Após gerar, salve os testes em:
17
+ - `tests/integration/` ou similar na estrutura do projeto
18
+
19
+ ---
20
+
21
+ ## Prompt Completo
22
+
23
+ ```text
24
+ Atue como especialista em testes de integração.
25
+
26
+ ## Contexto do Projeto
27
+
28
+ [COLE O CONTEÚDO DE docs/CONTEXTO.md]
29
+
30
+ ## Stack Tecnológica
31
+
32
+ - Backend: [Framework/Linguagem]
33
+ - Banco de dados: [PostgreSQL/MySQL/MongoDB]
34
+ - ORM: [Prisma/TypeORM/Sequelize/Eloquent]
35
+ - APIs externas: [Liste integrações]
36
+ - Framework de testes: [Jest/Vitest/PHPUnit/JUnit/pytest]
37
+
38
+ ## Componentes a Testar
39
+
40
+ - Repositórios/DAOs: [Liste classes de acesso a dados]
41
+ - Serviços: [Liste serviços que interagem com outros]
42
+ - APIs: [Endpoints que precisam de teste de integração]
43
+ - Integrações externas: [Gateways de pagamento, APIs de terceiros]
44
+
45
+ ## Código a Testar (opcional)
46
+
47
+ ```[LINGUAGEM]
48
+ [COLE O CÓDIGO DO SERVIÇO/REPOSITÓRIO]
49
+ ```
50
+
51
+ ---
52
+
53
+ ## Sua Missão
54
+
55
+ Gere testes de integração completos:
56
+
57
+ ### 1. Setup do Ambiente de Testes
58
+
59
+ #### Banco de Dados de Teste
60
+ ```[LINGUAGEM]
61
+ // Opção 1: Banco em memória (rápido, menos realista)
62
+ // SQLite in-memory, H2, etc
63
+
64
+ // Opção 2: Testcontainers (mais realista)
65
+ // Container Docker com PostgreSQL/MySQL real
66
+
67
+ // Opção 3: Banco dedicado de teste
68
+ // Mesmo tipo de produção, dados isolados
69
+ ```
70
+
71
+ #### Configuração do Framework
72
+ ```[LINGUAGEM]
73
+ // Setup e teardown global
74
+ // Exemplo: Jest config, pytest fixtures, etc
75
+ ```
76
+
77
+ ### 2. Testes de Repositório/DAO
78
+
79
+ ```[LINGUAGEM]
80
+ describe('UserRepository Integration', () => {
81
+ // Setup: conectar ao banco de teste
82
+ beforeAll(async () => {
83
+ // Inicializar conexão
84
+ // Rodar migrations
85
+ });
86
+
87
+ // Teardown: limpar dados entre testes
88
+ beforeEach(async () => {
89
+ // Truncar tabelas ou usar transação
90
+ });
91
+
92
+ afterAll(async () => {
93
+ // Fechar conexão
94
+ });
95
+
96
+ describe('create', () => {
97
+ it('should persist user to database', async () => {
98
+ // Arrange
99
+ const userData = { email: 'test@example.com', name: 'Test' };
100
+
101
+ // Act
102
+ const user = await repository.create(userData);
103
+
104
+ // Assert
105
+ expect(user.id).toBeDefined();
106
+
107
+ // Verificar no banco diretamente
108
+ const persisted = await db.query('SELECT * FROM users WHERE id = ?', [user.id]);
109
+ expect(persisted.email).toBe(userData.email);
110
+ });
111
+ });
112
+
113
+ describe('findByEmail', () => {
114
+ it('should return null for non-existent email', async () => {});
115
+ it('should return user for existing email', async () => {});
116
+ });
117
+
118
+ describe('update', () => {
119
+ it('should update and persist changes', async () => {});
120
+ it('should throw for non-existent user', async () => {});
121
+ });
122
+
123
+ describe('delete', () => {
124
+ it('should remove from database', async () => {});
125
+ it('should cascade delete related records', async () => {});
126
+ });
127
+ });
128
+ ```
129
+
130
+ ### 3. Testes de Serviço com Dependências
131
+
132
+ ```[LINGUAGEM]
133
+ describe('OrderService Integration', () => {
134
+ // Dependências reais (banco) + mocks (APIs externas)
135
+ let orderService: OrderService;
136
+ let orderRepository: OrderRepository; // Real
137
+ let paymentGateway: PaymentGateway; // Mock
138
+ let emailService: EmailService; // Mock ou real
139
+
140
+ beforeAll(async () => {
141
+ // Injetar dependências reais onde possível
142
+ orderRepository = new OrderRepository(testDatabase);
143
+
144
+ // Mock apenas integrações externas
145
+ paymentGateway = mockPaymentGateway();
146
+
147
+ orderService = new OrderService(orderRepository, paymentGateway);
148
+ });
149
+
150
+ describe('createOrder', () => {
151
+ it('should create order and process payment', async () => {
152
+ // Arrange
153
+ const orderData = { items: [...], userId: 1 };
154
+ paymentGateway.charge.mockResolvedValue({ success: true });
155
+
156
+ // Act
157
+ const order = await orderService.createOrder(orderData);
158
+
159
+ // Assert
160
+ expect(order.status).toBe('PAID');
161
+ expect(paymentGateway.charge).toHaveBeenCalledWith(/* ... */);
162
+
163
+ // Verificar persistência
164
+ const persisted = await orderRepository.findById(order.id);
165
+ expect(persisted).toBeDefined();
166
+ });
167
+
168
+ it('should rollback on payment failure', async () => {
169
+ paymentGateway.charge.mockResolvedValue({ success: false });
170
+
171
+ await expect(orderService.createOrder(orderData))
172
+ .rejects.toThrow('Payment failed');
173
+
174
+ // Verificar que não persistiu
175
+ const orders = await orderRepository.findByUserId(userId);
176
+ expect(orders).toHaveLength(0);
177
+ });
178
+ });
179
+ });
180
+ ```
181
+
182
+ ### 4. Testes de API (HTTP)
183
+
184
+ ```[LINGUAGEM]
185
+ describe('POST /api/users', () => {
186
+ // Usar supertest, httpx, ou similar
187
+ let app;
188
+
189
+ beforeAll(async () => {
190
+ app = await createTestApp(); // App com banco de teste
191
+ });
192
+
193
+ it('should create user and return 201', async () => {
194
+ const response = await request(app)
195
+ .post('/api/users')
196
+ .send({ email: 'test@example.com', password: 'secure123' })
197
+ .expect(201);
198
+
199
+ expect(response.body.user.email).toBe('test@example.com');
200
+ expect(response.body.user.password).toBeUndefined(); // Não expor senha
201
+
202
+ // Verificar persistência
203
+ const user = await db.query('SELECT * FROM users WHERE email = ?', ['test@example.com']);
204
+ expect(user).toBeDefined();
205
+ });
206
+
207
+ it('should return 409 for duplicate email', async () => {
208
+ // Arrange: criar usuário
209
+ await createUser({ email: 'existing@example.com' });
210
+
211
+ // Act & Assert
212
+ await request(app)
213
+ .post('/api/users')
214
+ .send({ email: 'existing@example.com', password: 'test123' })
215
+ .expect(409);
216
+ });
217
+
218
+ it('should validate request body', async () => {
219
+ await request(app)
220
+ .post('/api/users')
221
+ .send({ email: 'invalid-email' })
222
+ .expect(400)
223
+ .expect((res) => {
224
+ expect(res.body.errors).toContainEqual(
225
+ expect.objectContaining({ field: 'email' })
226
+ );
227
+ });
228
+ });
229
+ });
230
+ ```
231
+
232
+ ### 5. Testcontainers (Recomendado)
233
+
234
+ ```[LINGUAGEM]
235
+ // Exemplo com PostgreSQL
236
+ import { PostgreSqlContainer } from '@testcontainers/postgresql';
237
+
238
+ describe('Database Integration with Testcontainers', () => {
239
+ let container;
240
+ let db;
241
+
242
+ beforeAll(async () => {
243
+ // Iniciar container PostgreSQL
244
+ container = await new PostgreSqlContainer()
245
+ .withDatabase('testdb')
246
+ .withUsername('test')
247
+ .withPassword('test')
248
+ .start();
249
+
250
+ // Conectar ao container
251
+ db = await createConnection({
252
+ host: container.getHost(),
253
+ port: container.getMappedPort(5432),
254
+ database: 'testdb',
255
+ username: 'test',
256
+ password: 'test',
257
+ });
258
+
259
+ // Rodar migrations
260
+ await runMigrations(db);
261
+ });
262
+
263
+ afterAll(async () => {
264
+ await db.close();
265
+ await container.stop();
266
+ });
267
+
268
+ it('should work with real PostgreSQL', async () => {
269
+ // Teste com banco PostgreSQL real rodando em container
270
+ });
271
+ });
272
+ ```
273
+
274
+ ### 6. Mocking de APIs Externas
275
+
276
+ ```[LINGUAGEM]
277
+ // Usar nock, WireMock, ou mock-service-worker
278
+ import nock from 'nock';
279
+
280
+ describe('StripePaymentGateway Integration', () => {
281
+ beforeEach(() => {
282
+ // Mock da API do Stripe
283
+ nock('https://api.stripe.com')
284
+ .post('/v1/charges')
285
+ .reply(200, {
286
+ id: 'ch_mock123',
287
+ status: 'succeeded',
288
+ amount: 1000,
289
+ });
290
+ });
291
+
292
+ afterEach(() => {
293
+ nock.cleanAll();
294
+ });
295
+
296
+ it('should process charge successfully', async () => {
297
+ const gateway = new StripePaymentGateway(testApiKey);
298
+
299
+ const result = await gateway.charge({
300
+ amount: 1000,
301
+ currency: 'brl',
302
+ source: 'tok_visa',
303
+ });
304
+
305
+ expect(result.success).toBe(true);
306
+ expect(result.transactionId).toBe('ch_mock123');
307
+ });
308
+
309
+ it('should handle Stripe errors', async () => {
310
+ nock.cleanAll();
311
+ nock('https://api.stripe.com')
312
+ .post('/v1/charges')
313
+ .reply(402, {
314
+ error: { code: 'card_declined', message: 'Card declined' }
315
+ });
316
+
317
+ await expect(gateway.charge(chargeData))
318
+ .rejects.toThrow('Card declined');
319
+ });
320
+ });
321
+ ```
322
+
323
+ ### 7. Padrões e Boas Práticas
324
+
325
+ #### Isolamento
326
+ - Cada teste deve ser independente
327
+ - Usar transações com rollback ou truncar tabelas
328
+ - Não compartilhar estado entre testes
329
+
330
+ #### Dados de Teste
331
+ ```[LINGUAGEM]
332
+ // Factory pattern para criar dados
333
+ const userFactory = {
334
+ build: (overrides = {}) => ({
335
+ email: faker.internet.email(),
336
+ name: faker.person.fullName(),
337
+ ...overrides,
338
+ }),
339
+ create: async (overrides = {}) => {
340
+ return repository.create(userFactory.build(overrides));
341
+ },
342
+ };
343
+
344
+ // Uso
345
+ const user = await userFactory.create({ role: 'admin' });
346
+ ```
347
+
348
+ #### Assertions Específicas
349
+ ```[LINGUAGEM]
350
+ // Verificar estado do banco
351
+ expect(await countUsers()).toBe(1);
352
+
353
+ // Verificar side effects
354
+ expect(emailService.send).toHaveBeenCalledWith(
355
+ expect.objectContaining({ to: 'user@example.com' })
356
+ );
357
+
358
+ // Verificar timestamps
359
+ expect(user.createdAt).toBeInstanceOf(Date);
360
+ expect(user.updatedAt).toBeAfter(user.createdAt);
361
+ ```
362
+ ```
363
+
364
+ ---
365
+
366
+ ## Exemplo de Uso
367
+
368
+ ```text
369
+ Atue como especialista em testes de integração.
370
+
371
+ ## Contexto
372
+
373
+ API de e-commerce com NestJS.
374
+
375
+ ## Stack
376
+
377
+ - Backend: NestJS + TypeScript
378
+ - Banco: PostgreSQL
379
+ - ORM: Prisma
380
+ - Framework: Jest
381
+ - Integrações: Stripe, SendGrid
382
+
383
+ ## Componentes
384
+
385
+ - OrderRepository
386
+ - OrderService (usa OrderRepository + PaymentGateway)
387
+ - POST /api/orders endpoint
388
+
389
+ ## Código
390
+
391
+ @Injectable()
392
+ export class OrderService {
393
+ constructor(
394
+ private orderRepo: OrderRepository,
395
+ private paymentGateway: PaymentGateway,
396
+ ) {}
397
+
398
+ async createOrder(dto: CreateOrderDto): Promise<Order> {
399
+ const order = await this.orderRepo.create(dto);
400
+ const payment = await this.paymentGateway.charge(order.total);
401
+ return this.orderRepo.updateStatus(order.id, payment.success ? 'PAID' : 'FAILED');
402
+ }
403
+ }
404
+ ```
405
+
406
+ ---
407
+
408
+ ## Checklist Pós-Geração
409
+
410
+ - [ ] Setup de banco de teste configurado
411
+ - [ ] Testcontainers ou banco em memória funcionando
412
+ - [ ] Testes de repositório com CRUD completo
413
+ - [ ] Testes de serviço com mocks de APIs externas
414
+ - [ ] Testes de API HTTP (endpoints)
415
+ - [ ] Factories para geração de dados
416
+ - [ ] Isolamento entre testes garantido
417
+ - [ ] Cleanup após testes
418
+ - [ ] CI configurado para rodar testes de integração