create-genia-os 2.1.1 → 2.3.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 (89) hide show
  1. package/README.md +117 -11
  2. package/bin/index.js +92 -0
  3. package/package.json +4 -2
  4. package/template/.claude/CLAUDE.md +215 -215
  5. package/template/.claude/agent-memory/analyst/MEMORY.md +20 -20
  6. package/template/.claude/agent-memory/architect/MEMORY.md +20 -20
  7. package/template/.claude/agent-memory/dev/MEMORY.md +20 -20
  8. package/template/.claude/agent-memory/devops/MEMORY.md +20 -20
  9. package/template/.claude/agent-memory/pm/MEMORY.md +20 -20
  10. package/template/.claude/agent-memory/po/MEMORY.md +20 -20
  11. package/template/.claude/agent-memory/qa/MEMORY.md +20 -20
  12. package/template/.claude/agent-memory/reviewer/MEMORY.md +20 -20
  13. package/template/.claude/agent-memory/sm/MEMORY.md +20 -20
  14. package/template/.claude/hooks/enforce-git-push-authority.py +70 -70
  15. package/template/.claude/hooks/metrics-tracker.cjs +65 -0
  16. package/template/.claude/hooks/precompact-session-digest.cjs +87 -87
  17. package/template/.claude/hooks/sql-governance.py +65 -65
  18. package/template/.claude/hooks/synapse-engine.cjs +122 -122
  19. package/template/.claude/hooks/write-path-validation.py +59 -59
  20. package/template/.claude/rules/agent-authority.md +39 -39
  21. package/template/.claude/rules/agent-handoff.md +71 -71
  22. package/template/.claude/rules/agent-memory.md +61 -61
  23. package/template/.claude/rules/ids-principles.md +52 -52
  24. package/template/.claude/rules/mcp-usage.md +49 -49
  25. package/template/.claude/rules/new-project.md +157 -0
  26. package/template/.claude/rules/story-lifecycle.md +87 -87
  27. package/template/.claude/rules/workflow-execution.md +68 -68
  28. package/template/.claude/settings.json +58 -58
  29. package/template/.claude/settings.local.json +14 -14
  30. package/template/.genia/CONSTITUTION.md +129 -129
  31. package/template/.genia/contexts/api-patterns.md +134 -134
  32. package/template/.genia/contexts/nextjs-react.md +210 -210
  33. package/template/.genia/contexts/projeto.md +18 -18
  34. package/template/.genia/contexts/supabase.md +152 -152
  35. package/template/.genia/contexts/whatsapp-cloud.md +176 -176
  36. package/template/.genia/core-config.yaml +192 -192
  37. package/template/.genia/development/agents/analyst.md +138 -138
  38. package/template/.genia/development/agents/architect.md +171 -171
  39. package/template/.genia/development/agents/dev.md +160 -160
  40. package/template/.genia/development/agents/devops.md +200 -200
  41. package/template/.genia/development/agents/pm.md +142 -142
  42. package/template/.genia/development/agents/po.md +165 -165
  43. package/template/.genia/development/agents/qa.md +183 -183
  44. package/template/.genia/development/agents/reviewer.md +198 -198
  45. package/template/.genia/development/agents/sm.md +230 -230
  46. package/template/.genia/development/checklists/architecture-review.md +189 -189
  47. package/template/.genia/development/checklists/pre-commit.md +205 -205
  48. package/template/.genia/development/checklists/pre-deploy.md +230 -230
  49. package/template/.genia/development/checklists/qa-gate.md +216 -216
  50. package/template/.genia/development/checklists/story-dod.md +155 -155
  51. package/template/.genia/development/tasks/code-review.md +197 -197
  52. package/template/.genia/development/tasks/criar-prd.md +170 -170
  53. package/template/.genia/development/tasks/criar-spec.md +188 -188
  54. package/template/.genia/development/tasks/criar-story.md +185 -185
  55. package/template/.genia/development/tasks/debug-sistematico.md +230 -230
  56. package/template/.genia/development/tasks/dev-implement.md +199 -199
  57. package/template/.genia/development/tasks/qa-review.md +224 -224
  58. package/template/.genia/development/workflows/brownfield.md +178 -178
  59. package/template/.genia/development/workflows/delivery.md +208 -208
  60. package/template/.genia/development/workflows/development.md +189 -189
  61. package/template/.genia/development/workflows/greenfield.md +166 -166
  62. package/template/.genia/development/workflows/planning.md +167 -167
  63. package/template/.genia/development/workflows/qa-loop.md +179 -179
  64. package/template/.genia/development/workflows/spec-pipeline.md +192 -192
  65. package/template/.genia/development/workflows/story-development-cycle.md +252 -252
  66. package/template/.genia/guidelines/clean-code.md +98 -98
  67. package/template/.genia/guidelines/testing.md +176 -176
  68. package/template/.genia/skills/design/canvas-design.md +109 -109
  69. package/template/.genia/skills/design/frontend-design.md +140 -140
  70. package/template/.genia/skills/dev/mcp-builder.md +172 -172
  71. package/template/.genia/skills/dev/webapp-testing.md +150 -150
  72. package/template/.genia/skills/documents/docx.md +153 -153
  73. package/template/.genia/skills/documents/pdf.md +134 -134
  74. package/template/.genia/skills/documents/pptx.md +118 -118
  75. package/template/.genia/skills/documents/xlsx.md +140 -140
  76. package/template/.synapse/agent-analyst +8 -8
  77. package/template/.synapse/agent-architect +8 -8
  78. package/template/.synapse/agent-dev +8 -8
  79. package/template/.synapse/agent-devops +8 -8
  80. package/template/.synapse/agent-pm +8 -8
  81. package/template/.synapse/agent-po +7 -7
  82. package/template/.synapse/agent-qa +8 -8
  83. package/template/.synapse/agent-reviewer +7 -7
  84. package/template/.synapse/agent-sm +7 -7
  85. package/template/.synapse/constitution +7 -7
  86. package/template/.synapse/context +8 -8
  87. package/template/.synapse/global +8 -8
  88. package/template/.synapse/manifest +14 -14
  89. package/template/README.md +53 -53
@@ -1,98 +1,98 @@
1
- # Guideline: Clean Code
2
-
3
- > Padroes de codigo pragmaticos - conciso, direto, sem over-engineering.
4
-
5
- ## Principios Core
6
-
7
- | Principio | Regra |
8
- |-----------|-------|
9
- | **SRP** | Single Responsibility - cada funcao/classe faz UMA coisa |
10
- | **DRY** | Don't Repeat Yourself - extrair duplicatas, reusar |
11
- | **KISS** | Keep It Simple - solucao mais simples que funciona |
12
- | **YAGNI** | You Aren't Gonna Need It - nao construir features nao usadas |
13
- | **Boy Scout** | Deixar codigo mais limpo do que encontrou |
14
-
15
- ## Regras de Naming
16
-
17
- | Elemento | Convencao |
18
- |----------|-----------|
19
- | **Variaveis** | Revelar intencao: `userCount` nao `n` |
20
- | **Funcoes** | Verbo + substantivo: `getUserById()` nao `user()` |
21
- | **Booleans** | Forma de pergunta: `isActive`, `hasPermission`, `canEdit` |
22
- | **Constantes** | SCREAMING_SNAKE: `MAX_RETRY_COUNT` |
23
-
24
- > **Regra:** Se voce precisa de um comentario para explicar o nome, renomeie.
25
-
26
- ## Regras de Funcao
27
-
28
- | Regra | Descricao |
29
- |-------|-----------|
30
- | **Pequena** | Max 20 linhas, idealmente 5-10 |
31
- | **Uma Coisa** | Faz uma coisa, faz bem |
32
- | **Um Nivel** | Um nivel de abstracao por funcao |
33
- | **Poucos Args** | Max 3 argumentos, preferir 0-2 |
34
- | **Sem Side Effects** | Nao mutar inputs inesperadamente |
35
-
36
- ## Estrutura de Codigo
37
-
38
- | Padrao | Aplicar |
39
- |--------|---------|
40
- | **Guard Clauses** | Early returns para edge cases |
41
- | **Flat > Nested** | Evitar nesting profundo (max 2 niveis) |
42
- | **Composicao** | Funcoes pequenas compostas |
43
- | **Colocacao** | Manter codigo relacionado proximo |
44
-
45
- ## Estilo de Codigo AI
46
-
47
- | Situacao | Acao |
48
- |----------|------|
49
- | Usuario pede feature | Escrever diretamente |
50
- | Usuario reporta bug | Corrigir, nao explicar |
51
- | Requisito nao claro | Perguntar, nao assumir |
52
-
53
- ## Anti-Patterns
54
-
55
- | NAO Fazer | Fazer |
56
- |-----------|-------|
57
- | Comentar cada linha | Deletar comentarios obvios |
58
- | Helper para one-liner | Inline o codigo |
59
- | Factory para 2 objetos | Instanciacao direta |
60
- | utils.ts com 1 funcao | Colocar onde usado |
61
- | "First we import..." | Apenas escrever codigo |
62
- | Deep nesting | Guard clauses |
63
- | Magic numbers | Named constants |
64
- | God functions | Dividir por responsabilidade |
65
-
66
- ## Antes de Editar Qualquer Arquivo
67
-
68
- | Pergunta | Por que |
69
- |----------|---------|
70
- | **O que importa este arquivo?** | Pode quebrar |
71
- | **O que este arquivo importa?** | Mudanca de interface |
72
- | **Quais testes cobrem isso?** | Testes podem falhar |
73
- | **E um componente compartilhado?** | Multiplos lugares afetados |
74
-
75
- > **Regra:** Editar arquivo + todos dependentes na MESMA tarefa.
76
-
77
- ## Self-Check Antes de Completar
78
-
79
- | Check | Pergunta |
80
- |-------|----------|
81
- | **Objetivo alcancado?** | Fiz exatamente o que usuario pediu? |
82
- | **Arquivos editados?** | Modifiquei todos arquivos necessarios? |
83
- | **Codigo funciona?** | Testei/verifiquei a mudanca? |
84
- | **Sem erros?** | Lint e TypeScript passam? |
85
- | **Nada esquecido?** | Algum edge case perdido? |
86
-
87
- ## Resumo
88
-
89
- | Fazer | Nao Fazer |
90
- |-------|-----------|
91
- | Escrever codigo direto | Escrever tutoriais |
92
- | Deixar codigo se auto-documentar | Adicionar comentarios obvios |
93
- | Corrigir bugs imediatamente | Explicar o fix primeiro |
94
- | Inline coisas pequenas | Criar arquivos desnecessarios |
95
- | Nomear coisas claramente | Usar abreviacoes |
96
- | Manter funcoes pequenas | Escrever funcoes 100+ linhas |
97
-
98
- > **Lembrar: O usuario quer codigo funcionando, nao uma aula de programacao.**
1
+ # Guideline: Clean Code
2
+
3
+ > Padroes de codigo pragmaticos - conciso, direto, sem over-engineering.
4
+
5
+ ## Principios Core
6
+
7
+ | Principio | Regra |
8
+ |-----------|-------|
9
+ | **SRP** | Single Responsibility - cada funcao/classe faz UMA coisa |
10
+ | **DRY** | Don't Repeat Yourself - extrair duplicatas, reusar |
11
+ | **KISS** | Keep It Simple - solucao mais simples que funciona |
12
+ | **YAGNI** | You Aren't Gonna Need It - nao construir features nao usadas |
13
+ | **Boy Scout** | Deixar codigo mais limpo do que encontrou |
14
+
15
+ ## Regras de Naming
16
+
17
+ | Elemento | Convencao |
18
+ |----------|-----------|
19
+ | **Variaveis** | Revelar intencao: `userCount` nao `n` |
20
+ | **Funcoes** | Verbo + substantivo: `getUserById()` nao `user()` |
21
+ | **Booleans** | Forma de pergunta: `isActive`, `hasPermission`, `canEdit` |
22
+ | **Constantes** | SCREAMING_SNAKE: `MAX_RETRY_COUNT` |
23
+
24
+ > **Regra:** Se voce precisa de um comentario para explicar o nome, renomeie.
25
+
26
+ ## Regras de Funcao
27
+
28
+ | Regra | Descricao |
29
+ |-------|-----------|
30
+ | **Pequena** | Max 20 linhas, idealmente 5-10 |
31
+ | **Uma Coisa** | Faz uma coisa, faz bem |
32
+ | **Um Nivel** | Um nivel de abstracao por funcao |
33
+ | **Poucos Args** | Max 3 argumentos, preferir 0-2 |
34
+ | **Sem Side Effects** | Nao mutar inputs inesperadamente |
35
+
36
+ ## Estrutura de Codigo
37
+
38
+ | Padrao | Aplicar |
39
+ |--------|---------|
40
+ | **Guard Clauses** | Early returns para edge cases |
41
+ | **Flat > Nested** | Evitar nesting profundo (max 2 niveis) |
42
+ | **Composicao** | Funcoes pequenas compostas |
43
+ | **Colocacao** | Manter codigo relacionado proximo |
44
+
45
+ ## Estilo de Codigo AI
46
+
47
+ | Situacao | Acao |
48
+ |----------|------|
49
+ | Usuario pede feature | Escrever diretamente |
50
+ | Usuario reporta bug | Corrigir, nao explicar |
51
+ | Requisito nao claro | Perguntar, nao assumir |
52
+
53
+ ## Anti-Patterns
54
+
55
+ | NAO Fazer | Fazer |
56
+ |-----------|-------|
57
+ | Comentar cada linha | Deletar comentarios obvios |
58
+ | Helper para one-liner | Inline o codigo |
59
+ | Factory para 2 objetos | Instanciacao direta |
60
+ | utils.ts com 1 funcao | Colocar onde usado |
61
+ | "First we import..." | Apenas escrever codigo |
62
+ | Deep nesting | Guard clauses |
63
+ | Magic numbers | Named constants |
64
+ | God functions | Dividir por responsabilidade |
65
+
66
+ ## Antes de Editar Qualquer Arquivo
67
+
68
+ | Pergunta | Por que |
69
+ |----------|---------|
70
+ | **O que importa este arquivo?** | Pode quebrar |
71
+ | **O que este arquivo importa?** | Mudanca de interface |
72
+ | **Quais testes cobrem isso?** | Testes podem falhar |
73
+ | **E um componente compartilhado?** | Multiplos lugares afetados |
74
+
75
+ > **Regra:** Editar arquivo + todos dependentes na MESMA tarefa.
76
+
77
+ ## Self-Check Antes de Completar
78
+
79
+ | Check | Pergunta |
80
+ |-------|----------|
81
+ | **Objetivo alcancado?** | Fiz exatamente o que usuario pediu? |
82
+ | **Arquivos editados?** | Modifiquei todos arquivos necessarios? |
83
+ | **Codigo funciona?** | Testei/verifiquei a mudanca? |
84
+ | **Sem erros?** | Lint e TypeScript passam? |
85
+ | **Nada esquecido?** | Algum edge case perdido? |
86
+
87
+ ## Resumo
88
+
89
+ | Fazer | Nao Fazer |
90
+ |-------|-----------|
91
+ | Escrever codigo direto | Escrever tutoriais |
92
+ | Deixar codigo se auto-documentar | Adicionar comentarios obvios |
93
+ | Corrigir bugs imediatamente | Explicar o fix primeiro |
94
+ | Inline coisas pequenas | Criar arquivos desnecessarios |
95
+ | Nomear coisas claramente | Usar abreviacoes |
96
+ | Manter funcoes pequenas | Escrever funcoes 100+ linhas |
97
+
98
+ > **Lembrar: O usuario quer codigo funcionando, nao uma aula de programacao.**
@@ -1,176 +1,176 @@
1
- # Guideline: Testing Patterns
2
-
3
- > Principios para suites de teste confiaveis.
4
-
5
- ## Piramide de Testes
6
-
7
- ```
8
- /\ E2E (Poucos)
9
- / \ Fluxos criticos
10
- /----\
11
- / \ Integration (Alguns)
12
- /--------\ API, DB queries
13
- / \
14
- /------------\ Unit (Muitos)
15
- Funcoes, classes
16
- ```
17
-
18
- ## Padrao AAA
19
-
20
- | Etapa | Proposito |
21
- |-------|-----------|
22
- | **Arrange** | Configurar dados de teste |
23
- | **Act** | Executar codigo sob teste |
24
- | **Assert** | Verificar resultado |
25
-
26
- ## Selecao de Tipo de Teste
27
-
28
- | Tipo | Melhor Para | Velocidade |
29
- |------|-------------|------------|
30
- | **Unit** | Funcoes puras, logica | Rapido (<50ms) |
31
- | **Integration** | API, DB, servicos | Medio |
32
- | **E2E** | Fluxos criticos do usuario | Lento |
33
-
34
- ## Principios de Unit Test
35
-
36
- ### Bons Unit Tests (FIRST)
37
-
38
- | Principio | Significado |
39
- |-----------|-------------|
40
- | Fast | < 100ms cada |
41
- | Isolated | Sem deps externos |
42
- | Repeatable | Mesmo resultado sempre |
43
- | Self-checking | Sem verificacao manual |
44
- | Timely | Escritos com o codigo |
45
-
46
- ### O Que Testar
47
-
48
- | Testar | Nao Testar |
49
- |--------|------------|
50
- | Business logic | Codigo do framework |
51
- | Edge cases | Libs de terceiros |
52
- | Error handling | Getters simples |
53
-
54
- ## Principios de Integration Test
55
-
56
- ### O Que Testar
57
-
58
- | Area | Foco |
59
- |------|------|
60
- | API endpoints | Request/response |
61
- | Database | Queries, transactions |
62
- | External services | Contratos |
63
-
64
- ### Setup/Teardown
65
-
66
- | Fase | Acao |
67
- |------|------|
68
- | Before All | Conectar recursos |
69
- | Before Each | Resetar estado |
70
- | After Each | Limpar |
71
- | After All | Desconectar |
72
-
73
- ## Principios de Mocking
74
-
75
- ### Quando Fazer Mock
76
-
77
- | Mock | Nao Mock |
78
- |------|----------|
79
- | External APIs | Codigo sob teste |
80
- | Database (unit) | Dependencias simples |
81
- | Time/random | Funcoes puras |
82
- | Network | Stores in-memory |
83
-
84
- ### Tipos de Mock
85
-
86
- | Tipo | Uso |
87
- |------|-----|
88
- | Stub | Retornar valores fixos |
89
- | Spy | Rastrear chamadas |
90
- | Mock | Definir expectativas |
91
- | Fake | Implementacao simplificada |
92
-
93
- ## Organizacao de Testes
94
-
95
- ### Naming
96
-
97
- | Padrao | Exemplo |
98
- |--------|---------|
99
- | Should behavior | "should return error when..." |
100
- | When condition | "when user not found..." |
101
- | Given-when-then | "given X, when Y, then Z" |
102
-
103
- ### Agrupamento
104
-
105
- | Nivel | Uso |
106
- |-------|-----|
107
- | describe | Agrupar testes relacionados |
108
- | it/test | Caso individual |
109
- | beforeEach | Setup comum |
110
-
111
- ## Dados de Teste
112
-
113
- ### Estrategias
114
-
115
- | Abordagem | Uso |
116
- |-----------|-----|
117
- | Factories | Gerar dados de teste |
118
- | Fixtures | Datasets predefinidos |
119
- | Builders | Criacao fluente de objetos |
120
-
121
- ### Principios
122
- - Usar dados realistas
123
- - Randomizar valores nao essenciais (faker)
124
- - Compartilhar fixtures comuns
125
- - Manter dados minimos
126
-
127
- ## Best Practices
128
-
129
- | Pratica | Por que |
130
- |---------|---------|
131
- | Um assert por teste | Razao clara de falha |
132
- | Testes independentes | Sem dependencia de ordem |
133
- | Testes rapidos | Rodar frequentemente |
134
- | Nomes descritivos | Auto-documentacao |
135
- | Limpar | Evitar side effects |
136
-
137
- ## Anti-Patterns
138
-
139
- | NAO Fazer | Fazer |
140
- |-----------|-------|
141
- | Testar implementacao | Testar comportamento |
142
- | Duplicar codigo de teste | Usar factories |
143
- | Setup complexo | Simplificar ou dividir |
144
- | Ignorar testes flaky | Corrigir causa raiz |
145
- | Pular cleanup | Resetar estado |
146
-
147
- ## Exemplo de Teste
148
-
149
- ```typescript
150
- describe('UserService', () => {
151
- describe('createUser', () => {
152
- it('should create user with valid data', async () => {
153
- // Arrange
154
- const userData = { name: 'John', email: 'john@test.com' };
155
-
156
- // Act
157
- const user = await userService.createUser(userData);
158
-
159
- // Assert
160
- expect(user.id).toBeDefined();
161
- expect(user.name).toBe('John');
162
- });
163
-
164
- it('should throw error when email is invalid', async () => {
165
- // Arrange
166
- const userData = { name: 'John', email: 'invalid' };
167
-
168
- // Act & Assert
169
- await expect(userService.createUser(userData))
170
- .rejects.toThrow('Invalid email');
171
- });
172
- });
173
- });
174
- ```
175
-
176
- > **Lembrar:** Testes sao documentacao. Se alguem nao consegue entender o que o codigo faz pelos testes, reescreva-os.
1
+ # Guideline: Testing Patterns
2
+
3
+ > Principios para suites de teste confiaveis.
4
+
5
+ ## Piramide de Testes
6
+
7
+ ```
8
+ /\ E2E (Poucos)
9
+ / \ Fluxos criticos
10
+ /----\
11
+ / \ Integration (Alguns)
12
+ /--------\ API, DB queries
13
+ / \
14
+ /------------\ Unit (Muitos)
15
+ Funcoes, classes
16
+ ```
17
+
18
+ ## Padrao AAA
19
+
20
+ | Etapa | Proposito |
21
+ |-------|-----------|
22
+ | **Arrange** | Configurar dados de teste |
23
+ | **Act** | Executar codigo sob teste |
24
+ | **Assert** | Verificar resultado |
25
+
26
+ ## Selecao de Tipo de Teste
27
+
28
+ | Tipo | Melhor Para | Velocidade |
29
+ |------|-------------|------------|
30
+ | **Unit** | Funcoes puras, logica | Rapido (<50ms) |
31
+ | **Integration** | API, DB, servicos | Medio |
32
+ | **E2E** | Fluxos criticos do usuario | Lento |
33
+
34
+ ## Principios de Unit Test
35
+
36
+ ### Bons Unit Tests (FIRST)
37
+
38
+ | Principio | Significado |
39
+ |-----------|-------------|
40
+ | Fast | < 100ms cada |
41
+ | Isolated | Sem deps externos |
42
+ | Repeatable | Mesmo resultado sempre |
43
+ | Self-checking | Sem verificacao manual |
44
+ | Timely | Escritos com o codigo |
45
+
46
+ ### O Que Testar
47
+
48
+ | Testar | Nao Testar |
49
+ |--------|------------|
50
+ | Business logic | Codigo do framework |
51
+ | Edge cases | Libs de terceiros |
52
+ | Error handling | Getters simples |
53
+
54
+ ## Principios de Integration Test
55
+
56
+ ### O Que Testar
57
+
58
+ | Area | Foco |
59
+ |------|------|
60
+ | API endpoints | Request/response |
61
+ | Database | Queries, transactions |
62
+ | External services | Contratos |
63
+
64
+ ### Setup/Teardown
65
+
66
+ | Fase | Acao |
67
+ |------|------|
68
+ | Before All | Conectar recursos |
69
+ | Before Each | Resetar estado |
70
+ | After Each | Limpar |
71
+ | After All | Desconectar |
72
+
73
+ ## Principios de Mocking
74
+
75
+ ### Quando Fazer Mock
76
+
77
+ | Mock | Nao Mock |
78
+ |------|----------|
79
+ | External APIs | Codigo sob teste |
80
+ | Database (unit) | Dependencias simples |
81
+ | Time/random | Funcoes puras |
82
+ | Network | Stores in-memory |
83
+
84
+ ### Tipos de Mock
85
+
86
+ | Tipo | Uso |
87
+ |------|-----|
88
+ | Stub | Retornar valores fixos |
89
+ | Spy | Rastrear chamadas |
90
+ | Mock | Definir expectativas |
91
+ | Fake | Implementacao simplificada |
92
+
93
+ ## Organizacao de Testes
94
+
95
+ ### Naming
96
+
97
+ | Padrao | Exemplo |
98
+ |--------|---------|
99
+ | Should behavior | "should return error when..." |
100
+ | When condition | "when user not found..." |
101
+ | Given-when-then | "given X, when Y, then Z" |
102
+
103
+ ### Agrupamento
104
+
105
+ | Nivel | Uso |
106
+ |-------|-----|
107
+ | describe | Agrupar testes relacionados |
108
+ | it/test | Caso individual |
109
+ | beforeEach | Setup comum |
110
+
111
+ ## Dados de Teste
112
+
113
+ ### Estrategias
114
+
115
+ | Abordagem | Uso |
116
+ |-----------|-----|
117
+ | Factories | Gerar dados de teste |
118
+ | Fixtures | Datasets predefinidos |
119
+ | Builders | Criacao fluente de objetos |
120
+
121
+ ### Principios
122
+ - Usar dados realistas
123
+ - Randomizar valores nao essenciais (faker)
124
+ - Compartilhar fixtures comuns
125
+ - Manter dados minimos
126
+
127
+ ## Best Practices
128
+
129
+ | Pratica | Por que |
130
+ |---------|---------|
131
+ | Um assert por teste | Razao clara de falha |
132
+ | Testes independentes | Sem dependencia de ordem |
133
+ | Testes rapidos | Rodar frequentemente |
134
+ | Nomes descritivos | Auto-documentacao |
135
+ | Limpar | Evitar side effects |
136
+
137
+ ## Anti-Patterns
138
+
139
+ | NAO Fazer | Fazer |
140
+ |-----------|-------|
141
+ | Testar implementacao | Testar comportamento |
142
+ | Duplicar codigo de teste | Usar factories |
143
+ | Setup complexo | Simplificar ou dividir |
144
+ | Ignorar testes flaky | Corrigir causa raiz |
145
+ | Pular cleanup | Resetar estado |
146
+
147
+ ## Exemplo de Teste
148
+
149
+ ```typescript
150
+ describe('UserService', () => {
151
+ describe('createUser', () => {
152
+ it('should create user with valid data', async () => {
153
+ // Arrange
154
+ const userData = { name: 'John', email: 'john@test.com' };
155
+
156
+ // Act
157
+ const user = await userService.createUser(userData);
158
+
159
+ // Assert
160
+ expect(user.id).toBeDefined();
161
+ expect(user.name).toBe('John');
162
+ });
163
+
164
+ it('should throw error when email is invalid', async () => {
165
+ // Arrange
166
+ const userData = { name: 'John', email: 'invalid' };
167
+
168
+ // Act & Assert
169
+ await expect(userService.createUser(userData))
170
+ .rejects.toThrow('Invalid email');
171
+ });
172
+ });
173
+ });
174
+ ```
175
+
176
+ > **Lembrar:** Testes sao documentacao. Se alguem nao consegue entender o que o codigo faz pelos testes, reescreva-os.