# Gravl Coding Conventions ## Utvecklingsmetodik ### Red/Green TDD (OBLIGATORISKT) All ny kod måste följa TDD-cykeln: ``` 🔴 RED → 🟢 GREEN → 🔄 REFACTOR ``` #### 1. 🔴 RED - Skriv test först ```javascript // test/feature.test.js describe('Feature', () => { it('should do expected behavior', async () => { const result = await feature.doSomething(); expect(result).toBe(expected); }); }); ``` **Kör testet - det MÅSTE faila!** ```bash npm test -- --grep "Feature" # ❌ FAIL (detta är rätt!) ``` #### 2. 🟢 GREEN - Minimal implementation Skriv bara tillräckligt med kod för att testet passerar: ```javascript // src/feature.js export function doSomething() { return expected; // Minimal lösning } ``` **Kör testet igen:** ```bash npm test -- --grep "Feature" # ✅ PASS ``` #### 3. 🔄 REFACTOR - Förbättra Nu kan du: - Refaktorera för clean code - Extrahera funktioner - Förbättra namngivning - Ta bort duplicering **Kör testerna kontinuerligt:** ```bash npm test # ✅ Alla test måste fortfarande passa ``` --- ## Teststruktur ``` /workspace/gravl/ ├── src/ │ └── components/ ├── server/ │ └── routes/ └── test/ ├── unit/ # Enhetstester ├── integration/ # API-tester └── e2e/ # End-to-end ``` ## Namnkonventioner ### Tester - `[feature].test.js` - Unit tests - `[feature].integration.test.js` - Integration tests - Describe-block: Noun (vad testas) - It-block: "should [verb] [expected outcome]" ### Commits ``` test: add failing test for [feature] feat: implement [feature] to pass tests refactor: clean up [feature] implementation ``` --- ## Workflow för kodningsagenter 1. **Få uppgift** från Gravl PM 2. **Läs spec** i docs/current-task.md 3. **Skriv failing test** - visa PM 4. **Implementera** tills test passerar 5. **Refaktorera** om nödvändigt 6. **Commit** med rätt prefix 7. **Rapportera** till PM --- *Uppdaterad: 2026-02-28*