{"id":50573469,"url":"https://github.com/jdevelop-io/exercises-tdd","last_synced_at":"2026-06-04T20:30:21.217Z","repository":{"id":352284228,"uuid":"1214553006","full_name":"jdevelop-io/exercises-tdd","owner":"jdevelop-io","description":"Starter code pour la formation JDevelop : TDD, concevoir par les tests.","archived":false,"fork":false,"pushed_at":"2026-04-18T19:05:34.000Z","size":31,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-18T21:10:32.862Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jdevelop-io.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-18T18:24:38.000Z","updated_at":"2026-04-18T19:05:37.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jdevelop-io/exercises-tdd","commit_stats":null,"previous_names":["jdevelop-io/exercises-tdd"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/jdevelop-io/exercises-tdd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdevelop-io%2Fexercises-tdd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdevelop-io%2Fexercises-tdd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdevelop-io%2Fexercises-tdd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdevelop-io%2Fexercises-tdd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jdevelop-io","download_url":"https://codeload.github.com/jdevelop-io/exercises-tdd/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdevelop-io%2Fexercises-tdd/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33917202,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-04T02:00:06.755Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-04T20:30:20.408Z","updated_at":"2026-06-04T20:30:21.201Z","avatar_url":"https://github.com/jdevelop-io.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# exercises-tdd\n\n[![CI](https://github.com/jdevelop-io/exercises-tdd/actions/workflows/ci.yml/badge.svg)](https://github.com/jdevelop-io/exercises-tdd/actions/workflows/ci.yml)\n\nStarter code pour les ateliers de la formation **JDevelop : TDD, concevoir par les tests**.\n\n## À quoi ça sert\n\nCe repo contient le code de départ des 3 ateliers pratiques de la formation TDD. Tu le clones au début de chaque session et tu codes en TDD strict dans ton IDE.\n\nChaque atelier démarre avec un placeholder qui sera remplacé par tes propres tests et ton code, en suivant la discipline Red, Green, Refactor.\n\n## Prérequis\n\n- PHP 8.2 ou supérieur\n- [Composer 2](https://getcomposer.org/)\n- Un IDE PHP (PHPStorm, VSCode avec PHP Intelephense, ou équivalent)\n- Avoir suivi la formation **JDevelop : Les fondamentaux des tests automatisés** (ou maitriser PHPUnit, AAA et la dependency injection)\n\nVérifie ta version de PHP :\n\n    php --version\n\nSi tu es en dessous de 8.2, mets à jour avant la formation.\n\n## Installation\n\n    git clone https://github.com/jdevelop-io/exercises-tdd.git\n    cd exercises-tdd\n    composer install\n\nVérifie que PHPUnit est bien installé :\n\n    ./vendor/bin/phpunit --version\n\nTu dois voir quelque chose comme `PHPUnit 10.5.x`.\n\n## Les 3 ateliers\n\n### Session 1 : atelier `s1-fizzbuzz`\n\nObjectif : maitriser la discipline du cycle Red, Green, Refactor sur un kata simple. 1 test = 1 comportement, refactor visible à chaque étape, pas de code spéculatif.\n\nTu crées la classe FizzBuzz dans `s1-fizzbuzz/src/FizzBuzz.php` et tu écris tes tests dans `s1-fizzbuzz/tests/FizzBuzzTest.php`.\n\nLancer les tests :\n\n    ./vendor/bin/phpunit --testsuite s1-fizzbuzz\n\n### Session 2 : atelier `s2-bank-account`\n\nObjectif : implémenter une feature complète (compte bancaire avec transferts) en TDD strict, en suivant l'architecture hexagonale (ports et adapters). Le domaine ne connait pas la persistance, le use case orchestre via une interface.\n\nLe squelette fourni :\n- `s2-bank-account/src/Account.php` : entité de domaine (à étoffer)\n- `s2-bank-account/src/AccountRepository.php` : port (interface)\n\nTu crées les use cases, l'implémentation in-memory du repository, et les tests.\n\nLancer les tests :\n\n    ./vendor/bin/phpunit --testsuite s2-bank-account\n\n### Session 3 : atelier `s3-gildedrose`\n\nObjectif : reprendre du code legacy (le célèbre kata GildedRose d'Emily Bache, adapté), le sécuriser par des tests de caractérisation, le refactorer, puis ajouter une nouvelle feature en TDD.\n\nLis attentivement les règles dans `s3-gildedrose/README.md` avant de commencer. Le fichier `Program.php` te permet de visualiser le comportement actuel.\n\n**Contrainte du kata** : tu ne peux pas modifier `Item.php` (la classe est utilisée par un système Goblin externe).\n\nLancer la démo (30 jours par défaut, ou N jours en argument) :\n\n    php s3-gildedrose/src/Program.php\n    php s3-gildedrose/src/Program.php 7\n\nLancer les tests :\n\n    ./vendor/bin/phpunit --testsuite s3-gildedrose\n\n## Lancer tous les tests\n\n    ./vendor/bin/phpunit\n\n## Solutions de référence\n\nLes solutions complètes vivent sur des branches dédiées :\n\n- `solutions/s1` : FizzBuzz résolu en 8 tests\n- `solutions/s2` : BankAccount avec hexagonal complet (TransferUseCase, InMemoryAccountRepository, exceptions domaine)\n- `solutions/s3` : GildedRose refactoré avec Strategy pattern, tests de caractérisation, support Conjured items\n\nPour consulter une solution :\n\n    git fetch origin\n    git checkout solutions/s1\n    ./vendor/bin/phpunit --testsuite s1-fizzbuzz\n\nReviens sur `main` :\n\n    git checkout main\n\n**Joue le jeu** : essaie d'écrire la solution toi-même avant de regarder la branche. Le TDD ne s'apprend qu'en pratiquant.\n\n## Licence\n\nMIT. Voir [LICENSE](./LICENSE).\n\nCe repo fait partie de la formation **JDevelop : TDD, concevoir par les tests**. Plus d'infos sur [jdevelop.io](https://jdevelop.io).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdevelop-io%2Fexercises-tdd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjdevelop-io%2Fexercises-tdd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdevelop-io%2Fexercises-tdd/lists"}