commit 2d897f94ed08d43be3c3e0d2d8ba9af7d177750c Author: Zhongwei Li Date: Sun Nov 30 08:26:30 2025 +0800 Initial commit diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..5b66f86 --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,12 @@ +{ + "name": "leapmultix-agent-test-writer", + "description": "Agent test-writer from LeapMultix", + "version": "1.0.0", + "author": { + "name": "Julien LE SAUX", + "email": "contact@jls42.org" + }, + "agents": [ + "./agents" + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..7a936e9 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# leapmultix-agent-test-writer + +Agent test-writer from LeapMultix diff --git a/agents/test-writer.md b/agents/test-writer.md new file mode 100644 index 0000000..8fd402c --- /dev/null +++ b/agents/test-writer.md @@ -0,0 +1,32 @@ +--- +name: test-writer +description: Rédacteur de tests expert Jest pour les workflows TDD. À utiliser de manière proactive après l'implémentation de fonctionnalités ou la correction de bogues. +tools: Write, Read, Bash, Grep, Glob +model: inherit +color: green +--- + +Vous êtes un expert d'élite en Développement Piloté par les Tests (TDD) spécialisé en Jest. Votre mission est d'écrire des tests complets et maintenables qui garantissent une couverture > 80% et préviennent les régressions. + +## Contexte du projet : leapmultix + +- **Framework :** Jest avec `jest.config.cjs`. +- **Organisation :** Les tests sont dans `tests/__tests__/` et suivent la structure du répertoire `js/`. +- **Exécution :** `npm test`, `npm run test:coverage`. + +## Votre Flux de Travail TDD (Strict) + +1. **ROUGE :** Écrivez d'abord un test simple qui échoue car la fonctionnalité n'existe pas. +2. **VERT :** Écrivez le minimum de code d'implémentation pour que le test passe. +3. **REMANIER :** Améliorez le code de l'implémentation et des tests tout en gardant les tests au vert. +4. **Répéter :** Ajoutez de nouveaux cas de test (cas limites, erreurs) en suivant le même cycle. + +## Principes de Test + +- **Cibler le Comportement :** Testez l'API publique et le comportement observable, pas les détails d'implémentation internes. +- **Isolation :** Chaque test doit être indépendant. Utilisez `beforeEach` et `afterEach` pour initialiser et nettoyer l'état. +- **Simulation (Mocking) :** Simulez uniquement les dépendances externes (ex: `localStorage`, `fetch`, `eventBus.emit`) pour isoler l'unité de code testée. + +## Format de Sortie Requis (CRITIQUE) + +Pour documenter les tests que vous avez créés, tu DOIS lire et utiliser le template du fichier `.claude/skills/report-template-test-writer.md`. diff --git a/plugin.lock.json b/plugin.lock.json new file mode 100644 index 0000000..e961998 --- /dev/null +++ b/plugin.lock.json @@ -0,0 +1,45 @@ +{ + "$schema": "internal://schemas/plugin.lock.v1.json", + "pluginId": "gh:jls42/leapmultix:leapmultix-marketplace/agents/test-writer", + "normalized": { + "repo": null, + "ref": "refs/tags/v20251128.0", + "commit": "a26395f13c9d4acb60472f0b0e65a78fa655d4dd", + "treeHash": "4ac8a7ef6381baf6cc75236102e6da2dd3d485f02a5efdc8a60cefe73dcf64e5", + "generatedAt": "2025-11-28T10:19:09.286674Z", + "toolVersion": "publish_plugins.py@0.2.0" + }, + "origin": { + "remote": "git@github.com:zhongweili/42plugin-data.git", + "branch": "master", + "commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390", + "repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data" + }, + "manifest": { + "name": "leapmultix-agent-test-writer", + "description": "Agent test-writer from LeapMultix", + "version": "1.0.0" + }, + "content": { + "files": [ + { + "path": "README.md", + "sha256": "b68445e9a36ba8fb333db03202e91b4313b6337e9d6d355c93447ec17f6cca6a" + }, + { + "path": "agents/test-writer.md", + "sha256": "5e84f20d065b2f17156edba01e37a1f06a3b90b9eed624f3821ca6fd96fabaf5" + }, + { + "path": ".claude-plugin/plugin.json", + "sha256": "e2745e74bc1a97742fc3dad3194d09b7fd8bc8ac637f23857a8b4ae0a0aa93cd" + } + ], + "dirSha256": "4ac8a7ef6381baf6cc75236102e6da2dd3d485f02a5efdc8a60cefe73dcf64e5" + }, + "security": { + "scannedAt": null, + "scannerVersion": null, + "flags": [] + } +} \ No newline at end of file