From e6e59922121f454d2283512c64896cc6f115bbf4 Mon Sep 17 00:00:00 2001 From: Yoan Thirion Date: Thu, 16 Nov 2023 20:46:44 +0100 Subject: [PATCH 01/14] add kt et java --- .github/workflows/{build.yml => c#.yml} | 12 +- .github/workflows/java.yml | 21 + .github/workflows/kotlin.yml | 23 + .gitignore | 63 +- README.md | 23 +- .../Bouchonnois.Tests.csproj | 0 .../PartieDeChasseRepositoryForTests.cs | 0 .../Service/PartieDeChasseServiceTests.cs | 0 .../Service/ScenarioTests.cs | 0 .../Bouchonnois.Tests}/Usings.cs | 0 Bouchonnois.sln => c#/Bouchonnois.sln | 0 .../Bouchonnois}/Bouchonnois.csproj | 0 .../Bouchonnois}/Domain/Chasseur.cs | 0 .../Bouchonnois}/Domain/Event.cs | 0 .../Bouchonnois}/Domain/PartieDeChasse.cs | 0 .../Bouchonnois}/Domain/PartieStatus.cs | 0 .../Repository/IPartieDeChasseRepository.cs | 0 .../Service/Exceptions/ChasseurInconnu.cs | 0 ...marrerUnePartieAvecUnChasseurSansBalle.cs" | 0 ...DeD\303\251marrerUnePartieSansChasseur.cs" | 0 ...D\303\251marrerUnePartieSansGalinettes.cs" | 0 .../LaChasseEstD\303\251j\303\240EnCours.cs" | 0 .../Exceptions/LaPartieDeChasseNexistePas.cs | 0 ...j\303\240EnTrainDePrendreLap\303\251ro.cs" | 0 ...3\251roQuandLaPartieEstTermin\303\251e.cs" | 0 ...asPendantLap\303\251roCestSacr\303\251.cs" | 0 ...TirePasQuandLaPartieEstTermin\303\251e.cs" | 0 .../Exceptions/QuandCestFiniCestFini.cs | 0 .../TasPlusDeBallesMonVieuxChasseALaMain.cs | 0 ...ol\303\251MonVieuxTasRienTouch\303\251.cs" | 0 .../Service/PartieDeChasseService.cs | 0 .../Bouchonnois}/Service/Terrain.cs | 0 java/pom.xml | 47 + .../java/bouchonnois/domain/Chasseur.java | 10 + .../main/java/bouchonnois/domain/Event.java | 11 + .../bouchonnois/domain/PartieDeChasse.java | 16 + .../java/bouchonnois/domain/PartieStatus.java | 5 + .../repository/PartieDeChasseRepository.java | 11 + .../service/PartieDeChasseService.java | 251 +++ .../java/bouchonnois/service/Terrain.java | 9 + .../service/exceptions/ChasseurInconnu.java | 7 + ...rrerUnePartieAvecUnChasseurSansBalle.java" | 4 + ...D\303\251marrerUnePartieSansChasseur.java" | 4 + ...303\251marrerUnePartieSansGalinettes.java" | 5 + .../LaChasseEstD\303\251jaEnCours.java" | 4 + .../LaPartieDeChasseNexistePas.java | 4 + ...3\251jaEnTrainDePrendreLap\303\251ro.java" | 4 + ...251roQuandLaPartieEstTermin\303\251e.java" | 4 + ...PendantLap\303\251roCestSacr\303\251.java" | 4 + .../OnTirePasQuandLaPartieEstTerminee.java | 4 + .../exceptions/QuandCestFiniCestFini.java | 4 + .../TasPlusDeBallesMonVieuxChasseALaMain.java | 4 + .../TasTropPicoledMonVieuxTasRienTouche.java | 4 + .../PartieDeChasseRepositoryForTests.java | 30 + .../service/PartieDeChasseServiceTests.java | 1257 +++++++++++++++ .../tests/service/ScenarioTests.java | 120 ++ kotlin/.gitignore | 42 + kotlin/build.gradle.kts | 27 + kotlin/gradle.properties | 1 + kotlin/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 60756 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kotlin/gradlew | 234 +++ kotlin/gradlew.bat | 89 ++ kotlin/settings.gradle.kts | 12 + .../kotlin/bouchonnois/domain/Chasseur.kt | 7 + .../main/kotlin/bouchonnois/domain/Event.kt | 10 + .../bouchonnois/domain/PartieDeChasse.kt | 12 + .../kotlin/bouchonnois/domain/PartieStatus.kt | 8 + .../repository/PartieDeChasseRepository.kt | 9 + .../service/PartieDeChasseService.kt | 249 +++ .../kotlin/bouchonnois/service/Terrain.kt | 6 + .../service/exceptions/ChasseurInconnu.kt | 4 + ...marrerUnePartieAvecUnChasseurSansBalle.kt" | 4 + ...DeD\303\251marrerUnePartieSansChasseur.kt" | 3 + ...D\303\251marrerUnePartieSansGalinettes.kt" | 4 + .../LaChasseEstD\303\251jaEnCours.kt" | 4 + .../exceptions/LaPartieDeChasseNexistePas.kt | 4 + ...303\251jaEnTrainDePrendreLap\303\251ro.kt" | 3 + ...3\251roQuandLaPartieEstTermin\303\251e.kt" | 3 + ...asPendantLap\303\251roCestSacr\303\251.kt" | 4 + .../OnTirePasQuandLaPartieEstTerminee.kt | 3 + .../exceptions/QuandCestFiniCestFini.kt | 4 + .../TasPlusDeBallesMonVieuxChasseALaMain.kt | 3 + .../TasTropPicoledMonVieuxTasRienTouche.kt | 4 + .../PartieDeChasseRepositoryForTests.kt | 22 + .../service/PartieDeChasseServiceTests.kt | 1341 +++++++++++++++++ .../tests/service/ScenarioTests.kt | 113 ++ 87 files changed, 4182 insertions(+), 17 deletions(-) rename .github/workflows/{build.yml => c#.yml} (88%) create mode 100644 .github/workflows/java.yml create mode 100644 .github/workflows/kotlin.yml rename {Bouchonnois.Tests => c#/Bouchonnois.Tests}/Bouchonnois.Tests.csproj (100%) rename {Bouchonnois.Tests => c#/Bouchonnois.Tests}/Doubles/PartieDeChasseRepositoryForTests.cs (100%) rename {Bouchonnois.Tests => c#/Bouchonnois.Tests}/Service/PartieDeChasseServiceTests.cs (100%) rename {Bouchonnois.Tests => c#/Bouchonnois.Tests}/Service/ScenarioTests.cs (100%) rename {Bouchonnois.Tests => c#/Bouchonnois.Tests}/Usings.cs (100%) rename Bouchonnois.sln => c#/Bouchonnois.sln (100%) rename {Bouchonnois => c#/Bouchonnois}/Bouchonnois.csproj (100%) rename {Bouchonnois => c#/Bouchonnois}/Domain/Chasseur.cs (100%) rename {Bouchonnois => c#/Bouchonnois}/Domain/Event.cs (100%) rename {Bouchonnois => c#/Bouchonnois}/Domain/PartieDeChasse.cs (100%) rename {Bouchonnois => c#/Bouchonnois}/Domain/PartieStatus.cs (100%) rename {Bouchonnois => c#/Bouchonnois}/Repository/IPartieDeChasseRepository.cs (100%) rename {Bouchonnois => c#/Bouchonnois}/Service/Exceptions/ChasseurInconnu.cs (100%) rename "Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.cs" => "c#/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.cs" (100%) rename "Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.cs" => "c#/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.cs" (100%) rename "Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.cs" => "c#/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.cs" (100%) rename "Bouchonnois/Service/Exceptions/LaChasseEstD\303\251j\303\240EnCours.cs" => "c#/Bouchonnois/Service/Exceptions/LaChasseEstD\303\251j\303\240EnCours.cs" (100%) rename {Bouchonnois => c#/Bouchonnois}/Service/Exceptions/LaPartieDeChasseNexistePas.cs (100%) rename "Bouchonnois/Service/Exceptions/OnEstD\303\251j\303\240EnTrainDePrendreLap\303\251ro.cs" => "c#/Bouchonnois/Service/Exceptions/OnEstD\303\251j\303\240EnTrainDePrendreLap\303\251ro.cs" (100%) rename "Bouchonnois/Service/Exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.cs" => "c#/Bouchonnois/Service/Exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.cs" (100%) rename "Bouchonnois/Service/Exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.cs" => "c#/Bouchonnois/Service/Exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.cs" (100%) rename "Bouchonnois/Service/Exceptions/OnTirePasQuandLaPartieEstTermin\303\251e.cs" => "c#/Bouchonnois/Service/Exceptions/OnTirePasQuandLaPartieEstTermin\303\251e.cs" (100%) rename {Bouchonnois => c#/Bouchonnois}/Service/Exceptions/QuandCestFiniCestFini.cs (100%) rename {Bouchonnois => c#/Bouchonnois}/Service/Exceptions/TasPlusDeBallesMonVieuxChasseALaMain.cs (100%) rename "Bouchonnois/Service/Exceptions/TasTropPicol\303\251MonVieuxTasRienTouch\303\251.cs" => "c#/Bouchonnois/Service/Exceptions/TasTropPicol\303\251MonVieuxTasRienTouch\303\251.cs" (100%) rename {Bouchonnois => c#/Bouchonnois}/Service/PartieDeChasseService.cs (100%) rename {Bouchonnois => c#/Bouchonnois}/Service/Terrain.cs (100%) create mode 100644 java/pom.xml create mode 100644 java/src/main/java/bouchonnois/domain/Chasseur.java create mode 100644 java/src/main/java/bouchonnois/domain/Event.java create mode 100644 java/src/main/java/bouchonnois/domain/PartieDeChasse.java create mode 100644 java/src/main/java/bouchonnois/domain/PartieStatus.java create mode 100644 java/src/main/java/bouchonnois/repository/PartieDeChasseRepository.java create mode 100644 java/src/main/java/bouchonnois/service/PartieDeChasseService.java create mode 100644 java/src/main/java/bouchonnois/service/Terrain.java create mode 100644 java/src/main/java/bouchonnois/service/exceptions/ChasseurInconnu.java create mode 100644 "java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.java" create mode 100644 "java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.java" create mode 100644 "java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.java" create mode 100644 "java/src/main/java/bouchonnois/service/exceptions/LaChasseEstD\303\251jaEnCours.java" create mode 100644 java/src/main/java/bouchonnois/service/exceptions/LaPartieDeChasseNexistePas.java create mode 100644 "java/src/main/java/bouchonnois/service/exceptions/OnEstD\303\251jaEnTrainDePrendreLap\303\251ro.java" create mode 100644 "java/src/main/java/bouchonnois/service/exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.java" create mode 100644 "java/src/main/java/bouchonnois/service/exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.java" create mode 100644 java/src/main/java/bouchonnois/service/exceptions/OnTirePasQuandLaPartieEstTerminee.java create mode 100644 java/src/main/java/bouchonnois/service/exceptions/QuandCestFiniCestFini.java create mode 100644 java/src/main/java/bouchonnois/service/exceptions/TasPlusDeBallesMonVieuxChasseALaMain.java create mode 100644 java/src/main/java/bouchonnois/service/exceptions/TasTropPicoledMonVieuxTasRienTouche.java create mode 100644 java/src/test/java/bouchonnois/tests/doubles/PartieDeChasseRepositoryForTests.java create mode 100644 java/src/test/java/bouchonnois/tests/service/PartieDeChasseServiceTests.java create mode 100644 java/src/test/java/bouchonnois/tests/service/ScenarioTests.java create mode 100644 kotlin/.gitignore create mode 100644 kotlin/build.gradle.kts create mode 100644 kotlin/gradle.properties create mode 100644 kotlin/gradle/wrapper/gradle-wrapper.jar create mode 100644 kotlin/gradle/wrapper/gradle-wrapper.properties create mode 100755 kotlin/gradlew create mode 100644 kotlin/gradlew.bat create mode 100644 kotlin/settings.gradle.kts create mode 100644 kotlin/src/main/kotlin/bouchonnois/domain/Chasseur.kt create mode 100644 kotlin/src/main/kotlin/bouchonnois/domain/Event.kt create mode 100644 kotlin/src/main/kotlin/bouchonnois/domain/PartieDeChasse.kt create mode 100644 kotlin/src/main/kotlin/bouchonnois/domain/PartieStatus.kt create mode 100644 kotlin/src/main/kotlin/bouchonnois/repository/PartieDeChasseRepository.kt create mode 100644 kotlin/src/main/kotlin/bouchonnois/service/PartieDeChasseService.kt create mode 100644 kotlin/src/main/kotlin/bouchonnois/service/Terrain.kt create mode 100644 kotlin/src/main/kotlin/bouchonnois/service/exceptions/ChasseurInconnu.kt create mode 100644 "kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.kt" create mode 100644 "kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.kt" create mode 100644 "kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.kt" create mode 100644 "kotlin/src/main/kotlin/bouchonnois/service/exceptions/LaChasseEstD\303\251jaEnCours.kt" create mode 100644 kotlin/src/main/kotlin/bouchonnois/service/exceptions/LaPartieDeChasseNexistePas.kt create mode 100644 "kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnEstD\303\251jaEnTrainDePrendreLap\303\251ro.kt" create mode 100644 "kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.kt" create mode 100644 "kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.kt" create mode 100644 kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnTirePasQuandLaPartieEstTerminee.kt create mode 100644 kotlin/src/main/kotlin/bouchonnois/service/exceptions/QuandCestFiniCestFini.kt create mode 100644 kotlin/src/main/kotlin/bouchonnois/service/exceptions/TasPlusDeBallesMonVieuxChasseALaMain.kt create mode 100644 kotlin/src/main/kotlin/bouchonnois/service/exceptions/TasTropPicoledMonVieuxTasRienTouche.kt create mode 100644 kotlin/src/test/kotlin/bouchonnois/tests/doubles/PartieDeChasseRepositoryForTests.kt create mode 100644 kotlin/src/test/kotlin/bouchonnois/tests/service/PartieDeChasseServiceTests.kt create mode 100644 kotlin/src/test/kotlin/bouchonnois/tests/service/ScenarioTests.kt diff --git a/.github/workflows/build.yml b/.github/workflows/c#.yml similarity index 88% rename from .github/workflows/build.yml rename to .github/workflows/c#.yml index 90a2bcc..1db772e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/c#.yml @@ -20,11 +20,11 @@ jobs: name: Build and analyze runs-on: windows-latest steps: - - name: Set up JDK 11 + - name: Set up JDK 17 uses: actions/setup-java@v3 with: - java-version: 11 - distribution: 'zulu' # Alternative distribution options are available. + java-version: 17 + distribution: 'zulu' - uses: actions/checkout@v3 with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis @@ -55,6 +55,6 @@ jobs: run: | dotnet tool install --global dotnet-coverage .\.sonar\scanner\dotnet-sonarscanner begin /k:"ythirion_refactoring-du-bouchonnois" /o:"ythirion" /d:sonar.login="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.vscoveragexml.reportsPaths=coverage.xml - dotnet build - dotnet-coverage collect "dotnet test" -f xml -o "coverage.xml" - .\.sonar\scanner\dotnet-sonarscanner end /d:sonar.login="${{ secrets.SONAR_TOKEN }}" + dotnet build c#/ + dotnet-coverage collect "dotnet test c#/" -f xml -o "coverage.xml" + .\.sonar\scanner\dotnet-sonarscanner end /d:sonar.login="${{ secrets.SONAR_TOKEN }}" \ No newline at end of file diff --git a/.github/workflows/java.yml b/.github/workflows/java.yml new file mode 100644 index 0000000..7b62f26 --- /dev/null +++ b/.github/workflows/java.yml @@ -0,0 +1,21 @@ +name: Java CI +on: + push: + branches: [ main ] +jobs: + build: + name: Build + strategy: + matrix: + platform: [ubuntu-latest] + runs-on: ${{matrix.platform}} + steps: + - uses: actions/checkout@v3 + - name: Set up JDK 21 + uses: actions/setup-java@v3 + with: + java-version: '21' + distribution: 'zulu' + - name: Build and Test + working-directory: ./java + run: mvn test diff --git a/.github/workflows/kotlin.yml b/.github/workflows/kotlin.yml new file mode 100644 index 0000000..95b92fe --- /dev/null +++ b/.github/workflows/kotlin.yml @@ -0,0 +1,23 @@ +name: Kotlin CI +on: + push: + branches: [ main ] +jobs: + build: + name: Build + strategy: + matrix: + platform: [ubuntu-latest] + runs-on: ${{matrix.platform}} + steps: + - uses: actions/checkout@v3 + - name: Set up JDK 21 + uses: actions/setup-java@v3 + with: + java-version: '21' + distribution: 'zulu' + - name: Setup Gradle + uses: gradle/gradle-build-action@v2 + with: + arguments: build + build-root-directory: ./kotlin diff --git a/.gitignore b/.gitignore index 8bbfd35..5c16ebe 100644 --- a/.gitignore +++ b/.gitignore @@ -352,4 +352,65 @@ MigrationBackup/ target/ # Mac -.DS_Store \ No newline at end of file +.DS_Store + +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store + +.gradle +**/build/ +!src/**/build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Avoid ignore Gradle wrappper properties +!gradle-wrapper.properties + +# Cache of project +.gradletasknamecache + +# Eclipse Gradle plugin generated files +# Eclipse Core +.project +# JDT-specific (Eclipse Java Development Tools) +.classpath \ No newline at end of file diff --git a/README.md b/README.md index 02fcb48..bd9b138 100644 --- a/README.md +++ b/README.md @@ -29,16 +29,19 @@ Version PDF disponible [ici](example-mapping/example-mapping.pdf) ## Facilitation ### Pré-requis -Le code est disponible en `.NET 7`. +Le code est disponible en `C#` (`.NET 7`), `java`(21), `kotlin`. -Voici la liste des packages utilisés : -- `xUnit` -- `FluentAssertions` -- `Verify.xUnit` -- `FSCheck` -- `TngTech.ArchUnitNET.xUnit` -- `LanguageExt.Core` -- `FluentAssertions.LanguageExt` +Voici la liste des librairies utilisés / recommandées : + +| .NET | Java | Kotlin | +|-----------------------------------------------------------------------------------------------|--------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------| +| [`xUnit`](https://xunit.net/) | [`junit`](https://junit.org/junit5/) | [`Kotest`](https://kotest.io/) | +| [`FluentAssertions`](https://fluentassertions.com/) | [`assertJ`](https://joel-costigliola.github.io/assertj/) | Native `kotest` asertions | +| [`Verify.xUnit`](https://github.com/VerifyTests/Verify) | [`approvalTests`](https://github.com/approvals/approvaltests.java) | [`approvalTests`](https://github.com/approvals/approvaltests.java) | +| [`FSCheck`](https://fscheck.github.io/FsCheck/) | [`vavr-test`](https://github.com/vavr-io/vavr-test) | [`kotest-property`](https://kotest.io/docs/proptest/property-based-testing.html) | +| [`TngTech.ArchUnitNET.xUnit`](https://archunitnet.readthedocs.io/en/latest/) | [`archunit`](https://www.archunit.org/) | [`archunit`](https://www.archunit.org/) | +| [`LanguageExt.Core`](https://github.com/louthy/language-ext) | [`vavr`](https://www.vavr.io/) | [`arrow-kt`](https://arrow-kt.io/) | +| [`FluentAssertions.LanguageExt`](https://www.nuget.org/packages/FluentAssertions.LanguageExt) | [`assertj-vavr`](https://github.com/assertj/assertj-vavr) | [`kotest-extensions-arrow`](https://github.com/kotest/kotest-extensions-arrow#kotest-extensions-arrow) | Afin d'améliorer le code on te propose de suivre les étapes ci-dessous : @@ -56,7 +59,7 @@ Afin d'améliorer le code on te propose de suivre les étapes ci-dessous : - [12. Event Sourcing](facilitation/12.event-sourcing.md) Pour chaque étape : -- une proposition de solution "étape par étape" est proposée +- une proposition de solution "étape par étape" est proposée (en `C#` uniquement) - il existe 1 branche / étape ![Branches](img/branches.webp) diff --git a/Bouchonnois.Tests/Bouchonnois.Tests.csproj b/c#/Bouchonnois.Tests/Bouchonnois.Tests.csproj similarity index 100% rename from Bouchonnois.Tests/Bouchonnois.Tests.csproj rename to c#/Bouchonnois.Tests/Bouchonnois.Tests.csproj diff --git a/Bouchonnois.Tests/Doubles/PartieDeChasseRepositoryForTests.cs b/c#/Bouchonnois.Tests/Doubles/PartieDeChasseRepositoryForTests.cs similarity index 100% rename from Bouchonnois.Tests/Doubles/PartieDeChasseRepositoryForTests.cs rename to c#/Bouchonnois.Tests/Doubles/PartieDeChasseRepositoryForTests.cs diff --git a/Bouchonnois.Tests/Service/PartieDeChasseServiceTests.cs b/c#/Bouchonnois.Tests/Service/PartieDeChasseServiceTests.cs similarity index 100% rename from Bouchonnois.Tests/Service/PartieDeChasseServiceTests.cs rename to c#/Bouchonnois.Tests/Service/PartieDeChasseServiceTests.cs diff --git a/Bouchonnois.Tests/Service/ScenarioTests.cs b/c#/Bouchonnois.Tests/Service/ScenarioTests.cs similarity index 100% rename from Bouchonnois.Tests/Service/ScenarioTests.cs rename to c#/Bouchonnois.Tests/Service/ScenarioTests.cs diff --git a/Bouchonnois.Tests/Usings.cs b/c#/Bouchonnois.Tests/Usings.cs similarity index 100% rename from Bouchonnois.Tests/Usings.cs rename to c#/Bouchonnois.Tests/Usings.cs diff --git a/Bouchonnois.sln b/c#/Bouchonnois.sln similarity index 100% rename from Bouchonnois.sln rename to c#/Bouchonnois.sln diff --git a/Bouchonnois/Bouchonnois.csproj b/c#/Bouchonnois/Bouchonnois.csproj similarity index 100% rename from Bouchonnois/Bouchonnois.csproj rename to c#/Bouchonnois/Bouchonnois.csproj diff --git a/Bouchonnois/Domain/Chasseur.cs b/c#/Bouchonnois/Domain/Chasseur.cs similarity index 100% rename from Bouchonnois/Domain/Chasseur.cs rename to c#/Bouchonnois/Domain/Chasseur.cs diff --git a/Bouchonnois/Domain/Event.cs b/c#/Bouchonnois/Domain/Event.cs similarity index 100% rename from Bouchonnois/Domain/Event.cs rename to c#/Bouchonnois/Domain/Event.cs diff --git a/Bouchonnois/Domain/PartieDeChasse.cs b/c#/Bouchonnois/Domain/PartieDeChasse.cs similarity index 100% rename from Bouchonnois/Domain/PartieDeChasse.cs rename to c#/Bouchonnois/Domain/PartieDeChasse.cs diff --git a/Bouchonnois/Domain/PartieStatus.cs b/c#/Bouchonnois/Domain/PartieStatus.cs similarity index 100% rename from Bouchonnois/Domain/PartieStatus.cs rename to c#/Bouchonnois/Domain/PartieStatus.cs diff --git a/Bouchonnois/Repository/IPartieDeChasseRepository.cs b/c#/Bouchonnois/Repository/IPartieDeChasseRepository.cs similarity index 100% rename from Bouchonnois/Repository/IPartieDeChasseRepository.cs rename to c#/Bouchonnois/Repository/IPartieDeChasseRepository.cs diff --git a/Bouchonnois/Service/Exceptions/ChasseurInconnu.cs b/c#/Bouchonnois/Service/Exceptions/ChasseurInconnu.cs similarity index 100% rename from Bouchonnois/Service/Exceptions/ChasseurInconnu.cs rename to c#/Bouchonnois/Service/Exceptions/ChasseurInconnu.cs diff --git "a/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.cs" "b/c#/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.cs" similarity index 100% rename from "Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.cs" rename to "c#/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.cs" diff --git "a/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.cs" "b/c#/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.cs" similarity index 100% rename from "Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.cs" rename to "c#/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.cs" diff --git "a/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.cs" "b/c#/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.cs" similarity index 100% rename from "Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.cs" rename to "c#/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.cs" diff --git "a/Bouchonnois/Service/Exceptions/LaChasseEstD\303\251j\303\240EnCours.cs" "b/c#/Bouchonnois/Service/Exceptions/LaChasseEstD\303\251j\303\240EnCours.cs" similarity index 100% rename from "Bouchonnois/Service/Exceptions/LaChasseEstD\303\251j\303\240EnCours.cs" rename to "c#/Bouchonnois/Service/Exceptions/LaChasseEstD\303\251j\303\240EnCours.cs" diff --git a/Bouchonnois/Service/Exceptions/LaPartieDeChasseNexistePas.cs b/c#/Bouchonnois/Service/Exceptions/LaPartieDeChasseNexistePas.cs similarity index 100% rename from Bouchonnois/Service/Exceptions/LaPartieDeChasseNexistePas.cs rename to c#/Bouchonnois/Service/Exceptions/LaPartieDeChasseNexistePas.cs diff --git "a/Bouchonnois/Service/Exceptions/OnEstD\303\251j\303\240EnTrainDePrendreLap\303\251ro.cs" "b/c#/Bouchonnois/Service/Exceptions/OnEstD\303\251j\303\240EnTrainDePrendreLap\303\251ro.cs" similarity index 100% rename from "Bouchonnois/Service/Exceptions/OnEstD\303\251j\303\240EnTrainDePrendreLap\303\251ro.cs" rename to "c#/Bouchonnois/Service/Exceptions/OnEstD\303\251j\303\240EnTrainDePrendreLap\303\251ro.cs" diff --git "a/Bouchonnois/Service/Exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.cs" "b/c#/Bouchonnois/Service/Exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.cs" similarity index 100% rename from "Bouchonnois/Service/Exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.cs" rename to "c#/Bouchonnois/Service/Exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.cs" diff --git "a/Bouchonnois/Service/Exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.cs" "b/c#/Bouchonnois/Service/Exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.cs" similarity index 100% rename from "Bouchonnois/Service/Exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.cs" rename to "c#/Bouchonnois/Service/Exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.cs" diff --git "a/Bouchonnois/Service/Exceptions/OnTirePasQuandLaPartieEstTermin\303\251e.cs" "b/c#/Bouchonnois/Service/Exceptions/OnTirePasQuandLaPartieEstTermin\303\251e.cs" similarity index 100% rename from "Bouchonnois/Service/Exceptions/OnTirePasQuandLaPartieEstTermin\303\251e.cs" rename to "c#/Bouchonnois/Service/Exceptions/OnTirePasQuandLaPartieEstTermin\303\251e.cs" diff --git a/Bouchonnois/Service/Exceptions/QuandCestFiniCestFini.cs b/c#/Bouchonnois/Service/Exceptions/QuandCestFiniCestFini.cs similarity index 100% rename from Bouchonnois/Service/Exceptions/QuandCestFiniCestFini.cs rename to c#/Bouchonnois/Service/Exceptions/QuandCestFiniCestFini.cs diff --git a/Bouchonnois/Service/Exceptions/TasPlusDeBallesMonVieuxChasseALaMain.cs b/c#/Bouchonnois/Service/Exceptions/TasPlusDeBallesMonVieuxChasseALaMain.cs similarity index 100% rename from Bouchonnois/Service/Exceptions/TasPlusDeBallesMonVieuxChasseALaMain.cs rename to c#/Bouchonnois/Service/Exceptions/TasPlusDeBallesMonVieuxChasseALaMain.cs diff --git "a/Bouchonnois/Service/Exceptions/TasTropPicol\303\251MonVieuxTasRienTouch\303\251.cs" "b/c#/Bouchonnois/Service/Exceptions/TasTropPicol\303\251MonVieuxTasRienTouch\303\251.cs" similarity index 100% rename from "Bouchonnois/Service/Exceptions/TasTropPicol\303\251MonVieuxTasRienTouch\303\251.cs" rename to "c#/Bouchonnois/Service/Exceptions/TasTropPicol\303\251MonVieuxTasRienTouch\303\251.cs" diff --git a/Bouchonnois/Service/PartieDeChasseService.cs b/c#/Bouchonnois/Service/PartieDeChasseService.cs similarity index 100% rename from Bouchonnois/Service/PartieDeChasseService.cs rename to c#/Bouchonnois/Service/PartieDeChasseService.cs diff --git a/Bouchonnois/Service/Terrain.cs b/c#/Bouchonnois/Service/Terrain.cs similarity index 100% rename from Bouchonnois/Service/Terrain.cs rename to c#/Bouchonnois/Service/Terrain.cs diff --git a/java/pom.xml b/java/pom.xml new file mode 100644 index 0000000..e301216 --- /dev/null +++ b/java/pom.xml @@ -0,0 +1,47 @@ + + + 4.0.0 + + org.bouchonnois + refactoring-du-bouchonnois + 1.0-SNAPSHOT + + + 21 + 21 + UTF-8 + 5.10.0 + 1.18.30 + 0.10.4 + 3.24.2 + + + + + org.junit.jupiter + junit-jupiter-api + ${junit.version} + test + + + org.projectlombok + lombok + ${lombok.version} + provided + + + io.vavr + vavr + ${vavr.version} + + + org.assertj + assertj-core + ${assertJ.version} + test + + + + \ No newline at end of file diff --git a/java/src/main/java/bouchonnois/domain/Chasseur.java b/java/src/main/java/bouchonnois/domain/Chasseur.java new file mode 100644 index 0000000..447a16d --- /dev/null +++ b/java/src/main/java/bouchonnois/domain/Chasseur.java @@ -0,0 +1,10 @@ +package bouchonnois.domain; + +import lombok.Data; + +@Data +public class Chasseur { + private String nom; + private int ballesRestantes; + private int nbGalinettes; +} \ No newline at end of file diff --git a/java/src/main/java/bouchonnois/domain/Event.java b/java/src/main/java/bouchonnois/domain/Event.java new file mode 100644 index 0000000..887ec14 --- /dev/null +++ b/java/src/main/java/bouchonnois/domain/Event.java @@ -0,0 +1,11 @@ +package bouchonnois.domain; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +public record Event(LocalDateTime date, String message) { + @Override + public String toString() { + return date.format(DateTimeFormatter.ofPattern("HH:mm - ")) + message; + } +} \ No newline at end of file diff --git a/java/src/main/java/bouchonnois/domain/PartieDeChasse.java b/java/src/main/java/bouchonnois/domain/PartieDeChasse.java new file mode 100644 index 0000000..04a16b8 --- /dev/null +++ b/java/src/main/java/bouchonnois/domain/PartieDeChasse.java @@ -0,0 +1,16 @@ +package bouchonnois.domain; + +import bouchonnois.service.Terrain; +import lombok.Data; + +import java.util.List; +import java.util.UUID; + +@Data +public class PartieDeChasse { + private UUID id; + private List chasseurs; + private Terrain terrain; + private PartieStatus status; + private List events; +} diff --git a/java/src/main/java/bouchonnois/domain/PartieStatus.java b/java/src/main/java/bouchonnois/domain/PartieStatus.java new file mode 100644 index 0000000..df2820d --- /dev/null +++ b/java/src/main/java/bouchonnois/domain/PartieStatus.java @@ -0,0 +1,5 @@ +package bouchonnois.domain; + +public enum PartieStatus { + EN_COURS, APÉRO, TERMINÉE +} diff --git a/java/src/main/java/bouchonnois/repository/PartieDeChasseRepository.java b/java/src/main/java/bouchonnois/repository/PartieDeChasseRepository.java new file mode 100644 index 0000000..c9d14b2 --- /dev/null +++ b/java/src/main/java/bouchonnois/repository/PartieDeChasseRepository.java @@ -0,0 +1,11 @@ +package bouchonnois.repository; + +import bouchonnois.domain.PartieDeChasse; + +import java.util.UUID; + +public interface PartieDeChasseRepository { + void save(PartieDeChasse partieDeChasse); + + PartieDeChasse getById(UUID partieDeChasseId); +} \ No newline at end of file diff --git a/java/src/main/java/bouchonnois/service/PartieDeChasseService.java b/java/src/main/java/bouchonnois/service/PartieDeChasseService.java new file mode 100644 index 0000000..6c393ae --- /dev/null +++ b/java/src/main/java/bouchonnois/service/PartieDeChasseService.java @@ -0,0 +1,251 @@ +package bouchonnois.service; + +import bouchonnois.domain.Chasseur; +import bouchonnois.domain.Event; +import bouchonnois.domain.PartieDeChasse; +import bouchonnois.domain.PartieStatus; +import bouchonnois.repository.PartieDeChasseRepository; +import bouchonnois.service.exceptions.*; +import io.vavr.Tuple2; +import lombok.AllArgsConstructor; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.UUID; +import java.util.function.Supplier; +import java.util.stream.Collectors; + +@AllArgsConstructor +public class PartieDeChasseService { + private final PartieDeChasseRepository repository; + private final Supplier timeProvider; + + public UUID démarrer(Tuple2 terrainDeChasse, List> chasseurs) throws ImpossibleDeDémarrerUnePartieSansGalinettes, ImpossibleDeDémarrerUnePartieAvecUnChasseurSansBalle, ImpossibleDeDémarrerUnePartieSansChasseur { + if (terrainDeChasse._2 <= 0) { + throw new ImpossibleDeDémarrerUnePartieSansGalinettes(); + } + + PartieDeChasse partieDeChasse = new PartieDeChasse(); + partieDeChasse.setId(UUID.randomUUID()); + partieDeChasse.setStatus(PartieStatus.EN_COURS); + partieDeChasse.setChasseurs(new ArrayList<>()); + + Terrain terrain = new Terrain(terrainDeChasse._1); + terrain.setNbGalinettes(terrainDeChasse._2); + partieDeChasse.setTerrain(terrain); + partieDeChasse.setEvents(new ArrayList<>()); + + for (var chasseur : chasseurs) { + if (chasseur._2 == 0) { + throw new ImpossibleDeDémarrerUnePartieAvecUnChasseurSansBalle(); + } + Chasseur chasseurToAdd = new Chasseur(); + chasseurToAdd.setNom(chasseur._1); + chasseurToAdd.setBallesRestantes(chasseur._2); + partieDeChasse.getChasseurs().add(chasseurToAdd); + } + + if (partieDeChasse.getChasseurs().isEmpty()) { + throw new ImpossibleDeDémarrerUnePartieSansChasseur(); + } + + String chasseursToString = String.join(", ", + partieDeChasse.getChasseurs().stream() + .map(c -> c.getNom() + " (" + c.getBallesRestantes() + " balles)") + .toArray(String[]::new)); + + partieDeChasse.getEvents().add(new Event(timeProvider.get(), + "La partie de chasse commence à " + partieDeChasse.getTerrain().getNom() + " avec " + chasseursToString)); + + repository.save(partieDeChasse); + + return partieDeChasse.getId(); + } + + public void tirerSurUneGalinette(UUID id, String chasseur) throws LaPartieDeChasseNexistePas, TasPlusDeBallesMonVieuxChasseALaMain, ChasseurInconnu, OnTirePasPendantLapéroCestSacré, TasTropPicoledMonVieuxTasRienTouche, OnTirePasQuandLaPartieEstTerminee { + PartieDeChasse partieDeChasse = repository.getById(id); + + if (partieDeChasse == null) { + throw new LaPartieDeChasseNexistePas(); + } + + if (partieDeChasse.getTerrain().getNbGalinettes() != 0) { + + if (partieDeChasse.getStatus() != PartieStatus.APÉRO) { + if (partieDeChasse.getStatus() != PartieStatus.TERMINÉE) { + if (partieDeChasse.getChasseurs().stream().anyMatch(c -> c.getNom().equals(chasseur))) { + var chasseurQuiTire = partieDeChasse.getChasseurs().stream() + .filter(c -> c.getNom().equals(chasseur)).findFirst() + .get(); + + if (chasseurQuiTire.getBallesRestantes() == 0) { + partieDeChasse.getEvents().add(new Event(timeProvider.get(), + chasseur + " veut tirer sur une galinette -> T'as plus de balles mon vieux, chasse à la main")); + repository.save(partieDeChasse); + + throw new TasPlusDeBallesMonVieuxChasseALaMain(); + } + + chasseurQuiTire.setBallesRestantes(chasseurQuiTire.getBallesRestantes() - 1); + chasseurQuiTire.setNbGalinettes(chasseurQuiTire.getNbGalinettes() + 1); + partieDeChasse.getTerrain().setNbGalinettes(partieDeChasse.getTerrain().getNbGalinettes() - 1); + partieDeChasse.getEvents().add(new Event(timeProvider.get(), chasseur + " tire sur une galinette")); + + } else { + throw new ChasseurInconnu(chasseur); + } + } else { + partieDeChasse.getEvents().add(new Event(timeProvider.get(), chasseur + " veut tirer -> On tire pas quand la partie est terminée")); + repository.save(partieDeChasse); + + throw new OnTirePasQuandLaPartieEstTerminee(); + } + } else { + partieDeChasse.getEvents() + .add(new Event(timeProvider.get(), chasseur + " veut tirer -> On tire pas pendant l'apéro, c'est sacré !!!")); + repository.save(partieDeChasse); + throw new OnTirePasPendantLapéroCestSacré(); + } + } else { + throw new TasTropPicoledMonVieuxTasRienTouche(); + } + + repository.save(partieDeChasse); + } + + public void tirer(UUID id, String chasseur) throws LaPartieDeChasseNexistePas, TasPlusDeBallesMonVieuxChasseALaMain, ChasseurInconnu, OnTirePasPendantLapéroCestSacré, TasTropPicoledMonVieuxTasRienTouche, OnTirePasQuandLaPartieEstTerminee { + PartieDeChasse partieDeChasse = repository.getById(id); + + if (partieDeChasse == null) { + throw new LaPartieDeChasseNexistePas(); + } + if (partieDeChasse.getStatus() != PartieStatus.APÉRO) { + if (partieDeChasse.getStatus() != PartieStatus.TERMINÉE) { + if (partieDeChasse.getChasseurs().stream().anyMatch(c -> c.getNom().equals(chasseur))) { + var chasseurQuiTire = partieDeChasse.getChasseurs() + .stream() + .filter(c -> c.getNom().equals(chasseur)) + .findFirst() + .get(); + + if (chasseurQuiTire.getBallesRestantes() == 0) { + partieDeChasse.getEvents().add(new Event(timeProvider.get(), + chasseur + " tire -> T'as plus de balles mon vieux, chasse à la main")); + repository.save(partieDeChasse); + + throw new TasPlusDeBallesMonVieuxChasseALaMain(); + } + + chasseurQuiTire.setBallesRestantes(chasseurQuiTire.getBallesRestantes() - 1); + partieDeChasse.getEvents().add(new Event(timeProvider.get(), chasseur + " tire")); + + } else { + throw new ChasseurInconnu(chasseur); + } + } else { + partieDeChasse.getEvents().add(new Event(timeProvider.get(), chasseur + " veut tirer -> On tire pas quand la partie est terminée")); + repository.save(partieDeChasse); + + throw new OnTirePasQuandLaPartieEstTerminee(); + } + } else { + partieDeChasse.getEvents().add(new Event(timeProvider.get(), chasseur + " veut tirer -> On tire pas pendant l'apéro, c'est sacré !!!")); + repository.save(partieDeChasse); + throw new OnTirePasPendantLapéroCestSacré(); + } + repository.save(partieDeChasse); + } + + public void prendreLapéro(UUID id) throws LaPartieDeChasseNexistePas, OnEstDéjaEnTrainDePrendreLapéro, OnPrendPasLapéroQuandLaPartieEstTerminée { + PartieDeChasse partieDeChasse = repository.getById(id); + + if (partieDeChasse == null) { + throw new LaPartieDeChasseNexistePas(); + } + + if (partieDeChasse.getStatus() == PartieStatus.APÉRO) { + throw new OnEstDéjaEnTrainDePrendreLapéro(); + } else if (partieDeChasse.getStatus() == PartieStatus.TERMINÉE) { + throw new OnPrendPasLapéroQuandLaPartieEstTerminée(); + } else { + partieDeChasse.setStatus(PartieStatus.APÉRO); + partieDeChasse.getEvents().add(new Event(timeProvider.get(), "Petit apéro")); + repository.save(partieDeChasse); + } + } + + public void reprendreLaPartie(UUID id) throws LaPartieDeChasseNexistePas, LaChasseEstDéjaEnCours, QuandCestFiniCestFini { + PartieDeChasse partieDeChasse = repository.getById(id); + + if (partieDeChasse == null) { + throw new LaPartieDeChasseNexistePas(); + } + + if (partieDeChasse.getStatus() == PartieStatus.EN_COURS) { + throw new LaChasseEstDéjaEnCours(); + } + + if (partieDeChasse.getStatus() == PartieStatus.TERMINÉE) { + throw new QuandCestFiniCestFini(); + } + + partieDeChasse.setStatus(PartieStatus.EN_COURS); + partieDeChasse.getEvents().add(new Event(timeProvider.get(), "Reprise de la chasse")); + repository.save(partieDeChasse); + } + + public String terminerLaPartie(UUID id) throws QuandCestFiniCestFini { + PartieDeChasse partieDeChasse = repository.getById(id); + + var classement = partieDeChasse + .getChasseurs() + .stream() + .collect(Collectors.groupingBy(Chasseur::getNbGalinettes)); + + if (partieDeChasse.getStatus() == PartieStatus.TERMINÉE) { + throw new QuandCestFiniCestFini(); + } + + partieDeChasse.setStatus(PartieStatus.TERMINÉE); + + String result = ""; + + if (classement.entrySet().stream().allMatch(entry -> entry.getKey() == 0)) { + result = "Brocouille"; + partieDeChasse.getEvents().add(new Event(timeProvider.get(), "La partie de chasse est terminée, vainqueur : Brocouille")); + } else { + var winners = classement.get(classement.keySet().stream() + .max(Integer::compare) + .orElse(0)); + + result = winners.stream() + .map(Chasseur::getNom) + .collect(Collectors.joining(", ")); + + partieDeChasse.getEvents().add(new Event(timeProvider.get(), "La partie de chasse est terminée, vainqueur : " + + winners.stream() + .map(chasseur -> chasseur.getNom() + " - " + chasseur.getNbGalinettes() + " galinettes") + .collect(Collectors.joining(", ")))); + } + repository.save(partieDeChasse); + + return result; + } + + public String consulterStatus(UUID id) throws LaPartieDeChasseNexistePas { + PartieDeChasse partieDeChasse = repository.getById(id); + + if (partieDeChasse == null) { + throw new LaPartieDeChasseNexistePas(); + } + + List events = partieDeChasse.getEvents(); + events.sort(Comparator.comparing(Event::date).reversed()); + + return events.stream() + .map(Event::toString) + .collect(Collectors.joining(System.lineSeparator())); + } +} \ No newline at end of file diff --git a/java/src/main/java/bouchonnois/service/Terrain.java b/java/src/main/java/bouchonnois/service/Terrain.java new file mode 100644 index 0000000..dee1ae8 --- /dev/null +++ b/java/src/main/java/bouchonnois/service/Terrain.java @@ -0,0 +1,9 @@ +package bouchonnois.service; + +import lombok.Data; + +@Data +public class Terrain { + private final String nom; + private int nbGalinettes; +} diff --git a/java/src/main/java/bouchonnois/service/exceptions/ChasseurInconnu.java b/java/src/main/java/bouchonnois/service/exceptions/ChasseurInconnu.java new file mode 100644 index 0000000..ef57ffd --- /dev/null +++ b/java/src/main/java/bouchonnois/service/exceptions/ChasseurInconnu.java @@ -0,0 +1,7 @@ +package bouchonnois.service.exceptions; + +public class ChasseurInconnu extends Exception { + public ChasseurInconnu(String chasseur) { + super("Chasseur inconnu " + chasseur); + } +} diff --git "a/java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.java" "b/java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.java" new file mode 100644 index 0000000..0802dde --- /dev/null +++ "b/java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.java" @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class ImpossibleDeDémarrerUnePartieAvecUnChasseurSansBalle extends Exception { +} diff --git "a/java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.java" "b/java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.java" new file mode 100644 index 0000000..03c3f8d --- /dev/null +++ "b/java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.java" @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class ImpossibleDeDémarrerUnePartieSansChasseur extends Exception { +} diff --git "a/java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.java" "b/java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.java" new file mode 100644 index 0000000..ae69e8a --- /dev/null +++ "b/java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.java" @@ -0,0 +1,5 @@ +package bouchonnois.service.exceptions; + +public class ImpossibleDeDémarrerUnePartieSansGalinettes extends Exception { + +} \ No newline at end of file diff --git "a/java/src/main/java/bouchonnois/service/exceptions/LaChasseEstD\303\251jaEnCours.java" "b/java/src/main/java/bouchonnois/service/exceptions/LaChasseEstD\303\251jaEnCours.java" new file mode 100644 index 0000000..910a867 --- /dev/null +++ "b/java/src/main/java/bouchonnois/service/exceptions/LaChasseEstD\303\251jaEnCours.java" @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class LaChasseEstDéjaEnCours extends Exception { +} diff --git a/java/src/main/java/bouchonnois/service/exceptions/LaPartieDeChasseNexistePas.java b/java/src/main/java/bouchonnois/service/exceptions/LaPartieDeChasseNexistePas.java new file mode 100644 index 0000000..12386c7 --- /dev/null +++ b/java/src/main/java/bouchonnois/service/exceptions/LaPartieDeChasseNexistePas.java @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class LaPartieDeChasseNexistePas extends Exception { +} diff --git "a/java/src/main/java/bouchonnois/service/exceptions/OnEstD\303\251jaEnTrainDePrendreLap\303\251ro.java" "b/java/src/main/java/bouchonnois/service/exceptions/OnEstD\303\251jaEnTrainDePrendreLap\303\251ro.java" new file mode 100644 index 0000000..b74660c --- /dev/null +++ "b/java/src/main/java/bouchonnois/service/exceptions/OnEstD\303\251jaEnTrainDePrendreLap\303\251ro.java" @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class OnEstDéjaEnTrainDePrendreLapéro extends Exception { +} diff --git "a/java/src/main/java/bouchonnois/service/exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.java" "b/java/src/main/java/bouchonnois/service/exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.java" new file mode 100644 index 0000000..f0b26e5 --- /dev/null +++ "b/java/src/main/java/bouchonnois/service/exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.java" @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class OnPrendPasLapéroQuandLaPartieEstTerminée extends Exception { +} diff --git "a/java/src/main/java/bouchonnois/service/exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.java" "b/java/src/main/java/bouchonnois/service/exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.java" new file mode 100644 index 0000000..7777c63 --- /dev/null +++ "b/java/src/main/java/bouchonnois/service/exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.java" @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class OnTirePasPendantLapéroCestSacré extends Exception { +} diff --git a/java/src/main/java/bouchonnois/service/exceptions/OnTirePasQuandLaPartieEstTerminee.java b/java/src/main/java/bouchonnois/service/exceptions/OnTirePasQuandLaPartieEstTerminee.java new file mode 100644 index 0000000..546d123 --- /dev/null +++ b/java/src/main/java/bouchonnois/service/exceptions/OnTirePasQuandLaPartieEstTerminee.java @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class OnTirePasQuandLaPartieEstTerminee extends Exception { +} diff --git a/java/src/main/java/bouchonnois/service/exceptions/QuandCestFiniCestFini.java b/java/src/main/java/bouchonnois/service/exceptions/QuandCestFiniCestFini.java new file mode 100644 index 0000000..5fa4f10 --- /dev/null +++ b/java/src/main/java/bouchonnois/service/exceptions/QuandCestFiniCestFini.java @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class QuandCestFiniCestFini extends Exception { +} diff --git a/java/src/main/java/bouchonnois/service/exceptions/TasPlusDeBallesMonVieuxChasseALaMain.java b/java/src/main/java/bouchonnois/service/exceptions/TasPlusDeBallesMonVieuxChasseALaMain.java new file mode 100644 index 0000000..80d8b4a --- /dev/null +++ b/java/src/main/java/bouchonnois/service/exceptions/TasPlusDeBallesMonVieuxChasseALaMain.java @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class TasPlusDeBallesMonVieuxChasseALaMain extends Exception { +} diff --git a/java/src/main/java/bouchonnois/service/exceptions/TasTropPicoledMonVieuxTasRienTouche.java b/java/src/main/java/bouchonnois/service/exceptions/TasTropPicoledMonVieuxTasRienTouche.java new file mode 100644 index 0000000..72fdcb3 --- /dev/null +++ b/java/src/main/java/bouchonnois/service/exceptions/TasTropPicoledMonVieuxTasRienTouche.java @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class TasTropPicoledMonVieuxTasRienTouche extends Exception { +} diff --git a/java/src/test/java/bouchonnois/tests/doubles/PartieDeChasseRepositoryForTests.java b/java/src/test/java/bouchonnois/tests/doubles/PartieDeChasseRepositoryForTests.java new file mode 100644 index 0000000..9110c75 --- /dev/null +++ b/java/src/test/java/bouchonnois/tests/doubles/PartieDeChasseRepositoryForTests.java @@ -0,0 +1,30 @@ +package bouchonnois.tests.doubles; + +import bouchonnois.domain.PartieDeChasse; +import bouchonnois.repository.PartieDeChasseRepository; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class PartieDeChasseRepositoryForTests implements PartieDeChasseRepository { + private final Map partiesDeChasse = new HashMap<>(); + @Getter + private PartieDeChasse savedPartieDeChasse; + + @Override + public void save(PartieDeChasse partieDeChasse) { + savedPartieDeChasse = partieDeChasse; + add(partieDeChasse); + } + + @Override + public PartieDeChasse getById(UUID partieDeChasseId) { + return partiesDeChasse.get(partieDeChasseId); + } + + public void add(PartieDeChasse partieDeChasse) { + partiesDeChasse.put(partieDeChasse.getId(), partieDeChasse); + } +} diff --git a/java/src/test/java/bouchonnois/tests/service/PartieDeChasseServiceTests.java b/java/src/test/java/bouchonnois/tests/service/PartieDeChasseServiceTests.java new file mode 100644 index 0000000..c6983f0 --- /dev/null +++ b/java/src/test/java/bouchonnois/tests/service/PartieDeChasseServiceTests.java @@ -0,0 +1,1257 @@ +package bouchonnois.tests.service; + +import bouchonnois.domain.Chasseur; +import bouchonnois.domain.Event; +import bouchonnois.domain.PartieDeChasse; +import bouchonnois.domain.PartieStatus; +import bouchonnois.service.PartieDeChasseService; +import bouchonnois.service.Terrain; +import bouchonnois.service.exceptions.*; +import bouchonnois.tests.doubles.PartieDeChasseRepositoryForTests; +import io.vavr.Tuple2; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.UUID; + +import static java.lang.System.lineSeparator; +import static java.time.Month.APRIL; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +class PartieDeChasseServiceTests { + @Nested + class DemarrerUnePartieDeChasse { + @Test + void avec_plusieurs_chasseurs() throws ImpossibleDeDémarrerUnePartieSansGalinettes, ImpossibleDeDémarrerUnePartieAvecUnChasseurSansBalle, ImpossibleDeDémarrerUnePartieSansChasseur { + var repository = new PartieDeChasseRepositoryForTests(); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + var chasseurs = new ArrayList>() {{ + add(new Tuple2<>("Dédé", 20)); + add(new Tuple2<>("Bernard", 8)); + add(new Tuple2<>("Robert", 12)); + }}; + var terrainDeChasse = new Tuple2<>("Pitibon sur Sauldre", 3); + + var id = service.démarrer( + terrainDeChasse, + chasseurs + ); + + var savedPartieDeChasse = repository.getSavedPartieDeChasse(); + assertThat(savedPartieDeChasse.getId()).isEqualTo(id); + assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.EN_COURS); + assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); + assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs()).hasSize(3); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNom()).isEqualTo("Dédé"); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getBallesRestantes()).isEqualTo(20); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNom()).isEqualTo("Bernard"); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getBallesRestantes()).isEqualTo(8); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNom()).isEqualTo("Robert"); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getBallesRestantes()).isEqualTo(12); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNbGalinettes()).isZero(); + } + + @Test + void echoue_sans_chasseurs() { + var repository = new PartieDeChasseRepositoryForTests(); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + var chasseurs = new ArrayList>(); + var terrainDeChasse = new Tuple2<>("Pitibon sur Sauldre", 3); + + assertThatThrownBy(() -> service.démarrer(terrainDeChasse, chasseurs)) + .isInstanceOf(ImpossibleDeDémarrerUnePartieSansChasseur.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_avec_un_terrain_sans_galinettes() { + var repository = new PartieDeChasseRepositoryForTests(); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + var chasseurs = new ArrayList>(); + var terrainDeChasse = new Tuple2<>("Pitibon sur Sauldre", 0); + + assertThatThrownBy(() -> service.démarrer(terrainDeChasse, chasseurs)) + .isInstanceOf(ImpossibleDeDémarrerUnePartieSansGalinettes.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_si_un_chasseur_sans_balle() { + var repository = new PartieDeChasseRepositoryForTests(); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + var chasseurs = new ArrayList>() {{ + add(new Tuple2<>("Dédé", 20)); + add(new Tuple2<>("Bernard", 0)); + }}; + var terrainDeChasse = new Tuple2<>("Pitibon sur Sauldre", 3); + + assertThatThrownBy(() -> service.démarrer(terrainDeChasse, chasseurs)) + .isInstanceOf(ImpossibleDeDémarrerUnePartieAvecUnChasseurSansBalle.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + } + + @Nested + class TirerSurUneGalinette { + @Test + void avec_un_chasseur_ayant_des_balles_et_assez_de_galinettes_sur_le_terrain() throws ChasseurInconnu, TasTropPicoledMonVieuxTasRienTouche, OnTirePasQuandLaPartieEstTerminee, TasPlusDeBallesMonVieuxChasseALaMain, LaPartieDeChasseNexistePas, OnTirePasPendantLapéroCestSacré { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + service.tirerSurUneGalinette(id, "Bernard"); + + var savedPartieDeChasse = repository.getSavedPartieDeChasse(); + assertThat(savedPartieDeChasse.getId()).isEqualTo(id); + assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.EN_COURS); + assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); + assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(2); + assertThat(savedPartieDeChasse.getChasseurs()).hasSize(3); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNom()).isEqualTo("Dédé"); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getBallesRestantes()).isEqualTo(20); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNom()).isEqualTo("Bernard"); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getBallesRestantes()).isEqualTo(7); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNbGalinettes()).isEqualTo(1); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNom()).isEqualTo("Robert"); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getBallesRestantes()).isEqualTo(12); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNbGalinettes()).isZero(); + } + + @Test + void echoue_car_partie_nexiste_pas() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirerSurUneGalinette(id, "Bernard")) + .isInstanceOf(LaPartieDeChasseNexistePas.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_avec_un_chasseur_nayant_plus_de_balles() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(0); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirerSurUneGalinette(id, "Bernard")) + .isInstanceOf(TasPlusDeBallesMonVieuxChasseALaMain.class); + } + + @Test + void echoue_car_pas_de_galinettes_sur_le_terrain() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(0); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirerSurUneGalinette(id, "Bernard")) + .isInstanceOf(TasTropPicoledMonVieuxTasRienTouche.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_car_le_chasseur_n_est_pas_dans_la_partie() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirerSurUneGalinette(id, "Chasseur inconnu")) + .isInstanceOf(ChasseurInconnu.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_si_les_chasseurs_sont_en_apéro() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.APÉRO); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirerSurUneGalinette(id, "Bernard")) + .isInstanceOf(OnTirePasPendantLapéroCestSacré.class); + } + + @Test + void echoue_si_la_partie_est_terminée() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.TERMINÉE); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirerSurUneGalinette(id, "Bernard")) + .isInstanceOf(OnTirePasQuandLaPartieEstTerminee.class); + } + } + + @Nested + class Tirer { + @Test + void avec_un_chasseur_ayant_des_balles_et_assez_de_galinettes_sur_le_terrain() throws ChasseurInconnu, TasTropPicoledMonVieuxTasRienTouche, OnTirePasQuandLaPartieEstTerminee, TasPlusDeBallesMonVieuxChasseALaMain, LaPartieDeChasseNexistePas, OnTirePasPendantLapéroCestSacré { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + service.tirer(id, "Bernard"); + + var savedPartieDeChasse = repository.getSavedPartieDeChasse(); + assertThat(savedPartieDeChasse.getId()).isEqualTo(id); + assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.EN_COURS); + assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); + assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs()).hasSize(3); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNom()).isEqualTo("Dédé"); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getBallesRestantes()).isEqualTo(20); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNom()).isEqualTo("Bernard"); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getBallesRestantes()).isEqualTo(7); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNom()).isEqualTo("Robert"); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getBallesRestantes()).isEqualTo(12); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNbGalinettes()).isZero(); + } + + @Test + void echoue_car_partie_nexiste_pas() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirer(id, "Bernard")) + .isInstanceOf(LaPartieDeChasseNexistePas.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_avec_un_chasseur_nayant_plus_de_balles() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(0); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirer(id, "Bernard")) + .isInstanceOf(TasPlusDeBallesMonVieuxChasseALaMain.class); + } + + @Test + void echoue_car_le_chasseur_n_est_pas_dans_la_partie() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirer(id, "Chasseur inconnu")) + .isInstanceOf(ChasseurInconnu.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_si_les_chasseurs_sont_en_apéro() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.APÉRO); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirer(id, "Bernard")) + .isInstanceOf(OnTirePasPendantLapéroCestSacré.class); + } + + @Test + void echoue_si_la_partie_est_terminée() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.TERMINÉE); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirer(id, "Bernard")) + .isInstanceOf(OnTirePasQuandLaPartieEstTerminee.class); + } + } + + @Nested + class PrendreLApéro { + @Test + void quand_la_partie_est_en_cours() throws LaPartieDeChasseNexistePas, OnPrendPasLapéroQuandLaPartieEstTerminée, OnEstDéjaEnTrainDePrendreLapéro { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + service.prendreLapéro(id); + + var savedPartieDeChasse = repository.getSavedPartieDeChasse(); + assertThat(savedPartieDeChasse.getId()).isEqualTo(id); + assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.APÉRO); + assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); + assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs()).hasSize(3); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNom()).isEqualTo("Dédé"); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getBallesRestantes()).isEqualTo(20); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNom()).isEqualTo("Bernard"); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getBallesRestantes()).isEqualTo(8); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNom()).isEqualTo("Robert"); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getBallesRestantes()).isEqualTo(12); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNbGalinettes()).isZero(); + } + + @Test + void echoue_car_partie_nexiste_pas() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.prendreLapéro(id)) + .isInstanceOf(LaPartieDeChasseNexistePas.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_si_les_chasseurs_sont_déjà_en_apéro() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.APÉRO); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.prendreLapéro(id)) + .isInstanceOf(OnEstDéjaEnTrainDePrendreLapéro.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_si_la_partie_de_chasse_est_terminée() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.TERMINÉE); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.prendreLapéro(id)) + .isInstanceOf(OnPrendPasLapéroQuandLaPartieEstTerminée.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + } + + @Nested + class ReprendreLaPartieDeChasse { + @Test + void quand_lapéro_est_en_cours() throws LaPartieDeChasseNexistePas, LaChasseEstDéjaEnCours, QuandCestFiniCestFini { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.APÉRO); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + service.reprendreLaPartie(id); + + var savedPartieDeChasse = repository.getSavedPartieDeChasse(); + assertThat(savedPartieDeChasse.getId()).isEqualTo(id); + assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.EN_COURS); + assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); + assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs()).hasSize(3); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNom()).isEqualTo("Dédé"); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getBallesRestantes()).isEqualTo(20); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNom()).isEqualTo("Bernard"); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getBallesRestantes()).isEqualTo(8); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNom()).isEqualTo("Robert"); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getBallesRestantes()).isEqualTo(12); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNbGalinettes()).isZero(); + } + + @Test + void echoue_car_partie_nexiste_pas() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.reprendreLaPartie(id)) + .isInstanceOf(LaPartieDeChasseNexistePas.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_si_la_chasse_est_en_cours() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.reprendreLaPartie(id)) + .isInstanceOf(LaChasseEstDéjaEnCours.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_si_la_partie_de_chasse_est_terminée() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.TERMINÉE); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.reprendreLaPartie(id)) + .isInstanceOf(QuandCestFiniCestFini.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + } + + @Nested + class TerminerLaPartieDeChasse { + @Test + void quand_la_partie_est_en_cours_et_1_seul_chasseur_gagne() throws QuandCestFiniCestFini { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + setNbGalinettes(2); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + var meilleurChasseur = service.terminerLaPartie(id); + + var savedPartieDeChasse = repository.getSavedPartieDeChasse(); + assertThat(savedPartieDeChasse.getId()).isEqualTo(id); + assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.TERMINÉE); + assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); + assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs()).hasSize(3); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNom()).isEqualTo("Dédé"); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getBallesRestantes()).isEqualTo(20); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNom()).isEqualTo("Bernard"); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getBallesRestantes()).isEqualTo(8); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNom()).isEqualTo("Robert"); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getBallesRestantes()).isEqualTo(12); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNbGalinettes()).isEqualTo(2); + + assertThat(meilleurChasseur).isEqualTo("Robert"); + } + + @Test + void quand_la_partie_est_en_cours_et_1_seul_chasseur_dans_la_partie() throws QuandCestFiniCestFini { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + setNbGalinettes(2); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + var meilleurChasseur = service.terminerLaPartie(id); + + var savedPartieDeChasse = repository.getSavedPartieDeChasse(); + assertThat(savedPartieDeChasse.getId()).isEqualTo(id); + assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.TERMINÉE); + assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); + assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs()).hasSize(1); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNom()).isEqualTo("Robert"); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getBallesRestantes()).isEqualTo(12); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNbGalinettes()).isEqualTo(2); + + assertThat(meilleurChasseur).isEqualTo("Robert"); + } + + @Test + void quand_la_partie_est_en_cours_et_2_chasseurs_ex_aequo() throws QuandCestFiniCestFini { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + setNbGalinettes(2); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + setNbGalinettes(2); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + var meilleurChasseur = service.terminerLaPartie(id); + + var savedPartieDeChasse = repository.getSavedPartieDeChasse(); + assertThat(savedPartieDeChasse.getId()).isEqualTo(id); + assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.TERMINÉE); + assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); + assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs()).hasSize(3); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNom()).isEqualTo("Dédé"); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getBallesRestantes()).isEqualTo(20); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNbGalinettes()).isEqualTo(2); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNom()).isEqualTo("Bernard"); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getBallesRestantes()).isEqualTo(8); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNbGalinettes()).isEqualTo(2); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNom()).isEqualTo("Robert"); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getBallesRestantes()).isEqualTo(12); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNbGalinettes()).isZero(); + + assertThat(meilleurChasseur).isEqualTo("Dédé, Bernard"); + } + + @Test + void quand_la_partie_est_en_cours_et_tout_le_monde_brocouille() throws QuandCestFiniCestFini { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + var meilleurChasseur = service.terminerLaPartie(id); + + var savedPartieDeChasse = repository.getSavedPartieDeChasse(); + assertThat(savedPartieDeChasse.getId()).isEqualTo(id); + assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.TERMINÉE); + assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); + assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs()).hasSize(3); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNom()).isEqualTo("Dédé"); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getBallesRestantes()).isEqualTo(20); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNom()).isEqualTo("Bernard"); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getBallesRestantes()).isEqualTo(8); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNom()).isEqualTo("Robert"); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getBallesRestantes()).isEqualTo(12); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNbGalinettes()).isZero(); + + assertThat(meilleurChasseur).isEqualTo("Brocouille"); + } + + @Test + void quand_les_chasseurs_sont_a_lapéro_et_tous_ex_aequo() throws QuandCestFiniCestFini { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + setNbGalinettes(3); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + setNbGalinettes(3); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + setNbGalinettes(3); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.APÉRO); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + var meilleurChasseur = service.terminerLaPartie(id); + + var savedPartieDeChasse = repository.getSavedPartieDeChasse(); + assertThat(savedPartieDeChasse.getId()).isEqualTo(id); + assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.TERMINÉE); + assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); + assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs()).hasSize(3); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNom()).isEqualTo("Dédé"); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getBallesRestantes()).isEqualTo(20); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNom()).isEqualTo("Bernard"); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getBallesRestantes()).isEqualTo(8); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNom()).isEqualTo("Robert"); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getBallesRestantes()).isEqualTo(12); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNbGalinettes()).isEqualTo(3); + + assertThat(meilleurChasseur).isEqualTo("Dédé, Bernard, Robert"); + } + + @Test + void echoue_si_la_partie_est_déja_terminée() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.TERMINÉE); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.terminerLaPartie(id)) + .isInstanceOf(QuandCestFiniCestFini.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + } + + @Nested + class ConsulterStatus { + @Test + void quand_la_partie_vient_de_démarrer() throws LaPartieDeChasseNexistePas, LaChasseEstDéjaEnCours, QuandCestFiniCestFini { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>() {{ + add(new Event(LocalDateTime.of(2024, APRIL, 25, 9, 0, 12), + "La partie de chasse commence à Pitibon sur Sauldre avec Dédé (20 balles), Bernard (8 balles), Robert (12 balles)")); + }}); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + var status = service.consulterStatus(id); + + assertThat(status) + .isEqualTo("09:00 - La partie de chasse commence à Pitibon sur Sauldre avec Dédé (20 balles), Bernard (8 balles), Robert (12 balles)"); + } + + @Test + void quand_la_partie_est_terminée() throws LaPartieDeChasseNexistePas, LaChasseEstDéjaEnCours, QuandCestFiniCestFini { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + setNbGalinettes(2); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>() {{ + add(new Event(LocalDateTime.of(2024, APRIL, 25, 9, 0, 12), "La partie de chasse commence à Pitibon sur Sauldre avec Dédé (20 balles), Bernard (8 balles), Robert (12 balles)")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 9, 10, 0), "Dédé tire")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 9, 40, 0), "Robert tire sur une galinette")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 10, 0, 0), "Petit apéro")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 11, 0, 0), "Reprise de la chasse")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 11, 2, 0), "Bernard tire")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 11, 3, 0), "Bernard tire")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 11, 4, 0), "Dédé tire sur une galinette")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 11, 30, 0), "Robert tire sur une galinette")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 11, 40, 0), "Petit apéro")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 14, 30, 0), "Reprise de la chasse")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 0), "Bernard tire")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 1), "Bernard tire")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 2), "Bernard tire")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 3), "Bernard tire")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 4), "Bernard tire")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 5), "Bernard tire")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 6), "Bernard tire")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 7), "Bernard tire -> T'as plus de balles mon vieux, chasse à la main")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 15, 0, 0), "Robert tire sur une galinette")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 15, 30, 0), "La partie de chasse est terminée, vainqueur : Robert - 3 galinettes")); + }}); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + var status = service.consulterStatus(id); + + assertThat(status) + .isEqualTo("15:30 - La partie de chasse est terminée, vainqueur : Robert - 3 galinettes" + lineSeparator() + + "15:00 - Robert tire sur une galinette" + lineSeparator() + + "14:41 - Bernard tire -> T'as plus de balles mon vieux, chasse à la main" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:30 - Reprise de la chasse" + lineSeparator() + + "11:40 - Petit apéro" + lineSeparator() + + "11:30 - Robert tire sur une galinette" + lineSeparator() + + "11:04 - Dédé tire sur une galinette" + lineSeparator() + + "11:03 - Bernard tire" + lineSeparator() + + "11:02 - Bernard tire" + lineSeparator() + + "11:00 - Reprise de la chasse" + lineSeparator() + + "10:00 - Petit apéro" + lineSeparator() + + "09:40 - Robert tire sur une galinette" + lineSeparator() + + "09:10 - Dédé tire" + lineSeparator() + + "09:00 - La partie de chasse commence à Pitibon sur Sauldre avec Dédé (20 balles), Bernard (8 balles), Robert (12 balles)" + ); + } + } +} diff --git a/java/src/test/java/bouchonnois/tests/service/ScenarioTests.java b/java/src/test/java/bouchonnois/tests/service/ScenarioTests.java new file mode 100644 index 0000000..fff218e --- /dev/null +++ b/java/src/test/java/bouchonnois/tests/service/ScenarioTests.java @@ -0,0 +1,120 @@ +package bouchonnois.tests.service; + +import bouchonnois.service.PartieDeChasseService; +import bouchonnois.service.exceptions.*; +import bouchonnois.tests.doubles.PartieDeChasseRepositoryForTests; +import io.vavr.Tuple2; +import org.junit.jupiter.api.Test; + +import java.time.LocalDateTime; +import java.util.ArrayList; + +import static java.lang.System.lineSeparator; +import static java.time.Month.APRIL; +import static org.assertj.core.api.Assertions.assertThat; + +class ScenarioTests { + private LocalDateTime time = LocalDateTime.of(2024, APRIL, 25, 9, 0, 0); + + @Test + void dérouler_une_partie() throws ImpossibleDeDémarrerUnePartieAvecUnChasseurSansBalle, ImpossibleDeDémarrerUnePartieSansChasseur, ImpossibleDeDémarrerUnePartieSansGalinettes, OnTirePasPendantLapéroCestSacré, ChasseurInconnu, TasTropPicoledMonVieuxTasRienTouche, OnTirePasQuandLaPartieEstTerminee, TasPlusDeBallesMonVieuxChasseALaMain, LaPartieDeChasseNexistePas, OnPrendPasLapéroQuandLaPartieEstTerminée, OnEstDéjaEnTrainDePrendreLapéro, LaChasseEstDéjaEnCours, QuandCestFiniCestFini { + + var repository = new PartieDeChasseRepositoryForTests(); + var service = new PartieDeChasseService(repository, () -> time); + var chasseurs = new ArrayList>() {{ + add(new Tuple2<>("Dédé", 20)); + add(new Tuple2<>("Bernard", 8)); + add(new Tuple2<>("Robert", 12)); + }}; + var terrainDeChasse = new Tuple2<>("Pitibon sur Sauldre", 4); + + var id = service.démarrer( + terrainDeChasse, + chasseurs + ); + + time = time.plusMinutes(10); + service.tirer(id, "Dédé"); + + time = time.plusMinutes(30); + service.tirerSurUneGalinette(id, "Robert"); + + time = time.plusMinutes(20); + service.prendreLapéro(id); + + time = time.plusHours(1); + service.reprendreLaPartie(id); + + time = time.plusMinutes(2); + service.tirer(id, "Bernard"); + + time = time.plusMinutes(1); + service.tirer(id, "Bernard"); + + time = time.plusMinutes(1); + service.tirerSurUneGalinette(id, "Dédé"); + + time = time.plusMinutes(26); + service.tirerSurUneGalinette(id, "Robert"); + + time = time.plusMinutes(10); + service.prendreLapéro(id); + + time = time.plusMinutes(170); + service.reprendreLaPartie(id); + + time = time.plusMinutes(11); + service.tirer(id, "Bernard"); + + time = time.plusSeconds(1); + service.tirer(id, "Bernard"); + + time = time.plusSeconds(1); + service.tirer(id, "Bernard"); + + time = time.plusSeconds(1); + service.tirer(id, "Bernard"); + + time = time.plusSeconds(1); + service.tirer(id, "Bernard"); + + time = time.plusSeconds(1); + service.tirer(id, "Bernard"); + + time = time.plusSeconds(1); + + try { + service.tirer(id, "Bernard"); + } catch (TasPlusDeBallesMonVieuxChasseALaMain e) { + } + + time = time.plusMinutes(19); + service.tirerSurUneGalinette(id, "Robert"); + + time = time.plusMinutes(30); + service.terminerLaPartie(id); + + assertThat(service.consulterStatus(id)) + .isEqualTo("15:30 - La partie de chasse est terminée, vainqueur : Robert - 3 galinettes" + lineSeparator() + + "15:00 - Robert tire sur une galinette" + lineSeparator() + + "14:41 - Bernard tire -> T'as plus de balles mon vieux, chasse à la main" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:30 - Reprise de la chasse" + lineSeparator() + + "11:40 - Petit apéro" + lineSeparator() + + "11:30 - Robert tire sur une galinette" + lineSeparator() + + "11:04 - Dédé tire sur une galinette" + lineSeparator() + + "11:03 - Bernard tire" + lineSeparator() + + "11:02 - Bernard tire" + lineSeparator() + + "11:00 - Reprise de la chasse" + lineSeparator() + + "10:00 - Petit apéro" + lineSeparator() + + "09:40 - Robert tire sur une galinette" + lineSeparator() + + "09:10 - Dédé tire" + lineSeparator() + + "09:00 - La partie de chasse commence à Pitibon sur Sauldre avec Dédé (20 balles), Bernard (8 balles), Robert (12 balles)" + ); + } +} diff --git a/kotlin/.gitignore b/kotlin/.gitignore new file mode 100644 index 0000000..b63da45 --- /dev/null +++ b/kotlin/.gitignore @@ -0,0 +1,42 @@ +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/kotlin/build.gradle.kts b/kotlin/build.gradle.kts new file mode 100644 index 0000000..7629f90 --- /dev/null +++ b/kotlin/build.gradle.kts @@ -0,0 +1,27 @@ +plugins { + kotlin("jvm") version "1.9.20" + application +} + +group = "org.bouchonnois" +version = "1.0-SNAPSHOT" + +repositories { + mavenCentral() +} + +dependencies { + testImplementation("io.kotest:kotest-runner-junit5:5.7.2") +} + +tasks.test { + useJUnitPlatform() +} + +kotlin { + jvmToolchain(8) +} + +application { + mainClass.set("MainKt") +} \ No newline at end of file diff --git a/kotlin/gradle.properties b/kotlin/gradle.properties new file mode 100644 index 0000000..7fc6f1f --- /dev/null +++ b/kotlin/gradle.properties @@ -0,0 +1 @@ +kotlin.code.style=official diff --git a/kotlin/gradle/wrapper/gradle-wrapper.jar b/kotlin/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..249e5832f090a2944b7473328c07c9755baa3196 GIT binary patch literal 60756 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kotlin/gradlew.bat b/kotlin/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/kotlin/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kotlin/settings.gradle.kts b/kotlin/settings.gradle.kts new file mode 100644 index 0000000..f69851c --- /dev/null +++ b/kotlin/settings.gradle.kts @@ -0,0 +1,12 @@ +pluginManagement { + repositories { + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "0.5.0" +} + +rootProject.name = "refactoring-du-bouchonnois" \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/domain/Chasseur.kt b/kotlin/src/main/kotlin/bouchonnois/domain/Chasseur.kt new file mode 100644 index 0000000..56287ca --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/domain/Chasseur.kt @@ -0,0 +1,7 @@ +package bouchonnois.domain + +class Chasseur { + var nom: String? = null + var ballesRestantes = 0 + var nbGalinettes = 0 +} \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/domain/Event.kt b/kotlin/src/main/kotlin/bouchonnois/domain/Event.kt new file mode 100644 index 0000000..372385f --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/domain/Event.kt @@ -0,0 +1,10 @@ +package bouchonnois.domain + +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter + +data class Event(val date: LocalDateTime, val message: String) { + override fun toString(): String { + return date.format(DateTimeFormatter.ofPattern("HH:mm - ")) + message + } +} \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/domain/PartieDeChasse.kt b/kotlin/src/main/kotlin/bouchonnois/domain/PartieDeChasse.kt new file mode 100644 index 0000000..09246ce --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/domain/PartieDeChasse.kt @@ -0,0 +1,12 @@ +package bouchonnois.domain + +import bouchonnois.service.Terrain +import java.util.* + +class PartieDeChasse { + var id: UUID? = null + var chasseurs: MutableList? = null + var terrain: Terrain? = null + var status: PartieStatus? = null + var events: MutableList? = null +} \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/domain/PartieStatus.kt b/kotlin/src/main/kotlin/bouchonnois/domain/PartieStatus.kt new file mode 100644 index 0000000..6fd01f5 --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/domain/PartieStatus.kt @@ -0,0 +1,8 @@ +package bouchonnois.domain + + +enum class PartieStatus { + EN_COURS, + APÉRO, + TERMINÉE +} \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/repository/PartieDeChasseRepository.kt b/kotlin/src/main/kotlin/bouchonnois/repository/PartieDeChasseRepository.kt new file mode 100644 index 0000000..85a1af3 --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/repository/PartieDeChasseRepository.kt @@ -0,0 +1,9 @@ +package bouchonnois.repository + +import bouchonnois.domain.PartieDeChasse +import java.util.* + +interface PartieDeChasseRepository { + fun save(partieDeChasse: PartieDeChasse) + fun getById(partieDeChasseId: UUID?): PartieDeChasse? +} \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/service/PartieDeChasseService.kt b/kotlin/src/main/kotlin/bouchonnois/service/PartieDeChasseService.kt new file mode 100644 index 0000000..e813452 --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/service/PartieDeChasseService.kt @@ -0,0 +1,249 @@ +package bouchonnois.service + +import bouchonnois.domain.Chasseur +import bouchonnois.domain.Event +import bouchonnois.domain.PartieDeChasse +import bouchonnois.domain.PartieStatus +import bouchonnois.repository.PartieDeChasseRepository +import bouchonnois.service.exceptions.* +import java.time.LocalDateTime +import java.util.* + +class PartieDeChasseService( + private val repository: PartieDeChasseRepository, + private val timeProvider: () -> LocalDateTime +) { + fun démarrer(terrainDeChasse: Pair, chasseurs: Map): UUID { + if (terrainDeChasse.second <= 0) { + throw ImpossibleDeDémarrerUnePartieSansGalinettes() + } + + val partieDeChasse = PartieDeChasse() + partieDeChasse.id = UUID.randomUUID() + partieDeChasse.status = PartieStatus.EN_COURS + partieDeChasse.chasseurs = mutableListOf() + + val terrain = Terrain(terrainDeChasse.first) + terrain.nbGalinettes = terrainDeChasse.second + + partieDeChasse.terrain = terrain + partieDeChasse.events = mutableListOf() + + for (chasseur in chasseurs) { + if (chasseur.value == 0) { + throw ImpossibleDeDémarrerUnePartieAvecUnChasseurSansBalle() + } + val chasseurToAdd = Chasseur() + chasseurToAdd.nom = chasseur.key + chasseurToAdd.ballesRestantes = chasseur.value + + partieDeChasse.chasseurs!!.add(chasseurToAdd) + } + + if (partieDeChasse.chasseurs!!.isEmpty()) { + throw ImpossibleDeDémarrerUnePartieSansChasseur() + } + + val chasseursToString = partieDeChasse + .chasseurs!! + .joinToString(", ") { "${it.nom} (${it.ballesRestantes} balles)" } + + partieDeChasse.events!!.add( + Event( + timeProvider(), + "La partie de chasse commence à ${partieDeChasse.terrain!!.nom} avec $chasseursToString" + ) + ) + repository.save(partieDeChasse) + + return partieDeChasse.id!! + } + + fun tirerSurUneGalinette(id: UUID, chasseur: String) { + val partieDeChasse = repository.getById(id) ?: throw LaPartieDeChasseNexistePas() + + if (partieDeChasse.terrain!!.nbGalinettes != 0) { + if (partieDeChasse.status != PartieStatus.APÉRO) { + if (partieDeChasse.status != PartieStatus.TERMINÉE) { + if (partieDeChasse.chasseurs!!.any { c -> c.nom == chasseur }) { + val chasseurQuiTire = partieDeChasse.chasseurs!!.first { c -> c.nom == chasseur } + + if (chasseurQuiTire.ballesRestantes == 0) { + partieDeChasse.events!!.add( + Event( + timeProvider(), + "$chasseur veut tirer sur une galinette -> T'as plus de balles mon vieux, chasse à la main" + ) + ) + repository.save(partieDeChasse) + throw TasPlusDeBallesMonVieuxChasseALaMain() + } + chasseurQuiTire.ballesRestantes -= 1 + chasseurQuiTire.nbGalinettes += 1 + partieDeChasse.terrain!!.nbGalinettes -= 1 + partieDeChasse.events!!.add( + Event( + timeProvider(), + "$chasseur tire sur une galinette" + ) + ) + } else { + throw ChasseurInconnu(chasseur) + } + } else { + partieDeChasse.events!!.add( + Event( + timeProvider(), + "$chasseur veut tirer -> On tire pas quand la partie est terminée" + ) + ) + repository.save(partieDeChasse) + throw OnTirePasQuandLaPartieEstTerminee() + } + } else { + partieDeChasse + .events!!.add( + Event( + timeProvider(), + "$chasseur veut tirer -> On tire pas pendant l'apéro, c'est sacré !!!" + ) + ) + repository.save(partieDeChasse) + throw OnTirePasPendantLapéroCestSacré() + } + } else { + throw TasTropPicoledMonVieuxTasRienTouche() + } + + repository.save(partieDeChasse) + } + + fun tirer(id: UUID, chasseur: String) { + val partieDeChasse = repository.getById(id) ?: throw LaPartieDeChasseNexistePas() + + if (partieDeChasse.status != PartieStatus.APÉRO) { + if (partieDeChasse.status != PartieStatus.TERMINÉE) { + if (partieDeChasse.chasseurs!!.any { c -> c.nom == chasseur }) { + val chasseurQuiTire = partieDeChasse.chasseurs!!.first { c -> c.nom == chasseur } + + if (chasseurQuiTire.ballesRestantes == 0) { + partieDeChasse.events!!.add( + Event( + timeProvider(), + "$chasseur tire -> T'as plus de balles mon vieux, chasse à la main" + ) + ) + repository.save(partieDeChasse) + throw TasPlusDeBallesMonVieuxChasseALaMain() + } + chasseurQuiTire.ballesRestantes = chasseurQuiTire.ballesRestantes - 1 + partieDeChasse.events!!.add(Event(timeProvider(), "$chasseur tire")) + } else { + throw ChasseurInconnu(chasseur) + } + } else { + partieDeChasse.events!!.add( + Event( + timeProvider(), + "$chasseur veut tirer -> On tire pas quand la partie est terminée" + ) + ) + repository.save(partieDeChasse) + throw OnTirePasQuandLaPartieEstTerminee() + } + } else { + partieDeChasse.events!!.add( + Event( + timeProvider(), + "$chasseur veut tirer -> On tire pas pendant l'apéro, c'est sacré !!!" + ) + ) + repository.save(partieDeChasse) + throw OnTirePasPendantLapéroCestSacré() + } + repository.save(partieDeChasse) + } + + fun prendreLapéro(id: UUID) { + val partieDeChasse = repository.getById(id) ?: throw LaPartieDeChasseNexistePas() + + if (partieDeChasse.status == PartieStatus.APÉRO) { + throw OnEstDéjaEnTrainDePrendreLapéro() + } else if (partieDeChasse.status == PartieStatus.TERMINÉE) { + throw OnPrendPasLapéroQuandLaPartieEstTerminée() + } else { + partieDeChasse.status = PartieStatus.APÉRO + partieDeChasse.events!!.add(Event(timeProvider(), "Petit apéro")) + repository.save(partieDeChasse) + } + } + + fun reprendreLaPartie(id: UUID) { + val partieDeChasse = repository.getById(id) + + if (partieDeChasse == null) { + throw LaPartieDeChasseNexistePas() + } + if (partieDeChasse.status == PartieStatus.EN_COURS) { + throw LaChasseEstDéjaEnCours() + } + if (partieDeChasse.status == PartieStatus.TERMINÉE) { + throw QuandCestFiniCestFini() + } + + partieDeChasse.status = PartieStatus.EN_COURS + partieDeChasse.events!!.add(Event(timeProvider(), "Reprise de la chasse")) + repository.save(partieDeChasse) + } + + fun terminerLaPartie(id: UUID): String { + val partieDeChasse = repository.getById(id) + + val classement = partieDeChasse + ?.chasseurs + ?.groupBy { c -> c.nbGalinettes } + + if (partieDeChasse!!.status == PartieStatus.TERMINÉE) { + throw QuandCestFiniCestFini() + } + + partieDeChasse.status = PartieStatus.TERMINÉE + + val result: String + + if (classement!!.keys.all { it == 0 }) { + result = "Brocouille" + partieDeChasse.events!!.add( + Event( + timeProvider(), + "La partie de chasse est terminée, vainqueur : Brocouille" + ) + ) + } else { + val winners = classement[classement.keys.max()] + result = winners!! + .map(Chasseur::nom) + .joinToString(", ") + + partieDeChasse.events!!.add( + Event( + timeProvider(), + "La partie de chasse est terminée, vainqueur : ${ + winners.joinToString(", ") { chasseur: Chasseur -> chasseur.nom + " - " + chasseur.nbGalinettes + " galinettes" } + }" + )) + } + repository.save(partieDeChasse) + + return result + } + + fun consulterStatus(id: UUID): String { + val partieDeChasse = repository.getById(id) + if (partieDeChasse == null) throw LaPartieDeChasseNexistePas() + + return partieDeChasse.events!! + .sortedByDescending { it.date } + .joinToString(System.lineSeparator()) { it.toString() } + } +} \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/service/Terrain.kt b/kotlin/src/main/kotlin/bouchonnois/service/Terrain.kt new file mode 100644 index 0000000..913cdc0 --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/service/Terrain.kt @@ -0,0 +1,6 @@ +package bouchonnois.service + + +class Terrain(val nom: String) { + var nbGalinettes = 0 +} \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ChasseurInconnu.kt b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ChasseurInconnu.kt new file mode 100644 index 0000000..109a053 --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ChasseurInconnu.kt @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions + + +class ChasseurInconnu(chasseur: String) : Exception("Chasseur inconnu $chasseur") \ No newline at end of file diff --git "a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.kt" "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.kt" new file mode 100644 index 0000000..7c53949 --- /dev/null +++ "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.kt" @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions + + +class ImpossibleDeDémarrerUnePartieAvecUnChasseurSansBalle : Exception() \ No newline at end of file diff --git "a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.kt" "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.kt" new file mode 100644 index 0000000..11d5eb8 --- /dev/null +++ "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.kt" @@ -0,0 +1,3 @@ +package bouchonnois.service.exceptions + +class ImpossibleDeDémarrerUnePartieSansChasseur : Exception() \ No newline at end of file diff --git "a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.kt" "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.kt" new file mode 100644 index 0000000..a8c926f --- /dev/null +++ "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.kt" @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions + + +class ImpossibleDeDémarrerUnePartieSansGalinettes : Exception() \ No newline at end of file diff --git "a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/LaChasseEstD\303\251jaEnCours.kt" "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/LaChasseEstD\303\251jaEnCours.kt" new file mode 100644 index 0000000..adfbea8 --- /dev/null +++ "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/LaChasseEstD\303\251jaEnCours.kt" @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions + + +class LaChasseEstDéjaEnCours : Exception() \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/LaPartieDeChasseNexistePas.kt b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/LaPartieDeChasseNexistePas.kt new file mode 100644 index 0000000..b7fe385 --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/LaPartieDeChasseNexistePas.kt @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions + + +class LaPartieDeChasseNexistePas : Exception() \ No newline at end of file diff --git "a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnEstD\303\251jaEnTrainDePrendreLap\303\251ro.kt" "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnEstD\303\251jaEnTrainDePrendreLap\303\251ro.kt" new file mode 100644 index 0000000..f1f9059 --- /dev/null +++ "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnEstD\303\251jaEnTrainDePrendreLap\303\251ro.kt" @@ -0,0 +1,3 @@ +package bouchonnois.service.exceptions + +class OnEstDéjaEnTrainDePrendreLapéro : Exception() \ No newline at end of file diff --git "a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.kt" "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.kt" new file mode 100644 index 0000000..d177e59 --- /dev/null +++ "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.kt" @@ -0,0 +1,3 @@ +package bouchonnois.service.exceptions + +class OnPrendPasLapéroQuandLaPartieEstTerminée : Exception() \ No newline at end of file diff --git "a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.kt" "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.kt" new file mode 100644 index 0000000..d344c05 --- /dev/null +++ "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.kt" @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions + + +class OnTirePasPendantLapéroCestSacré : Exception() \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnTirePasQuandLaPartieEstTerminee.kt b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnTirePasQuandLaPartieEstTerminee.kt new file mode 100644 index 0000000..bf7c5d6 --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnTirePasQuandLaPartieEstTerminee.kt @@ -0,0 +1,3 @@ +package bouchonnois.service.exceptions + +class OnTirePasQuandLaPartieEstTerminee : Exception() \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/QuandCestFiniCestFini.kt b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/QuandCestFiniCestFini.kt new file mode 100644 index 0000000..3d37234 --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/QuandCestFiniCestFini.kt @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions + + +class QuandCestFiniCestFini : Exception() diff --git a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/TasPlusDeBallesMonVieuxChasseALaMain.kt b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/TasPlusDeBallesMonVieuxChasseALaMain.kt new file mode 100644 index 0000000..4c00234 --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/TasPlusDeBallesMonVieuxChasseALaMain.kt @@ -0,0 +1,3 @@ +package bouchonnois.service.exceptions + +class TasPlusDeBallesMonVieuxChasseALaMain : Exception() \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/TasTropPicoledMonVieuxTasRienTouche.kt b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/TasTropPicoledMonVieuxTasRienTouche.kt new file mode 100644 index 0000000..49c6d5d --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/TasTropPicoledMonVieuxTasRienTouche.kt @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions + + +class TasTropPicoledMonVieuxTasRienTouche : Exception() \ No newline at end of file diff --git a/kotlin/src/test/kotlin/bouchonnois/tests/doubles/PartieDeChasseRepositoryForTests.kt b/kotlin/src/test/kotlin/bouchonnois/tests/doubles/PartieDeChasseRepositoryForTests.kt new file mode 100644 index 0000000..e7c9137 --- /dev/null +++ b/kotlin/src/test/kotlin/bouchonnois/tests/doubles/PartieDeChasseRepositoryForTests.kt @@ -0,0 +1,22 @@ +package bouchonnois.tests.doubles + +import bouchonnois.domain.PartieDeChasse +import bouchonnois.repository.PartieDeChasseRepository +import java.util.* + +class PartieDeChasseRepositoryForTests : PartieDeChasseRepository { + var savedPartieDeChasse: PartieDeChasse? = null + private val partiesDeChasse: MutableMap = mutableMapOf() + + override fun save(partieDeChasse: PartieDeChasse) { + savedPartieDeChasse = partieDeChasse + add(partieDeChasse) + } + + override fun getById(partieDeChasseId: UUID?): PartieDeChasse? = + partiesDeChasse[partieDeChasseId] + + fun add(partieDeChasse: PartieDeChasse) { + partiesDeChasse.put(partieDeChasse.id!!, partieDeChasse) + } +} \ No newline at end of file diff --git a/kotlin/src/test/kotlin/bouchonnois/tests/service/PartieDeChasseServiceTests.kt b/kotlin/src/test/kotlin/bouchonnois/tests/service/PartieDeChasseServiceTests.kt new file mode 100644 index 0000000..0d963a2 --- /dev/null +++ b/kotlin/src/test/kotlin/bouchonnois/tests/service/PartieDeChasseServiceTests.kt @@ -0,0 +1,1341 @@ +package bouchonnois.tests.service + +import bouchonnois.domain.Chasseur +import bouchonnois.domain.Event +import bouchonnois.domain.PartieDeChasse +import bouchonnois.domain.PartieStatus +import bouchonnois.service.PartieDeChasseService +import bouchonnois.service.Terrain +import bouchonnois.service.exceptions.* +import bouchonnois.tests.doubles.PartieDeChasseRepositoryForTests +import io.kotest.assertions.throwables.shouldThrow +import io.kotest.core.spec.style.FeatureSpec +import io.kotest.matchers.collections.shouldHaveSize +import io.kotest.matchers.shouldBe +import java.lang.System.lineSeparator +import java.time.LocalDateTime +import java.time.Month.APRIL +import java.util.* + +class PartieDeChasseServiceTests : FeatureSpec({ + feature("démarrer une partie de chasse") { + scenario("avec plusieurs chasseurs") { + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + val chasseurs = mapOf( + ("Dédé" to 20), + ("Bernard" to 8), + ("Robert" to 12) + ) + val terrainDeChasse = ("Pitibon sur Sauldre" to 3) + + val id = service.démarrer( + terrainDeChasse, + chasseurs + ) + + val savedPartieDeChasse = repository.savedPartieDeChasse!! + savedPartieDeChasse.id shouldBe id + savedPartieDeChasse.status shouldBe PartieStatus.EN_COURS + savedPartieDeChasse.terrain!!.nom shouldBe "Pitibon sur Sauldre" + savedPartieDeChasse.terrain!!.nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!! shouldHaveSize 3 + savedPartieDeChasse.chasseurs!![0].nom shouldBe "Dédé" + savedPartieDeChasse.chasseurs!![0].ballesRestantes shouldBe 20 + savedPartieDeChasse.chasseurs!![0].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![1].nom shouldBe "Bernard" + savedPartieDeChasse.chasseurs!![1].ballesRestantes shouldBe 8 + savedPartieDeChasse.chasseurs!![1].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![2].nom shouldBe "Robert" + savedPartieDeChasse.chasseurs!![2].ballesRestantes shouldBe 12 + savedPartieDeChasse.chasseurs!![2].nbGalinettes shouldBe 0 + } + + scenario("échoue sans chasseurs") { + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + val chasseurs: Map = mapOf() + val terrainDeChasse = ("Pitibon sur Sauldre" to 3) + + shouldThrow { + service.démarrer( + terrainDeChasse, + chasseurs + ) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue avec un terrain sans galinettes") { + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + val terrainDeChasse = ("Pitibon sur Sauldre" to 0) + + shouldThrow { + service.démarrer( + terrainDeChasse, + mapOf() + ) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue si chasseur sans balle") { + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + val chasseurs = mapOf( + ("Dédé" to 20), + ("Bernard" to 0) + ) + val terrainDeChasse = ("Pitibon sur Sauldre" to 3) + + shouldThrow { + service.démarrer( + terrainDeChasse, + chasseurs + ) + } + repository.savedPartieDeChasse shouldBe null + } + } + + feature("tirer sur une galinette") { + scenario("avec un chasseur ayant des balles et assez de galinettes sur le terrain") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + service.tirerSurUneGalinette(id, "Bernard") + + val savedPartieDeChasse = repository.savedPartieDeChasse!! + savedPartieDeChasse.id shouldBe id + savedPartieDeChasse.status shouldBe PartieStatus.EN_COURS + savedPartieDeChasse.terrain!!.nom shouldBe "Pitibon sur Sauldre" + savedPartieDeChasse.terrain!!.nbGalinettes shouldBe 2 + savedPartieDeChasse.chasseurs!! shouldHaveSize 3 + savedPartieDeChasse.chasseurs!![0].nom shouldBe "Dédé" + savedPartieDeChasse.chasseurs!![0].ballesRestantes shouldBe 20 + savedPartieDeChasse.chasseurs!![0].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![1].nom shouldBe "Bernard" + savedPartieDeChasse.chasseurs!![1].ballesRestantes shouldBe 7 + savedPartieDeChasse.chasseurs!![1].nbGalinettes shouldBe 1 + savedPartieDeChasse.chasseurs!![2].nom shouldBe "Robert" + savedPartieDeChasse.chasseurs!![2].ballesRestantes shouldBe 12 + savedPartieDeChasse.chasseurs!![2].nbGalinettes shouldBe 0 + } + + scenario("échoue car partie n'existe pas") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.tirerSurUneGalinette( + id, + "Bernard" + ) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue avec un chasseur n'ayant plus de balles") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 0 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + + shouldThrow { + service.tirerSurUneGalinette( + id, + "Bernard" + ) + } + } + + scenario("échoue car pas de galinettes sur le terrain") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 0 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.tirerSurUneGalinette( + id, + "Bernard" + ) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue car le chasseur n'est pas dans la partie") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.tirerSurUneGalinette( + id, + "Chasseur inconnu" + ) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue si les chasseurs sont en apéro") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.APÉRO + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.tirerSurUneGalinette( + id, + "Bernard" + ) + } + } + + scenario("échoue si la partie est terminée") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.TERMINÉE + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.tirerSurUneGalinette( + id, + "Bernard" + ) + } + } + } + + feature("tirer") { + scenario("avec un chasseur ayant des balles et assez de galinettes sur le terrain") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + service.tirer(id, "Bernard") + + val savedPartieDeChasse = repository.savedPartieDeChasse!! + savedPartieDeChasse.id shouldBe id + savedPartieDeChasse.status shouldBe PartieStatus.EN_COURS + savedPartieDeChasse.terrain!!.nom shouldBe "Pitibon sur Sauldre" + savedPartieDeChasse.terrain!!.nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!! shouldHaveSize 3 + savedPartieDeChasse.chasseurs!![0].nom shouldBe "Dédé" + savedPartieDeChasse.chasseurs!![0].ballesRestantes shouldBe 20 + savedPartieDeChasse.chasseurs!![0].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![1].nom shouldBe "Bernard" + savedPartieDeChasse.chasseurs!![1].ballesRestantes shouldBe 7 + savedPartieDeChasse.chasseurs!![1].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![2].nom shouldBe "Robert" + savedPartieDeChasse.chasseurs!![2].ballesRestantes shouldBe 12 + savedPartieDeChasse.chasseurs!![2].nbGalinettes shouldBe 0 + } + + scenario("échoue car partie n'existe pas") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.tirer( + id, + "Bernard" + ) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue avec un chasseur n'ayant plus de balles") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 0 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + + shouldThrow { + service.tirer( + id, + "Bernard" + ) + } + } + + scenario("échoue car le chasseur n'est pas dans la partie") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.tirer( + id, + "Chasseur inconnu" + ) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue si les chasseurs sont en apéro") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.APÉRO + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.tirer( + id, + "Bernard" + ) + } + } + + scenario("échoue si la partie est terminée") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.TERMINÉE + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.tirer( + id, + "Bernard" + ) + } + } + } + + feature("prendre l'apéro") { + scenario("quand la partie est en cours") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + service.prendreLapéro(id) + + val savedPartieDeChasse = repository.savedPartieDeChasse!! + savedPartieDeChasse.id shouldBe id + savedPartieDeChasse.status shouldBe PartieStatus.APÉRO + savedPartieDeChasse.terrain!!.nom shouldBe "Pitibon sur Sauldre" + savedPartieDeChasse.terrain!!.nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!! shouldHaveSize 3 + savedPartieDeChasse.chasseurs!![0].nom shouldBe "Dédé" + savedPartieDeChasse.chasseurs!![0].ballesRestantes shouldBe 20 + savedPartieDeChasse.chasseurs!![0].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![1].nom shouldBe "Bernard" + savedPartieDeChasse.chasseurs!![1].ballesRestantes shouldBe 8 + savedPartieDeChasse.chasseurs!![1].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![2].nom shouldBe "Robert" + savedPartieDeChasse.chasseurs!![2].ballesRestantes shouldBe 12 + savedPartieDeChasse.chasseurs!![2].nbGalinettes shouldBe 0 + } + + scenario("échoue car partie n'existe pas") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.prendreLapéro(id) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue si les chasseurs sont déja en apéro") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.APÉRO + events = mutableListOf() + } + + ) + + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.prendreLapéro(id) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue si la partie de chasse est terminée") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.TERMINÉE + events = mutableListOf() + } + + ) + + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.prendreLapéro(id) + } + repository.savedPartieDeChasse shouldBe null + } + } + + feature("reprendre la partie de chasse") { + scenario("quand l'apéro est en cours") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.APÉRO + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + service.reprendreLaPartie(id) + + val savedPartieDeChasse = repository.savedPartieDeChasse!! + savedPartieDeChasse.id shouldBe id + savedPartieDeChasse.status shouldBe PartieStatus.EN_COURS + savedPartieDeChasse.terrain!!.nom shouldBe "Pitibon sur Sauldre" + savedPartieDeChasse.terrain!!.nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!! shouldHaveSize 3 + savedPartieDeChasse.chasseurs!![0].nom shouldBe "Dédé" + savedPartieDeChasse.chasseurs!![0].ballesRestantes shouldBe 20 + savedPartieDeChasse.chasseurs!![0].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![1].nom shouldBe "Bernard" + savedPartieDeChasse.chasseurs!![1].ballesRestantes shouldBe 8 + savedPartieDeChasse.chasseurs!![1].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![2].nom shouldBe "Robert" + savedPartieDeChasse.chasseurs!![2].ballesRestantes shouldBe 12 + savedPartieDeChasse.chasseurs!![2].nbGalinettes shouldBe 0 + } + + scenario("échoue car partie n'existe pas") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.reprendreLaPartie(id) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue si la partie de chasse est en cours") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.reprendreLaPartie(id) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue si la partie de chasse est terminée") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.TERMINÉE + events = mutableListOf() + } + + ) + + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.reprendreLaPartie(id) + } + repository.savedPartieDeChasse shouldBe null + } + } + + feature("terminer la partie de chasse") { + scenario("quand la partie est en cours et 1 seul chasseur gagne") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + this.nbGalinettes = 2 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + val meilleurChasseur = service.terminerLaPartie(id) + + val savedPartieDeChasse = repository.savedPartieDeChasse!! + savedPartieDeChasse.id shouldBe id + savedPartieDeChasse.status shouldBe PartieStatus.TERMINÉE + savedPartieDeChasse.terrain!!.nom shouldBe "Pitibon sur Sauldre" + savedPartieDeChasse.terrain!!.nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!! shouldHaveSize 3 + savedPartieDeChasse.chasseurs!![0].nom shouldBe "Dédé" + savedPartieDeChasse.chasseurs!![0].ballesRestantes shouldBe 20 + savedPartieDeChasse.chasseurs!![0].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![1].nom shouldBe "Bernard" + savedPartieDeChasse.chasseurs!![1].ballesRestantes shouldBe 8 + savedPartieDeChasse.chasseurs!![1].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![2].nom shouldBe "Robert" + savedPartieDeChasse.chasseurs!![2].ballesRestantes shouldBe 12 + savedPartieDeChasse.chasseurs!![2].nbGalinettes shouldBe 2 + + meilleurChasseur shouldBe "Robert" + } + + scenario("quand la partie est en cours et 1 seul chasseur dans la partie") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + this.nbGalinettes = 2 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + val meilleurChasseur = service.terminerLaPartie(id) + + val savedPartieDeChasse = repository.savedPartieDeChasse!! + savedPartieDeChasse.id shouldBe id + savedPartieDeChasse.status shouldBe PartieStatus.TERMINÉE + savedPartieDeChasse.terrain!!.nom shouldBe "Pitibon sur Sauldre" + savedPartieDeChasse.terrain!!.nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!! shouldHaveSize 1 + savedPartieDeChasse.chasseurs!![0].nom shouldBe "Robert" + savedPartieDeChasse.chasseurs!![0].ballesRestantes shouldBe 12 + savedPartieDeChasse.chasseurs!![0].nbGalinettes shouldBe 2 + + meilleurChasseur shouldBe "Robert" + } + + scenario("quand la partie est en cours et 2 chasseurs ex aequo") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + this.nbGalinettes = 2 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + this.nbGalinettes = 2 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + val meilleurChasseur = service.terminerLaPartie(id) + + val savedPartieDeChasse = repository.savedPartieDeChasse!! + savedPartieDeChasse.id shouldBe id + savedPartieDeChasse.status shouldBe PartieStatus.TERMINÉE + savedPartieDeChasse.terrain!!.nom shouldBe "Pitibon sur Sauldre" + savedPartieDeChasse.terrain!!.nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!! shouldHaveSize 3 + savedPartieDeChasse.chasseurs!![0].nom shouldBe "Dédé" + savedPartieDeChasse.chasseurs!![0].ballesRestantes shouldBe 20 + savedPartieDeChasse.chasseurs!![0].nbGalinettes shouldBe 2 + savedPartieDeChasse.chasseurs!![1].nom shouldBe "Bernard" + savedPartieDeChasse.chasseurs!![1].ballesRestantes shouldBe 8 + savedPartieDeChasse.chasseurs!![1].nbGalinettes shouldBe 2 + savedPartieDeChasse.chasseurs!![2].nom shouldBe "Robert" + savedPartieDeChasse.chasseurs!![2].ballesRestantes shouldBe 12 + savedPartieDeChasse.chasseurs!![2].nbGalinettes shouldBe 0 + + meilleurChasseur shouldBe "Dédé, Bernard" + } + + scenario("quand la partie est en cours et tout le monde brocouille") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + val meilleurChasseur = service.terminerLaPartie(id) + + val savedPartieDeChasse = repository.savedPartieDeChasse!! + savedPartieDeChasse.id shouldBe id + savedPartieDeChasse.status shouldBe PartieStatus.TERMINÉE + savedPartieDeChasse.terrain!!.nom shouldBe "Pitibon sur Sauldre" + savedPartieDeChasse.terrain!!.nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!! shouldHaveSize 3 + savedPartieDeChasse.chasseurs!![0].nom shouldBe "Dédé" + savedPartieDeChasse.chasseurs!![0].ballesRestantes shouldBe 20 + savedPartieDeChasse.chasseurs!![0].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![1].nom shouldBe "Bernard" + savedPartieDeChasse.chasseurs!![1].ballesRestantes shouldBe 8 + savedPartieDeChasse.chasseurs!![1].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![2].nom shouldBe "Robert" + savedPartieDeChasse.chasseurs!![2].ballesRestantes shouldBe 12 + savedPartieDeChasse.chasseurs!![2].nbGalinettes shouldBe 0 + + meilleurChasseur shouldBe "Brocouille" + } + + scenario("quand les chasseurs sont à l'apéro et tous ex aequo") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + this.nbGalinettes = 3 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + this.nbGalinettes = 3 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + this.nbGalinettes = 3 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.APÉRO + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + val meilleurChasseur = service.terminerLaPartie(id) + + val savedPartieDeChasse = repository.savedPartieDeChasse!! + savedPartieDeChasse.id shouldBe id + savedPartieDeChasse.status shouldBe PartieStatus.TERMINÉE + savedPartieDeChasse.terrain!!.nom shouldBe "Pitibon sur Sauldre" + savedPartieDeChasse.terrain!!.nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!! shouldHaveSize 3 + savedPartieDeChasse.chasseurs!![0].nom shouldBe "Dédé" + savedPartieDeChasse.chasseurs!![0].ballesRestantes shouldBe 20 + savedPartieDeChasse.chasseurs!![0].nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!![1].nom shouldBe "Bernard" + savedPartieDeChasse.chasseurs!![1].ballesRestantes shouldBe 8 + savedPartieDeChasse.chasseurs!![1].nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!![2].nom shouldBe "Robert" + savedPartieDeChasse.chasseurs!![2].ballesRestantes shouldBe 12 + savedPartieDeChasse.chasseurs!![2].nbGalinettes shouldBe 3 + + meilleurChasseur shouldBe "Dédé, Bernard, Robert" + } + + scenario("échoue si la partie est déjà terminée") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.TERMINÉE + events = mutableListOf() + } + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.reprendreLaPartie(id) + } + repository.savedPartieDeChasse shouldBe null + } + } + + feature("consulter status") { + scenario("quand la partie vient de démarrer") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + this.nbGalinettes = 3 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + this.nbGalinettes = 3 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + this.nbGalinettes = 3 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf( + Event( + LocalDateTime.of(2024, APRIL, 25, 9, 0, 12), + "La partie de chasse commence à Pitibon sur Sauldre avec Dédé (20 balles), Bernard (8 balles), Robert (12 balles)" + ) + ) + } + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + val status = service.consulterStatus(id) + + status shouldBe "09:00 - La partie de chasse commence à Pitibon sur Sauldre avec Dédé (20 balles), Bernard (8 balles), Robert (12 balles)" + } + + scenario("quand la partie est terminée") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + this.nbGalinettes = 3 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + this.nbGalinettes = 3 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + this.nbGalinettes = 3 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf( + Event( + LocalDateTime.of(2024, APRIL, 25, 9, 0, 12), + "La partie de chasse commence à Pitibon sur Sauldre avec Dédé (20 balles), Bernard (8 balles), Robert (12 balles)" + ), + Event(LocalDateTime.of(2024, APRIL, 25, 9, 10, 0), "Dédé tire"), + Event(LocalDateTime.of(2024, APRIL, 25, 9, 40, 0), "Robert tire sur une galinette"), + Event(LocalDateTime.of(2024, APRIL, 25, 10, 0, 0), "Petit apéro"), + Event(LocalDateTime.of(2024, APRIL, 25, 11, 0, 0), "Reprise de la chasse"), + Event(LocalDateTime.of(2024, APRIL, 25, 11, 2, 0), "Bernard tire"), + Event(LocalDateTime.of(2024, APRIL, 25, 11, 3, 0), "Bernard tire"), + Event(LocalDateTime.of(2024, APRIL, 25, 11, 4, 0), "Dédé tire sur une galinette"), + Event(LocalDateTime.of(2024, APRIL, 25, 11, 30, 0), "Robert tire sur une galinette"), + Event(LocalDateTime.of(2024, APRIL, 25, 11, 40, 0), "Petit apéro"), + Event(LocalDateTime.of(2024, APRIL, 25, 14, 30, 0), "Reprise de la chasse"), + Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 0), "Bernard tire"), + Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 1), "Bernard tire"), + Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 2), "Bernard tire"), + Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 3), "Bernard tire"), + Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 4), "Bernard tire"), + Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 5), "Bernard tire"), + Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 6), "Bernard tire"), + Event( + LocalDateTime.of(2024, APRIL, 25, 14, 41, 7), + "Bernard tire -> T'as plus de balles mon vieux, chasse à la main" + ), + Event(LocalDateTime.of(2024, APRIL, 25, 15, 0, 0), "Robert tire sur une galinette"), + Event( + LocalDateTime.of(2024, APRIL, 25, 15, 30, 0), + "La partie de chasse est terminée, vainqueur : Robert - 3 galinettes" + ) + ) + } + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + val status = service.consulterStatus(id) + + status shouldBe "15:30 - La partie de chasse est terminée, vainqueur : Robert - 3 galinettes" + lineSeparator() + + "15:00 - Robert tire sur une galinette" + lineSeparator() + + "14:41 - Bernard tire -> T'as plus de balles mon vieux, chasse à la main" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:30 - Reprise de la chasse" + lineSeparator() + + "11:40 - Petit apéro" + lineSeparator() + + "11:30 - Robert tire sur une galinette" + lineSeparator() + + "11:04 - Dédé tire sur une galinette" + lineSeparator() + + "11:03 - Bernard tire" + lineSeparator() + + "11:02 - Bernard tire" + lineSeparator() + + "11:00 - Reprise de la chasse" + lineSeparator() + + "10:00 - Petit apéro" + lineSeparator() + + "09:40 - Robert tire sur une galinette" + lineSeparator() + + "09:10 - Dédé tire" + lineSeparator() + + "09:00 - La partie de chasse commence à Pitibon sur Sauldre avec Dédé (20 balles), Bernard (8 balles), Robert (12 balles)" + } + } +}) \ No newline at end of file diff --git a/kotlin/src/test/kotlin/bouchonnois/tests/service/ScenarioTests.kt b/kotlin/src/test/kotlin/bouchonnois/tests/service/ScenarioTests.kt new file mode 100644 index 0000000..e3171fd --- /dev/null +++ b/kotlin/src/test/kotlin/bouchonnois/tests/service/ScenarioTests.kt @@ -0,0 +1,113 @@ +package bouchonnois.tests.service + +import bouchonnois.service.PartieDeChasseService +import bouchonnois.service.exceptions.TasPlusDeBallesMonVieuxChasseALaMain +import bouchonnois.tests.doubles.PartieDeChasseRepositoryForTests +import io.kotest.core.spec.style.FeatureSpec +import io.kotest.matchers.shouldBe +import java.lang.System.lineSeparator +import java.time.LocalDateTime +import java.time.Month + +class ScenarioTests : FeatureSpec({ + feature("test d'acceptation métier") { + var time = LocalDateTime.of(2024, Month.APRIL, 25, 9, 0, 0) + + scenario("dérouler une partie") { + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { time } + val chasseurs = mapOf( + ("Dédé" to 20), + ("Bernard" to 8), + ("Robert" to 12) + ) + val terrainDeChasse = ("Pitibon sur Sauldre" to 4) + + val id = service.démarrer( + terrainDeChasse, + chasseurs + ) + + time = time.plusMinutes(10) + service.tirer(id, "Dédé") + + time = time.plusMinutes(30) + service.tirerSurUneGalinette(id, "Robert") + + time = time.plusMinutes(20) + service.prendreLapéro(id) + + time = time.plusHours(1) + service.reprendreLaPartie(id) + + time = time.plusMinutes(2) + service.tirer(id, "Bernard") + + time = time.plusMinutes(1) + service.tirer(id, "Bernard") + + time = time.plusMinutes(1) + service.tirerSurUneGalinette(id, "Dédé") + + time = time.plusMinutes(26) + service.tirerSurUneGalinette(id, "Robert") + + time = time.plusMinutes(10) + service.prendreLapéro(id) + + time = time.plusMinutes(170) + service.reprendreLaPartie(id) + + time = time.plusMinutes(11) + service.tirer(id, "Bernard") + + time = time.plusSeconds(1) + service.tirer(id, "Bernard") + + time = time.plusSeconds(1) + service.tirer(id, "Bernard") + + time = time.plusSeconds(1) + service.tirer(id, "Bernard") + + time = time.plusSeconds(1) + service.tirer(id, "Bernard") + + time = time.plusSeconds(1) + service.tirer(id, "Bernard") + + time = time.plusSeconds(1) + + try { + service.tirer(id, "Bernard") + } catch (e: TasPlusDeBallesMonVieuxChasseALaMain) { + } + + time = time.plusMinutes(19) + service.tirerSurUneGalinette(id, "Robert") + + time = time.plusMinutes(30) + service.terminerLaPartie(id) + + service.consulterStatus(id) shouldBe "15:30 - La partie de chasse est terminée, vainqueur : Robert - 3 galinettes" + lineSeparator() + + "15:00 - Robert tire sur une galinette" + lineSeparator() + + "14:41 - Bernard tire -> T'as plus de balles mon vieux, chasse à la main" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:30 - Reprise de la chasse" + lineSeparator() + + "11:40 - Petit apéro" + lineSeparator() + + "11:30 - Robert tire sur une galinette" + lineSeparator() + + "11:04 - Dédé tire sur une galinette" + lineSeparator() + + "11:03 - Bernard tire" + lineSeparator() + + "11:02 - Bernard tire" + lineSeparator() + + "11:00 - Reprise de la chasse" + lineSeparator() + + "10:00 - Petit apéro" + lineSeparator() + + "09:40 - Robert tire sur une galinette" + lineSeparator() + + "09:10 - Dédé tire" + lineSeparator() + "09:00 - La partie de chasse commence à Pitibon sur Sauldre avec Dédé (20 balles), Bernard (8 balles), Robert (12 balles)" + } + } +}) \ No newline at end of file From 05b7f638e07a4912044a92dc266b08628f72f555 Mon Sep 17 00:00:00 2001 From: Yoan Thirion Date: Thu, 16 Nov 2023 20:48:34 +0100 Subject: [PATCH 02/14] adapt branches for CI --- .github/workflows/c#.yml | 2 +- .github/workflows/java.yml | 15 ++++++++++++++- .github/workflows/kotlin.yml | 15 ++++++++++++++- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/.github/workflows/c#.yml b/.github/workflows/c#.yml index 1db772e..1539518 100644 --- a/.github/workflows/c#.yml +++ b/.github/workflows/c#.yml @@ -1,4 +1,4 @@ -name: SonarCloud +name: C# CI on: push: branches: diff --git a/.github/workflows/java.yml b/.github/workflows/java.yml index 7b62f26..7fd5c81 100644 --- a/.github/workflows/java.yml +++ b/.github/workflows/java.yml @@ -1,7 +1,20 @@ name: Java CI on: push: - branches: [ main ] + branches: + - main + - steps/01-gather-metrics + - steps/02-treat-warnings-as-errors + - steps/03-kill-mutants + - steps/04-improve-tests-readability + - steps/05-approve-everything + - steps/06-properties + - steps/07-architecture-tests + - steps/08-use-cases + - steps/09-tell-dont-ask + - steps/10-commands + - steps/11-avoid-exceptions + - steps/12-event-sourcing jobs: build: name: Build diff --git a/.github/workflows/kotlin.yml b/.github/workflows/kotlin.yml index 95b92fe..e4c4f89 100644 --- a/.github/workflows/kotlin.yml +++ b/.github/workflows/kotlin.yml @@ -1,7 +1,20 @@ name: Kotlin CI on: push: - branches: [ main ] + branches: + - main + - steps/01-gather-metrics + - steps/02-treat-warnings-as-errors + - steps/03-kill-mutants + - steps/04-improve-tests-readability + - steps/05-approve-everything + - steps/06-properties + - steps/07-architecture-tests + - steps/08-use-cases + - steps/09-tell-dont-ask + - steps/10-commands + - steps/11-avoid-exceptions + - steps/12-event-sourcing jobs: build: name: Build From b8fcc0814436d7a4b1260f6903f76709166d8bc4 Mon Sep 17 00:00:00 2001 From: Yoan Thirion Date: Thu, 16 Nov 2023 21:15:53 +0100 Subject: [PATCH 03/14] add jacoco / pitest for java --- java/pom.xml | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/java/pom.xml b/java/pom.xml index e301216..b20f6ce 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -16,12 +16,15 @@ 1.18.30 0.10.4 3.24.2 + 0.8.10 + 1.14.2 + 1.2.0 org.junit.jupiter - junit-jupiter-api + junit-jupiter ${junit.version} test @@ -42,6 +45,60 @@ ${assertJ.version} test - + + org.pitest + pitest-junit5-plugin + ${pitest-junit5.version} + test + + + + + + org.jacoco + jacoco-maven-plugin + ${jacoco.version} + + + default-prepare-agent + + prepare-agent + + + + default-report + + report + + + + default-check + + check + + + + + BUNDLE + + + COMPLEXITY + COVEREDRATIO + 0.60 + + + + + + + + + + org.pitest + pitest-maven + ${pitest.version} + + + \ No newline at end of file From 3f879bcbde1849dcd93464a0d5cc14a74f01f335 Mon Sep 17 00:00:00 2001 From: Yoan Thirion Date: Thu, 16 Nov 2023 21:22:39 +0100 Subject: [PATCH 04/14] add jacoco for kt --- kotlin/build.gradle.kts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/kotlin/build.gradle.kts b/kotlin/build.gradle.kts index 7629f90..049f2f4 100644 --- a/kotlin/build.gradle.kts +++ b/kotlin/build.gradle.kts @@ -1,6 +1,7 @@ plugins { kotlin("jvm") version "1.9.20" application + jacoco } group = "org.bouchonnois" @@ -16,12 +17,24 @@ dependencies { tasks.test { useJUnitPlatform() + finalizedBy(tasks.jacocoTestReport) } kotlin { jvmToolchain(8) } +jacoco { + toolVersion = "0.8.7" +} + +tasks.jacocoTestReport { + dependsOn(tasks.test) + reports { + xml.required.set(true) + } +} + application { mainClass.set("MainKt") } \ No newline at end of file From 60df9aa829eec6aa83d9d07dc12f87363908b80d Mon Sep 17 00:00:00 2001 From: Yoan Thirion Date: Thu, 16 Nov 2023 21:42:59 +0100 Subject: [PATCH 05/14] add pitest for kt --- kotlin/build.gradle.kts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/kotlin/build.gradle.kts b/kotlin/build.gradle.kts index 049f2f4..66586b9 100644 --- a/kotlin/build.gradle.kts +++ b/kotlin/build.gradle.kts @@ -1,7 +1,10 @@ +import info.solidsoft.gradle.pitest.PitestPluginExtension + plugins { kotlin("jvm") version "1.9.20" application jacoco + id("info.solidsoft.pitest") version "1.9.11" } group = "org.bouchonnois" @@ -13,6 +16,7 @@ repositories { dependencies { testImplementation("io.kotest:kotest-runner-junit5:5.7.2") + testImplementation("io.kotest.extensions:kotest-extensions-pitest:1.2.0") } tasks.test { @@ -35,6 +39,10 @@ tasks.jacocoTestReport { } } +configure { + targetClasses.set(listOf("bouchonnois.*")) +} + application { mainClass.set("MainKt") } \ No newline at end of file From 189cbf8f3f9da9b55b5dbff4acb19241397e7472 Mon Sep 17 00:00:00 2001 From: Yoan Thirion Date: Thu, 16 Nov 2023 21:56:30 +0100 Subject: [PATCH 06/14] add java / kt --- .github/workflows/{build.yml => c#.yml} | 14 +- .github/workflows/java.yml | 34 + .github/workflows/kotlin.yml | 36 + .gitignore | 63 +- README.md | 23 +- .../Bouchonnois.Tests.csproj | 0 .../PartieDeChasseRepositoryForTests.cs | 0 .../Service/PartieDeChasseServiceTests.cs | 0 .../Service/ScenarioTests.cs | 0 .../Bouchonnois.Tests}/Usings.cs | 0 Bouchonnois.sln => c#/Bouchonnois.sln | 0 .../Bouchonnois}/Bouchonnois.csproj | 0 .../Bouchonnois}/Domain/Chasseur.cs | 0 .../Bouchonnois}/Domain/Event.cs | 0 .../Bouchonnois}/Domain/PartieDeChasse.cs | 0 .../Bouchonnois}/Domain/PartieStatus.cs | 0 .../Repository/IPartieDeChasseRepository.cs | 0 .../Service/Exceptions/ChasseurInconnu.cs | 0 ...marrerUnePartieAvecUnChasseurSansBalle.cs" | 0 ...DeD\303\251marrerUnePartieSansChasseur.cs" | 0 ...D\303\251marrerUnePartieSansGalinettes.cs" | 0 .../LaChasseEstD\303\251j\303\240EnCours.cs" | 0 .../Exceptions/LaPartieDeChasseNexistePas.cs | 0 ...j\303\240EnTrainDePrendreLap\303\251ro.cs" | 0 ...3\251roQuandLaPartieEstTermin\303\251e.cs" | 0 ...asPendantLap\303\251roCestSacr\303\251.cs" | 0 ...TirePasQuandLaPartieEstTermin\303\251e.cs" | 0 .../Exceptions/QuandCestFiniCestFini.cs | 0 .../TasPlusDeBallesMonVieuxChasseALaMain.cs | 0 ...ol\303\251MonVieuxTasRienTouch\303\251.cs" | 0 .../Service/PartieDeChasseService.cs | 0 .../Bouchonnois}/Service/Terrain.cs | 0 java/pom.xml | 118 ++ .../java/bouchonnois/domain/Chasseur.java | 10 + .../main/java/bouchonnois/domain/Event.java | 11 + .../bouchonnois/domain/PartieDeChasse.java | 16 + .../java/bouchonnois/domain/PartieStatus.java | 5 + .../repository/PartieDeChasseRepository.java | 11 + .../service/PartieDeChasseService.java | 251 +++ .../java/bouchonnois/service/Terrain.java | 9 + .../service/exceptions/ChasseurInconnu.java | 7 + ...rrerUnePartieAvecUnChasseurSansBalle.java" | 4 + ...D\303\251marrerUnePartieSansChasseur.java" | 4 + ...303\251marrerUnePartieSansGalinettes.java" | 5 + .../LaChasseEstD\303\251jaEnCours.java" | 4 + .../LaPartieDeChasseNexistePas.java | 4 + ...3\251jaEnTrainDePrendreLap\303\251ro.java" | 4 + ...251roQuandLaPartieEstTermin\303\251e.java" | 4 + ...PendantLap\303\251roCestSacr\303\251.java" | 4 + .../OnTirePasQuandLaPartieEstTerminee.java | 4 + .../exceptions/QuandCestFiniCestFini.java | 4 + .../TasPlusDeBallesMonVieuxChasseALaMain.java | 4 + .../TasTropPicoledMonVieuxTasRienTouche.java | 4 + .../PartieDeChasseRepositoryForTests.java | 30 + .../service/PartieDeChasseServiceTests.java | 1257 +++++++++++++++ .../tests/service/ScenarioTests.java | 120 ++ kotlin/.gitignore | 42 + kotlin/build.gradle.kts | 48 + kotlin/gradle.properties | 1 + kotlin/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 60756 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + kotlin/gradlew | 234 +++ kotlin/gradlew.bat | 89 ++ kotlin/settings.gradle.kts | 12 + .../kotlin/bouchonnois/domain/Chasseur.kt | 7 + .../main/kotlin/bouchonnois/domain/Event.kt | 10 + .../bouchonnois/domain/PartieDeChasse.kt | 12 + .../kotlin/bouchonnois/domain/PartieStatus.kt | 8 + .../repository/PartieDeChasseRepository.kt | 9 + .../service/PartieDeChasseService.kt | 249 +++ .../kotlin/bouchonnois/service/Terrain.kt | 6 + .../service/exceptions/ChasseurInconnu.kt | 4 + ...marrerUnePartieAvecUnChasseurSansBalle.kt" | 4 + ...DeD\303\251marrerUnePartieSansChasseur.kt" | 3 + ...D\303\251marrerUnePartieSansGalinettes.kt" | 4 + .../LaChasseEstD\303\251jaEnCours.kt" | 4 + .../exceptions/LaPartieDeChasseNexistePas.kt | 4 + ...303\251jaEnTrainDePrendreLap\303\251ro.kt" | 3 + ...3\251roQuandLaPartieEstTermin\303\251e.kt" | 3 + ...asPendantLap\303\251roCestSacr\303\251.kt" | 4 + .../OnTirePasQuandLaPartieEstTerminee.kt | 3 + .../exceptions/QuandCestFiniCestFini.kt | 4 + .../TasPlusDeBallesMonVieuxChasseALaMain.kt | 3 + .../TasTropPicoledMonVieuxTasRienTouche.kt | 4 + .../PartieDeChasseRepositoryForTests.kt | 22 + .../service/PartieDeChasseServiceTests.kt | 1341 +++++++++++++++++ .../tests/service/ScenarioTests.kt | 113 ++ 87 files changed, 4301 insertions(+), 18 deletions(-) rename .github/workflows/{build.yml => c#.yml} (87%) create mode 100644 .github/workflows/java.yml create mode 100644 .github/workflows/kotlin.yml rename {Bouchonnois.Tests => c#/Bouchonnois.Tests}/Bouchonnois.Tests.csproj (100%) rename {Bouchonnois.Tests => c#/Bouchonnois.Tests}/Doubles/PartieDeChasseRepositoryForTests.cs (100%) rename {Bouchonnois.Tests => c#/Bouchonnois.Tests}/Service/PartieDeChasseServiceTests.cs (100%) rename {Bouchonnois.Tests => c#/Bouchonnois.Tests}/Service/ScenarioTests.cs (100%) rename {Bouchonnois.Tests => c#/Bouchonnois.Tests}/Usings.cs (100%) rename Bouchonnois.sln => c#/Bouchonnois.sln (100%) rename {Bouchonnois => c#/Bouchonnois}/Bouchonnois.csproj (100%) rename {Bouchonnois => c#/Bouchonnois}/Domain/Chasseur.cs (100%) rename {Bouchonnois => c#/Bouchonnois}/Domain/Event.cs (100%) rename {Bouchonnois => c#/Bouchonnois}/Domain/PartieDeChasse.cs (100%) rename {Bouchonnois => c#/Bouchonnois}/Domain/PartieStatus.cs (100%) rename {Bouchonnois => c#/Bouchonnois}/Repository/IPartieDeChasseRepository.cs (100%) rename {Bouchonnois => c#/Bouchonnois}/Service/Exceptions/ChasseurInconnu.cs (100%) rename "Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.cs" => "c#/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.cs" (100%) rename "Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.cs" => "c#/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.cs" (100%) rename "Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.cs" => "c#/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.cs" (100%) rename "Bouchonnois/Service/Exceptions/LaChasseEstD\303\251j\303\240EnCours.cs" => "c#/Bouchonnois/Service/Exceptions/LaChasseEstD\303\251j\303\240EnCours.cs" (100%) rename {Bouchonnois => c#/Bouchonnois}/Service/Exceptions/LaPartieDeChasseNexistePas.cs (100%) rename "Bouchonnois/Service/Exceptions/OnEstD\303\251j\303\240EnTrainDePrendreLap\303\251ro.cs" => "c#/Bouchonnois/Service/Exceptions/OnEstD\303\251j\303\240EnTrainDePrendreLap\303\251ro.cs" (100%) rename "Bouchonnois/Service/Exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.cs" => "c#/Bouchonnois/Service/Exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.cs" (100%) rename "Bouchonnois/Service/Exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.cs" => "c#/Bouchonnois/Service/Exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.cs" (100%) rename "Bouchonnois/Service/Exceptions/OnTirePasQuandLaPartieEstTermin\303\251e.cs" => "c#/Bouchonnois/Service/Exceptions/OnTirePasQuandLaPartieEstTermin\303\251e.cs" (100%) rename {Bouchonnois => c#/Bouchonnois}/Service/Exceptions/QuandCestFiniCestFini.cs (100%) rename {Bouchonnois => c#/Bouchonnois}/Service/Exceptions/TasPlusDeBallesMonVieuxChasseALaMain.cs (100%) rename "Bouchonnois/Service/Exceptions/TasTropPicol\303\251MonVieuxTasRienTouch\303\251.cs" => "c#/Bouchonnois/Service/Exceptions/TasTropPicol\303\251MonVieuxTasRienTouch\303\251.cs" (100%) rename {Bouchonnois => c#/Bouchonnois}/Service/PartieDeChasseService.cs (100%) rename {Bouchonnois => c#/Bouchonnois}/Service/Terrain.cs (100%) create mode 100644 java/pom.xml create mode 100644 java/src/main/java/bouchonnois/domain/Chasseur.java create mode 100644 java/src/main/java/bouchonnois/domain/Event.java create mode 100644 java/src/main/java/bouchonnois/domain/PartieDeChasse.java create mode 100644 java/src/main/java/bouchonnois/domain/PartieStatus.java create mode 100644 java/src/main/java/bouchonnois/repository/PartieDeChasseRepository.java create mode 100644 java/src/main/java/bouchonnois/service/PartieDeChasseService.java create mode 100644 java/src/main/java/bouchonnois/service/Terrain.java create mode 100644 java/src/main/java/bouchonnois/service/exceptions/ChasseurInconnu.java create mode 100644 "java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.java" create mode 100644 "java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.java" create mode 100644 "java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.java" create mode 100644 "java/src/main/java/bouchonnois/service/exceptions/LaChasseEstD\303\251jaEnCours.java" create mode 100644 java/src/main/java/bouchonnois/service/exceptions/LaPartieDeChasseNexistePas.java create mode 100644 "java/src/main/java/bouchonnois/service/exceptions/OnEstD\303\251jaEnTrainDePrendreLap\303\251ro.java" create mode 100644 "java/src/main/java/bouchonnois/service/exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.java" create mode 100644 "java/src/main/java/bouchonnois/service/exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.java" create mode 100644 java/src/main/java/bouchonnois/service/exceptions/OnTirePasQuandLaPartieEstTerminee.java create mode 100644 java/src/main/java/bouchonnois/service/exceptions/QuandCestFiniCestFini.java create mode 100644 java/src/main/java/bouchonnois/service/exceptions/TasPlusDeBallesMonVieuxChasseALaMain.java create mode 100644 java/src/main/java/bouchonnois/service/exceptions/TasTropPicoledMonVieuxTasRienTouche.java create mode 100644 java/src/test/java/bouchonnois/tests/doubles/PartieDeChasseRepositoryForTests.java create mode 100644 java/src/test/java/bouchonnois/tests/service/PartieDeChasseServiceTests.java create mode 100644 java/src/test/java/bouchonnois/tests/service/ScenarioTests.java create mode 100644 kotlin/.gitignore create mode 100644 kotlin/build.gradle.kts create mode 100644 kotlin/gradle.properties create mode 100644 kotlin/gradle/wrapper/gradle-wrapper.jar create mode 100644 kotlin/gradle/wrapper/gradle-wrapper.properties create mode 100755 kotlin/gradlew create mode 100644 kotlin/gradlew.bat create mode 100644 kotlin/settings.gradle.kts create mode 100644 kotlin/src/main/kotlin/bouchonnois/domain/Chasseur.kt create mode 100644 kotlin/src/main/kotlin/bouchonnois/domain/Event.kt create mode 100644 kotlin/src/main/kotlin/bouchonnois/domain/PartieDeChasse.kt create mode 100644 kotlin/src/main/kotlin/bouchonnois/domain/PartieStatus.kt create mode 100644 kotlin/src/main/kotlin/bouchonnois/repository/PartieDeChasseRepository.kt create mode 100644 kotlin/src/main/kotlin/bouchonnois/service/PartieDeChasseService.kt create mode 100644 kotlin/src/main/kotlin/bouchonnois/service/Terrain.kt create mode 100644 kotlin/src/main/kotlin/bouchonnois/service/exceptions/ChasseurInconnu.kt create mode 100644 "kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.kt" create mode 100644 "kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.kt" create mode 100644 "kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.kt" create mode 100644 "kotlin/src/main/kotlin/bouchonnois/service/exceptions/LaChasseEstD\303\251jaEnCours.kt" create mode 100644 kotlin/src/main/kotlin/bouchonnois/service/exceptions/LaPartieDeChasseNexistePas.kt create mode 100644 "kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnEstD\303\251jaEnTrainDePrendreLap\303\251ro.kt" create mode 100644 "kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.kt" create mode 100644 "kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.kt" create mode 100644 kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnTirePasQuandLaPartieEstTerminee.kt create mode 100644 kotlin/src/main/kotlin/bouchonnois/service/exceptions/QuandCestFiniCestFini.kt create mode 100644 kotlin/src/main/kotlin/bouchonnois/service/exceptions/TasPlusDeBallesMonVieuxChasseALaMain.kt create mode 100644 kotlin/src/main/kotlin/bouchonnois/service/exceptions/TasTropPicoledMonVieuxTasRienTouche.kt create mode 100644 kotlin/src/test/kotlin/bouchonnois/tests/doubles/PartieDeChasseRepositoryForTests.kt create mode 100644 kotlin/src/test/kotlin/bouchonnois/tests/service/PartieDeChasseServiceTests.kt create mode 100644 kotlin/src/test/kotlin/bouchonnois/tests/service/ScenarioTests.kt diff --git a/.github/workflows/build.yml b/.github/workflows/c#.yml similarity index 87% rename from .github/workflows/build.yml rename to .github/workflows/c#.yml index 90a2bcc..1539518 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/c#.yml @@ -1,4 +1,4 @@ -name: SonarCloud +name: C# CI on: push: branches: @@ -20,11 +20,11 @@ jobs: name: Build and analyze runs-on: windows-latest steps: - - name: Set up JDK 11 + - name: Set up JDK 17 uses: actions/setup-java@v3 with: - java-version: 11 - distribution: 'zulu' # Alternative distribution options are available. + java-version: 17 + distribution: 'zulu' - uses: actions/checkout@v3 with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis @@ -55,6 +55,6 @@ jobs: run: | dotnet tool install --global dotnet-coverage .\.sonar\scanner\dotnet-sonarscanner begin /k:"ythirion_refactoring-du-bouchonnois" /o:"ythirion" /d:sonar.login="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.vscoveragexml.reportsPaths=coverage.xml - dotnet build - dotnet-coverage collect "dotnet test" -f xml -o "coverage.xml" - .\.sonar\scanner\dotnet-sonarscanner end /d:sonar.login="${{ secrets.SONAR_TOKEN }}" + dotnet build c#/ + dotnet-coverage collect "dotnet test c#/" -f xml -o "coverage.xml" + .\.sonar\scanner\dotnet-sonarscanner end /d:sonar.login="${{ secrets.SONAR_TOKEN }}" \ No newline at end of file diff --git a/.github/workflows/java.yml b/.github/workflows/java.yml new file mode 100644 index 0000000..7fd5c81 --- /dev/null +++ b/.github/workflows/java.yml @@ -0,0 +1,34 @@ +name: Java CI +on: + push: + branches: + - main + - steps/01-gather-metrics + - steps/02-treat-warnings-as-errors + - steps/03-kill-mutants + - steps/04-improve-tests-readability + - steps/05-approve-everything + - steps/06-properties + - steps/07-architecture-tests + - steps/08-use-cases + - steps/09-tell-dont-ask + - steps/10-commands + - steps/11-avoid-exceptions + - steps/12-event-sourcing +jobs: + build: + name: Build + strategy: + matrix: + platform: [ubuntu-latest] + runs-on: ${{matrix.platform}} + steps: + - uses: actions/checkout@v3 + - name: Set up JDK 21 + uses: actions/setup-java@v3 + with: + java-version: '21' + distribution: 'zulu' + - name: Build and Test + working-directory: ./java + run: mvn test diff --git a/.github/workflows/kotlin.yml b/.github/workflows/kotlin.yml new file mode 100644 index 0000000..e4c4f89 --- /dev/null +++ b/.github/workflows/kotlin.yml @@ -0,0 +1,36 @@ +name: Kotlin CI +on: + push: + branches: + - main + - steps/01-gather-metrics + - steps/02-treat-warnings-as-errors + - steps/03-kill-mutants + - steps/04-improve-tests-readability + - steps/05-approve-everything + - steps/06-properties + - steps/07-architecture-tests + - steps/08-use-cases + - steps/09-tell-dont-ask + - steps/10-commands + - steps/11-avoid-exceptions + - steps/12-event-sourcing +jobs: + build: + name: Build + strategy: + matrix: + platform: [ubuntu-latest] + runs-on: ${{matrix.platform}} + steps: + - uses: actions/checkout@v3 + - name: Set up JDK 21 + uses: actions/setup-java@v3 + with: + java-version: '21' + distribution: 'zulu' + - name: Setup Gradle + uses: gradle/gradle-build-action@v2 + with: + arguments: build + build-root-directory: ./kotlin diff --git a/.gitignore b/.gitignore index 8bbfd35..5c16ebe 100644 --- a/.gitignore +++ b/.gitignore @@ -352,4 +352,65 @@ MigrationBackup/ target/ # Mac -.DS_Store \ No newline at end of file +.DS_Store + +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store + +.gradle +**/build/ +!src/**/build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Avoid ignore Gradle wrappper properties +!gradle-wrapper.properties + +# Cache of project +.gradletasknamecache + +# Eclipse Gradle plugin generated files +# Eclipse Core +.project +# JDT-specific (Eclipse Java Development Tools) +.classpath \ No newline at end of file diff --git a/README.md b/README.md index 02fcb48..bd9b138 100644 --- a/README.md +++ b/README.md @@ -29,16 +29,19 @@ Version PDF disponible [ici](example-mapping/example-mapping.pdf) ## Facilitation ### Pré-requis -Le code est disponible en `.NET 7`. +Le code est disponible en `C#` (`.NET 7`), `java`(21), `kotlin`. -Voici la liste des packages utilisés : -- `xUnit` -- `FluentAssertions` -- `Verify.xUnit` -- `FSCheck` -- `TngTech.ArchUnitNET.xUnit` -- `LanguageExt.Core` -- `FluentAssertions.LanguageExt` +Voici la liste des librairies utilisés / recommandées : + +| .NET | Java | Kotlin | +|-----------------------------------------------------------------------------------------------|--------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------| +| [`xUnit`](https://xunit.net/) | [`junit`](https://junit.org/junit5/) | [`Kotest`](https://kotest.io/) | +| [`FluentAssertions`](https://fluentassertions.com/) | [`assertJ`](https://joel-costigliola.github.io/assertj/) | Native `kotest` asertions | +| [`Verify.xUnit`](https://github.com/VerifyTests/Verify) | [`approvalTests`](https://github.com/approvals/approvaltests.java) | [`approvalTests`](https://github.com/approvals/approvaltests.java) | +| [`FSCheck`](https://fscheck.github.io/FsCheck/) | [`vavr-test`](https://github.com/vavr-io/vavr-test) | [`kotest-property`](https://kotest.io/docs/proptest/property-based-testing.html) | +| [`TngTech.ArchUnitNET.xUnit`](https://archunitnet.readthedocs.io/en/latest/) | [`archunit`](https://www.archunit.org/) | [`archunit`](https://www.archunit.org/) | +| [`LanguageExt.Core`](https://github.com/louthy/language-ext) | [`vavr`](https://www.vavr.io/) | [`arrow-kt`](https://arrow-kt.io/) | +| [`FluentAssertions.LanguageExt`](https://www.nuget.org/packages/FluentAssertions.LanguageExt) | [`assertj-vavr`](https://github.com/assertj/assertj-vavr) | [`kotest-extensions-arrow`](https://github.com/kotest/kotest-extensions-arrow#kotest-extensions-arrow) | Afin d'améliorer le code on te propose de suivre les étapes ci-dessous : @@ -56,7 +59,7 @@ Afin d'améliorer le code on te propose de suivre les étapes ci-dessous : - [12. Event Sourcing](facilitation/12.event-sourcing.md) Pour chaque étape : -- une proposition de solution "étape par étape" est proposée +- une proposition de solution "étape par étape" est proposée (en `C#` uniquement) - il existe 1 branche / étape ![Branches](img/branches.webp) diff --git a/Bouchonnois.Tests/Bouchonnois.Tests.csproj b/c#/Bouchonnois.Tests/Bouchonnois.Tests.csproj similarity index 100% rename from Bouchonnois.Tests/Bouchonnois.Tests.csproj rename to c#/Bouchonnois.Tests/Bouchonnois.Tests.csproj diff --git a/Bouchonnois.Tests/Doubles/PartieDeChasseRepositoryForTests.cs b/c#/Bouchonnois.Tests/Doubles/PartieDeChasseRepositoryForTests.cs similarity index 100% rename from Bouchonnois.Tests/Doubles/PartieDeChasseRepositoryForTests.cs rename to c#/Bouchonnois.Tests/Doubles/PartieDeChasseRepositoryForTests.cs diff --git a/Bouchonnois.Tests/Service/PartieDeChasseServiceTests.cs b/c#/Bouchonnois.Tests/Service/PartieDeChasseServiceTests.cs similarity index 100% rename from Bouchonnois.Tests/Service/PartieDeChasseServiceTests.cs rename to c#/Bouchonnois.Tests/Service/PartieDeChasseServiceTests.cs diff --git a/Bouchonnois.Tests/Service/ScenarioTests.cs b/c#/Bouchonnois.Tests/Service/ScenarioTests.cs similarity index 100% rename from Bouchonnois.Tests/Service/ScenarioTests.cs rename to c#/Bouchonnois.Tests/Service/ScenarioTests.cs diff --git a/Bouchonnois.Tests/Usings.cs b/c#/Bouchonnois.Tests/Usings.cs similarity index 100% rename from Bouchonnois.Tests/Usings.cs rename to c#/Bouchonnois.Tests/Usings.cs diff --git a/Bouchonnois.sln b/c#/Bouchonnois.sln similarity index 100% rename from Bouchonnois.sln rename to c#/Bouchonnois.sln diff --git a/Bouchonnois/Bouchonnois.csproj b/c#/Bouchonnois/Bouchonnois.csproj similarity index 100% rename from Bouchonnois/Bouchonnois.csproj rename to c#/Bouchonnois/Bouchonnois.csproj diff --git a/Bouchonnois/Domain/Chasseur.cs b/c#/Bouchonnois/Domain/Chasseur.cs similarity index 100% rename from Bouchonnois/Domain/Chasseur.cs rename to c#/Bouchonnois/Domain/Chasseur.cs diff --git a/Bouchonnois/Domain/Event.cs b/c#/Bouchonnois/Domain/Event.cs similarity index 100% rename from Bouchonnois/Domain/Event.cs rename to c#/Bouchonnois/Domain/Event.cs diff --git a/Bouchonnois/Domain/PartieDeChasse.cs b/c#/Bouchonnois/Domain/PartieDeChasse.cs similarity index 100% rename from Bouchonnois/Domain/PartieDeChasse.cs rename to c#/Bouchonnois/Domain/PartieDeChasse.cs diff --git a/Bouchonnois/Domain/PartieStatus.cs b/c#/Bouchonnois/Domain/PartieStatus.cs similarity index 100% rename from Bouchonnois/Domain/PartieStatus.cs rename to c#/Bouchonnois/Domain/PartieStatus.cs diff --git a/Bouchonnois/Repository/IPartieDeChasseRepository.cs b/c#/Bouchonnois/Repository/IPartieDeChasseRepository.cs similarity index 100% rename from Bouchonnois/Repository/IPartieDeChasseRepository.cs rename to c#/Bouchonnois/Repository/IPartieDeChasseRepository.cs diff --git a/Bouchonnois/Service/Exceptions/ChasseurInconnu.cs b/c#/Bouchonnois/Service/Exceptions/ChasseurInconnu.cs similarity index 100% rename from Bouchonnois/Service/Exceptions/ChasseurInconnu.cs rename to c#/Bouchonnois/Service/Exceptions/ChasseurInconnu.cs diff --git "a/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.cs" "b/c#/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.cs" similarity index 100% rename from "Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.cs" rename to "c#/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.cs" diff --git "a/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.cs" "b/c#/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.cs" similarity index 100% rename from "Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.cs" rename to "c#/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.cs" diff --git "a/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.cs" "b/c#/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.cs" similarity index 100% rename from "Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.cs" rename to "c#/Bouchonnois/Service/Exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.cs" diff --git "a/Bouchonnois/Service/Exceptions/LaChasseEstD\303\251j\303\240EnCours.cs" "b/c#/Bouchonnois/Service/Exceptions/LaChasseEstD\303\251j\303\240EnCours.cs" similarity index 100% rename from "Bouchonnois/Service/Exceptions/LaChasseEstD\303\251j\303\240EnCours.cs" rename to "c#/Bouchonnois/Service/Exceptions/LaChasseEstD\303\251j\303\240EnCours.cs" diff --git a/Bouchonnois/Service/Exceptions/LaPartieDeChasseNexistePas.cs b/c#/Bouchonnois/Service/Exceptions/LaPartieDeChasseNexistePas.cs similarity index 100% rename from Bouchonnois/Service/Exceptions/LaPartieDeChasseNexistePas.cs rename to c#/Bouchonnois/Service/Exceptions/LaPartieDeChasseNexistePas.cs diff --git "a/Bouchonnois/Service/Exceptions/OnEstD\303\251j\303\240EnTrainDePrendreLap\303\251ro.cs" "b/c#/Bouchonnois/Service/Exceptions/OnEstD\303\251j\303\240EnTrainDePrendreLap\303\251ro.cs" similarity index 100% rename from "Bouchonnois/Service/Exceptions/OnEstD\303\251j\303\240EnTrainDePrendreLap\303\251ro.cs" rename to "c#/Bouchonnois/Service/Exceptions/OnEstD\303\251j\303\240EnTrainDePrendreLap\303\251ro.cs" diff --git "a/Bouchonnois/Service/Exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.cs" "b/c#/Bouchonnois/Service/Exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.cs" similarity index 100% rename from "Bouchonnois/Service/Exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.cs" rename to "c#/Bouchonnois/Service/Exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.cs" diff --git "a/Bouchonnois/Service/Exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.cs" "b/c#/Bouchonnois/Service/Exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.cs" similarity index 100% rename from "Bouchonnois/Service/Exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.cs" rename to "c#/Bouchonnois/Service/Exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.cs" diff --git "a/Bouchonnois/Service/Exceptions/OnTirePasQuandLaPartieEstTermin\303\251e.cs" "b/c#/Bouchonnois/Service/Exceptions/OnTirePasQuandLaPartieEstTermin\303\251e.cs" similarity index 100% rename from "Bouchonnois/Service/Exceptions/OnTirePasQuandLaPartieEstTermin\303\251e.cs" rename to "c#/Bouchonnois/Service/Exceptions/OnTirePasQuandLaPartieEstTermin\303\251e.cs" diff --git a/Bouchonnois/Service/Exceptions/QuandCestFiniCestFini.cs b/c#/Bouchonnois/Service/Exceptions/QuandCestFiniCestFini.cs similarity index 100% rename from Bouchonnois/Service/Exceptions/QuandCestFiniCestFini.cs rename to c#/Bouchonnois/Service/Exceptions/QuandCestFiniCestFini.cs diff --git a/Bouchonnois/Service/Exceptions/TasPlusDeBallesMonVieuxChasseALaMain.cs b/c#/Bouchonnois/Service/Exceptions/TasPlusDeBallesMonVieuxChasseALaMain.cs similarity index 100% rename from Bouchonnois/Service/Exceptions/TasPlusDeBallesMonVieuxChasseALaMain.cs rename to c#/Bouchonnois/Service/Exceptions/TasPlusDeBallesMonVieuxChasseALaMain.cs diff --git "a/Bouchonnois/Service/Exceptions/TasTropPicol\303\251MonVieuxTasRienTouch\303\251.cs" "b/c#/Bouchonnois/Service/Exceptions/TasTropPicol\303\251MonVieuxTasRienTouch\303\251.cs" similarity index 100% rename from "Bouchonnois/Service/Exceptions/TasTropPicol\303\251MonVieuxTasRienTouch\303\251.cs" rename to "c#/Bouchonnois/Service/Exceptions/TasTropPicol\303\251MonVieuxTasRienTouch\303\251.cs" diff --git a/Bouchonnois/Service/PartieDeChasseService.cs b/c#/Bouchonnois/Service/PartieDeChasseService.cs similarity index 100% rename from Bouchonnois/Service/PartieDeChasseService.cs rename to c#/Bouchonnois/Service/PartieDeChasseService.cs diff --git a/Bouchonnois/Service/Terrain.cs b/c#/Bouchonnois/Service/Terrain.cs similarity index 100% rename from Bouchonnois/Service/Terrain.cs rename to c#/Bouchonnois/Service/Terrain.cs diff --git a/java/pom.xml b/java/pom.xml new file mode 100644 index 0000000..542e360 --- /dev/null +++ b/java/pom.xml @@ -0,0 +1,118 @@ + + + 4.0.0 + + org.bouchonnois + refactoring-du-bouchonnois + 1.0-SNAPSHOT + + + 21 + 21 + UTF-8 + 5.10.0 + 1.18.30 + 0.10.4 + 3.24.2 + 0.8.10 + 1.14.2 + 1.2.0 + + + + + org.junit.jupiter + junit-jupiter + ${junit.version} + test + + + org.projectlombok + lombok + ${lombok.version} + provided + + + io.vavr + vavr + ${vavr.version} + + + org.assertj + assertj-core + ${assertJ.version} + test + + + org.pitest + pitest-junit5-plugin + ${pitest-junit5.version} + test + + + + + + + maven-compiler-plugin + 3.3 + + ${maven.compiler.source} + ${maven.compiler.target} + true + + -Werror + -Xlint:all + -Xlint:-serial + + + + + org.jacoco + jacoco-maven-plugin + ${jacoco.version} + + + default-prepare-agent + + prepare-agent + + + + default-report + + report + + + + default-check + + check + + + + + BUNDLE + + + COMPLEXITY + COVEREDRATIO + 0.60 + + + + + + + + + + org.pitest + pitest-maven + ${pitest.version} + + + + \ No newline at end of file diff --git a/java/src/main/java/bouchonnois/domain/Chasseur.java b/java/src/main/java/bouchonnois/domain/Chasseur.java new file mode 100644 index 0000000..447a16d --- /dev/null +++ b/java/src/main/java/bouchonnois/domain/Chasseur.java @@ -0,0 +1,10 @@ +package bouchonnois.domain; + +import lombok.Data; + +@Data +public class Chasseur { + private String nom; + private int ballesRestantes; + private int nbGalinettes; +} \ No newline at end of file diff --git a/java/src/main/java/bouchonnois/domain/Event.java b/java/src/main/java/bouchonnois/domain/Event.java new file mode 100644 index 0000000..887ec14 --- /dev/null +++ b/java/src/main/java/bouchonnois/domain/Event.java @@ -0,0 +1,11 @@ +package bouchonnois.domain; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +public record Event(LocalDateTime date, String message) { + @Override + public String toString() { + return date.format(DateTimeFormatter.ofPattern("HH:mm - ")) + message; + } +} \ No newline at end of file diff --git a/java/src/main/java/bouchonnois/domain/PartieDeChasse.java b/java/src/main/java/bouchonnois/domain/PartieDeChasse.java new file mode 100644 index 0000000..04a16b8 --- /dev/null +++ b/java/src/main/java/bouchonnois/domain/PartieDeChasse.java @@ -0,0 +1,16 @@ +package bouchonnois.domain; + +import bouchonnois.service.Terrain; +import lombok.Data; + +import java.util.List; +import java.util.UUID; + +@Data +public class PartieDeChasse { + private UUID id; + private List chasseurs; + private Terrain terrain; + private PartieStatus status; + private List events; +} diff --git a/java/src/main/java/bouchonnois/domain/PartieStatus.java b/java/src/main/java/bouchonnois/domain/PartieStatus.java new file mode 100644 index 0000000..df2820d --- /dev/null +++ b/java/src/main/java/bouchonnois/domain/PartieStatus.java @@ -0,0 +1,5 @@ +package bouchonnois.domain; + +public enum PartieStatus { + EN_COURS, APÉRO, TERMINÉE +} diff --git a/java/src/main/java/bouchonnois/repository/PartieDeChasseRepository.java b/java/src/main/java/bouchonnois/repository/PartieDeChasseRepository.java new file mode 100644 index 0000000..c9d14b2 --- /dev/null +++ b/java/src/main/java/bouchonnois/repository/PartieDeChasseRepository.java @@ -0,0 +1,11 @@ +package bouchonnois.repository; + +import bouchonnois.domain.PartieDeChasse; + +import java.util.UUID; + +public interface PartieDeChasseRepository { + void save(PartieDeChasse partieDeChasse); + + PartieDeChasse getById(UUID partieDeChasseId); +} \ No newline at end of file diff --git a/java/src/main/java/bouchonnois/service/PartieDeChasseService.java b/java/src/main/java/bouchonnois/service/PartieDeChasseService.java new file mode 100644 index 0000000..6c393ae --- /dev/null +++ b/java/src/main/java/bouchonnois/service/PartieDeChasseService.java @@ -0,0 +1,251 @@ +package bouchonnois.service; + +import bouchonnois.domain.Chasseur; +import bouchonnois.domain.Event; +import bouchonnois.domain.PartieDeChasse; +import bouchonnois.domain.PartieStatus; +import bouchonnois.repository.PartieDeChasseRepository; +import bouchonnois.service.exceptions.*; +import io.vavr.Tuple2; +import lombok.AllArgsConstructor; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.UUID; +import java.util.function.Supplier; +import java.util.stream.Collectors; + +@AllArgsConstructor +public class PartieDeChasseService { + private final PartieDeChasseRepository repository; + private final Supplier timeProvider; + + public UUID démarrer(Tuple2 terrainDeChasse, List> chasseurs) throws ImpossibleDeDémarrerUnePartieSansGalinettes, ImpossibleDeDémarrerUnePartieAvecUnChasseurSansBalle, ImpossibleDeDémarrerUnePartieSansChasseur { + if (terrainDeChasse._2 <= 0) { + throw new ImpossibleDeDémarrerUnePartieSansGalinettes(); + } + + PartieDeChasse partieDeChasse = new PartieDeChasse(); + partieDeChasse.setId(UUID.randomUUID()); + partieDeChasse.setStatus(PartieStatus.EN_COURS); + partieDeChasse.setChasseurs(new ArrayList<>()); + + Terrain terrain = new Terrain(terrainDeChasse._1); + terrain.setNbGalinettes(terrainDeChasse._2); + partieDeChasse.setTerrain(terrain); + partieDeChasse.setEvents(new ArrayList<>()); + + for (var chasseur : chasseurs) { + if (chasseur._2 == 0) { + throw new ImpossibleDeDémarrerUnePartieAvecUnChasseurSansBalle(); + } + Chasseur chasseurToAdd = new Chasseur(); + chasseurToAdd.setNom(chasseur._1); + chasseurToAdd.setBallesRestantes(chasseur._2); + partieDeChasse.getChasseurs().add(chasseurToAdd); + } + + if (partieDeChasse.getChasseurs().isEmpty()) { + throw new ImpossibleDeDémarrerUnePartieSansChasseur(); + } + + String chasseursToString = String.join(", ", + partieDeChasse.getChasseurs().stream() + .map(c -> c.getNom() + " (" + c.getBallesRestantes() + " balles)") + .toArray(String[]::new)); + + partieDeChasse.getEvents().add(new Event(timeProvider.get(), + "La partie de chasse commence à " + partieDeChasse.getTerrain().getNom() + " avec " + chasseursToString)); + + repository.save(partieDeChasse); + + return partieDeChasse.getId(); + } + + public void tirerSurUneGalinette(UUID id, String chasseur) throws LaPartieDeChasseNexistePas, TasPlusDeBallesMonVieuxChasseALaMain, ChasseurInconnu, OnTirePasPendantLapéroCestSacré, TasTropPicoledMonVieuxTasRienTouche, OnTirePasQuandLaPartieEstTerminee { + PartieDeChasse partieDeChasse = repository.getById(id); + + if (partieDeChasse == null) { + throw new LaPartieDeChasseNexistePas(); + } + + if (partieDeChasse.getTerrain().getNbGalinettes() != 0) { + + if (partieDeChasse.getStatus() != PartieStatus.APÉRO) { + if (partieDeChasse.getStatus() != PartieStatus.TERMINÉE) { + if (partieDeChasse.getChasseurs().stream().anyMatch(c -> c.getNom().equals(chasseur))) { + var chasseurQuiTire = partieDeChasse.getChasseurs().stream() + .filter(c -> c.getNom().equals(chasseur)).findFirst() + .get(); + + if (chasseurQuiTire.getBallesRestantes() == 0) { + partieDeChasse.getEvents().add(new Event(timeProvider.get(), + chasseur + " veut tirer sur une galinette -> T'as plus de balles mon vieux, chasse à la main")); + repository.save(partieDeChasse); + + throw new TasPlusDeBallesMonVieuxChasseALaMain(); + } + + chasseurQuiTire.setBallesRestantes(chasseurQuiTire.getBallesRestantes() - 1); + chasseurQuiTire.setNbGalinettes(chasseurQuiTire.getNbGalinettes() + 1); + partieDeChasse.getTerrain().setNbGalinettes(partieDeChasse.getTerrain().getNbGalinettes() - 1); + partieDeChasse.getEvents().add(new Event(timeProvider.get(), chasseur + " tire sur une galinette")); + + } else { + throw new ChasseurInconnu(chasseur); + } + } else { + partieDeChasse.getEvents().add(new Event(timeProvider.get(), chasseur + " veut tirer -> On tire pas quand la partie est terminée")); + repository.save(partieDeChasse); + + throw new OnTirePasQuandLaPartieEstTerminee(); + } + } else { + partieDeChasse.getEvents() + .add(new Event(timeProvider.get(), chasseur + " veut tirer -> On tire pas pendant l'apéro, c'est sacré !!!")); + repository.save(partieDeChasse); + throw new OnTirePasPendantLapéroCestSacré(); + } + } else { + throw new TasTropPicoledMonVieuxTasRienTouche(); + } + + repository.save(partieDeChasse); + } + + public void tirer(UUID id, String chasseur) throws LaPartieDeChasseNexistePas, TasPlusDeBallesMonVieuxChasseALaMain, ChasseurInconnu, OnTirePasPendantLapéroCestSacré, TasTropPicoledMonVieuxTasRienTouche, OnTirePasQuandLaPartieEstTerminee { + PartieDeChasse partieDeChasse = repository.getById(id); + + if (partieDeChasse == null) { + throw new LaPartieDeChasseNexistePas(); + } + if (partieDeChasse.getStatus() != PartieStatus.APÉRO) { + if (partieDeChasse.getStatus() != PartieStatus.TERMINÉE) { + if (partieDeChasse.getChasseurs().stream().anyMatch(c -> c.getNom().equals(chasseur))) { + var chasseurQuiTire = partieDeChasse.getChasseurs() + .stream() + .filter(c -> c.getNom().equals(chasseur)) + .findFirst() + .get(); + + if (chasseurQuiTire.getBallesRestantes() == 0) { + partieDeChasse.getEvents().add(new Event(timeProvider.get(), + chasseur + " tire -> T'as plus de balles mon vieux, chasse à la main")); + repository.save(partieDeChasse); + + throw new TasPlusDeBallesMonVieuxChasseALaMain(); + } + + chasseurQuiTire.setBallesRestantes(chasseurQuiTire.getBallesRestantes() - 1); + partieDeChasse.getEvents().add(new Event(timeProvider.get(), chasseur + " tire")); + + } else { + throw new ChasseurInconnu(chasseur); + } + } else { + partieDeChasse.getEvents().add(new Event(timeProvider.get(), chasseur + " veut tirer -> On tire pas quand la partie est terminée")); + repository.save(partieDeChasse); + + throw new OnTirePasQuandLaPartieEstTerminee(); + } + } else { + partieDeChasse.getEvents().add(new Event(timeProvider.get(), chasseur + " veut tirer -> On tire pas pendant l'apéro, c'est sacré !!!")); + repository.save(partieDeChasse); + throw new OnTirePasPendantLapéroCestSacré(); + } + repository.save(partieDeChasse); + } + + public void prendreLapéro(UUID id) throws LaPartieDeChasseNexistePas, OnEstDéjaEnTrainDePrendreLapéro, OnPrendPasLapéroQuandLaPartieEstTerminée { + PartieDeChasse partieDeChasse = repository.getById(id); + + if (partieDeChasse == null) { + throw new LaPartieDeChasseNexistePas(); + } + + if (partieDeChasse.getStatus() == PartieStatus.APÉRO) { + throw new OnEstDéjaEnTrainDePrendreLapéro(); + } else if (partieDeChasse.getStatus() == PartieStatus.TERMINÉE) { + throw new OnPrendPasLapéroQuandLaPartieEstTerminée(); + } else { + partieDeChasse.setStatus(PartieStatus.APÉRO); + partieDeChasse.getEvents().add(new Event(timeProvider.get(), "Petit apéro")); + repository.save(partieDeChasse); + } + } + + public void reprendreLaPartie(UUID id) throws LaPartieDeChasseNexistePas, LaChasseEstDéjaEnCours, QuandCestFiniCestFini { + PartieDeChasse partieDeChasse = repository.getById(id); + + if (partieDeChasse == null) { + throw new LaPartieDeChasseNexistePas(); + } + + if (partieDeChasse.getStatus() == PartieStatus.EN_COURS) { + throw new LaChasseEstDéjaEnCours(); + } + + if (partieDeChasse.getStatus() == PartieStatus.TERMINÉE) { + throw new QuandCestFiniCestFini(); + } + + partieDeChasse.setStatus(PartieStatus.EN_COURS); + partieDeChasse.getEvents().add(new Event(timeProvider.get(), "Reprise de la chasse")); + repository.save(partieDeChasse); + } + + public String terminerLaPartie(UUID id) throws QuandCestFiniCestFini { + PartieDeChasse partieDeChasse = repository.getById(id); + + var classement = partieDeChasse + .getChasseurs() + .stream() + .collect(Collectors.groupingBy(Chasseur::getNbGalinettes)); + + if (partieDeChasse.getStatus() == PartieStatus.TERMINÉE) { + throw new QuandCestFiniCestFini(); + } + + partieDeChasse.setStatus(PartieStatus.TERMINÉE); + + String result = ""; + + if (classement.entrySet().stream().allMatch(entry -> entry.getKey() == 0)) { + result = "Brocouille"; + partieDeChasse.getEvents().add(new Event(timeProvider.get(), "La partie de chasse est terminée, vainqueur : Brocouille")); + } else { + var winners = classement.get(classement.keySet().stream() + .max(Integer::compare) + .orElse(0)); + + result = winners.stream() + .map(Chasseur::getNom) + .collect(Collectors.joining(", ")); + + partieDeChasse.getEvents().add(new Event(timeProvider.get(), "La partie de chasse est terminée, vainqueur : " + + winners.stream() + .map(chasseur -> chasseur.getNom() + " - " + chasseur.getNbGalinettes() + " galinettes") + .collect(Collectors.joining(", ")))); + } + repository.save(partieDeChasse); + + return result; + } + + public String consulterStatus(UUID id) throws LaPartieDeChasseNexistePas { + PartieDeChasse partieDeChasse = repository.getById(id); + + if (partieDeChasse == null) { + throw new LaPartieDeChasseNexistePas(); + } + + List events = partieDeChasse.getEvents(); + events.sort(Comparator.comparing(Event::date).reversed()); + + return events.stream() + .map(Event::toString) + .collect(Collectors.joining(System.lineSeparator())); + } +} \ No newline at end of file diff --git a/java/src/main/java/bouchonnois/service/Terrain.java b/java/src/main/java/bouchonnois/service/Terrain.java new file mode 100644 index 0000000..dee1ae8 --- /dev/null +++ b/java/src/main/java/bouchonnois/service/Terrain.java @@ -0,0 +1,9 @@ +package bouchonnois.service; + +import lombok.Data; + +@Data +public class Terrain { + private final String nom; + private int nbGalinettes; +} diff --git a/java/src/main/java/bouchonnois/service/exceptions/ChasseurInconnu.java b/java/src/main/java/bouchonnois/service/exceptions/ChasseurInconnu.java new file mode 100644 index 0000000..ef57ffd --- /dev/null +++ b/java/src/main/java/bouchonnois/service/exceptions/ChasseurInconnu.java @@ -0,0 +1,7 @@ +package bouchonnois.service.exceptions; + +public class ChasseurInconnu extends Exception { + public ChasseurInconnu(String chasseur) { + super("Chasseur inconnu " + chasseur); + } +} diff --git "a/java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.java" "b/java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.java" new file mode 100644 index 0000000..0802dde --- /dev/null +++ "b/java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.java" @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class ImpossibleDeDémarrerUnePartieAvecUnChasseurSansBalle extends Exception { +} diff --git "a/java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.java" "b/java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.java" new file mode 100644 index 0000000..03c3f8d --- /dev/null +++ "b/java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.java" @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class ImpossibleDeDémarrerUnePartieSansChasseur extends Exception { +} diff --git "a/java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.java" "b/java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.java" new file mode 100644 index 0000000..ae69e8a --- /dev/null +++ "b/java/src/main/java/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.java" @@ -0,0 +1,5 @@ +package bouchonnois.service.exceptions; + +public class ImpossibleDeDémarrerUnePartieSansGalinettes extends Exception { + +} \ No newline at end of file diff --git "a/java/src/main/java/bouchonnois/service/exceptions/LaChasseEstD\303\251jaEnCours.java" "b/java/src/main/java/bouchonnois/service/exceptions/LaChasseEstD\303\251jaEnCours.java" new file mode 100644 index 0000000..910a867 --- /dev/null +++ "b/java/src/main/java/bouchonnois/service/exceptions/LaChasseEstD\303\251jaEnCours.java" @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class LaChasseEstDéjaEnCours extends Exception { +} diff --git a/java/src/main/java/bouchonnois/service/exceptions/LaPartieDeChasseNexistePas.java b/java/src/main/java/bouchonnois/service/exceptions/LaPartieDeChasseNexistePas.java new file mode 100644 index 0000000..12386c7 --- /dev/null +++ b/java/src/main/java/bouchonnois/service/exceptions/LaPartieDeChasseNexistePas.java @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class LaPartieDeChasseNexistePas extends Exception { +} diff --git "a/java/src/main/java/bouchonnois/service/exceptions/OnEstD\303\251jaEnTrainDePrendreLap\303\251ro.java" "b/java/src/main/java/bouchonnois/service/exceptions/OnEstD\303\251jaEnTrainDePrendreLap\303\251ro.java" new file mode 100644 index 0000000..b74660c --- /dev/null +++ "b/java/src/main/java/bouchonnois/service/exceptions/OnEstD\303\251jaEnTrainDePrendreLap\303\251ro.java" @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class OnEstDéjaEnTrainDePrendreLapéro extends Exception { +} diff --git "a/java/src/main/java/bouchonnois/service/exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.java" "b/java/src/main/java/bouchonnois/service/exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.java" new file mode 100644 index 0000000..f0b26e5 --- /dev/null +++ "b/java/src/main/java/bouchonnois/service/exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.java" @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class OnPrendPasLapéroQuandLaPartieEstTerminée extends Exception { +} diff --git "a/java/src/main/java/bouchonnois/service/exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.java" "b/java/src/main/java/bouchonnois/service/exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.java" new file mode 100644 index 0000000..7777c63 --- /dev/null +++ "b/java/src/main/java/bouchonnois/service/exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.java" @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class OnTirePasPendantLapéroCestSacré extends Exception { +} diff --git a/java/src/main/java/bouchonnois/service/exceptions/OnTirePasQuandLaPartieEstTerminee.java b/java/src/main/java/bouchonnois/service/exceptions/OnTirePasQuandLaPartieEstTerminee.java new file mode 100644 index 0000000..546d123 --- /dev/null +++ b/java/src/main/java/bouchonnois/service/exceptions/OnTirePasQuandLaPartieEstTerminee.java @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class OnTirePasQuandLaPartieEstTerminee extends Exception { +} diff --git a/java/src/main/java/bouchonnois/service/exceptions/QuandCestFiniCestFini.java b/java/src/main/java/bouchonnois/service/exceptions/QuandCestFiniCestFini.java new file mode 100644 index 0000000..5fa4f10 --- /dev/null +++ b/java/src/main/java/bouchonnois/service/exceptions/QuandCestFiniCestFini.java @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class QuandCestFiniCestFini extends Exception { +} diff --git a/java/src/main/java/bouchonnois/service/exceptions/TasPlusDeBallesMonVieuxChasseALaMain.java b/java/src/main/java/bouchonnois/service/exceptions/TasPlusDeBallesMonVieuxChasseALaMain.java new file mode 100644 index 0000000..80d8b4a --- /dev/null +++ b/java/src/main/java/bouchonnois/service/exceptions/TasPlusDeBallesMonVieuxChasseALaMain.java @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class TasPlusDeBallesMonVieuxChasseALaMain extends Exception { +} diff --git a/java/src/main/java/bouchonnois/service/exceptions/TasTropPicoledMonVieuxTasRienTouche.java b/java/src/main/java/bouchonnois/service/exceptions/TasTropPicoledMonVieuxTasRienTouche.java new file mode 100644 index 0000000..72fdcb3 --- /dev/null +++ b/java/src/main/java/bouchonnois/service/exceptions/TasTropPicoledMonVieuxTasRienTouche.java @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions; + +public class TasTropPicoledMonVieuxTasRienTouche extends Exception { +} diff --git a/java/src/test/java/bouchonnois/tests/doubles/PartieDeChasseRepositoryForTests.java b/java/src/test/java/bouchonnois/tests/doubles/PartieDeChasseRepositoryForTests.java new file mode 100644 index 0000000..9110c75 --- /dev/null +++ b/java/src/test/java/bouchonnois/tests/doubles/PartieDeChasseRepositoryForTests.java @@ -0,0 +1,30 @@ +package bouchonnois.tests.doubles; + +import bouchonnois.domain.PartieDeChasse; +import bouchonnois.repository.PartieDeChasseRepository; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class PartieDeChasseRepositoryForTests implements PartieDeChasseRepository { + private final Map partiesDeChasse = new HashMap<>(); + @Getter + private PartieDeChasse savedPartieDeChasse; + + @Override + public void save(PartieDeChasse partieDeChasse) { + savedPartieDeChasse = partieDeChasse; + add(partieDeChasse); + } + + @Override + public PartieDeChasse getById(UUID partieDeChasseId) { + return partiesDeChasse.get(partieDeChasseId); + } + + public void add(PartieDeChasse partieDeChasse) { + partiesDeChasse.put(partieDeChasse.getId(), partieDeChasse); + } +} diff --git a/java/src/test/java/bouchonnois/tests/service/PartieDeChasseServiceTests.java b/java/src/test/java/bouchonnois/tests/service/PartieDeChasseServiceTests.java new file mode 100644 index 0000000..c6983f0 --- /dev/null +++ b/java/src/test/java/bouchonnois/tests/service/PartieDeChasseServiceTests.java @@ -0,0 +1,1257 @@ +package bouchonnois.tests.service; + +import bouchonnois.domain.Chasseur; +import bouchonnois.domain.Event; +import bouchonnois.domain.PartieDeChasse; +import bouchonnois.domain.PartieStatus; +import bouchonnois.service.PartieDeChasseService; +import bouchonnois.service.Terrain; +import bouchonnois.service.exceptions.*; +import bouchonnois.tests.doubles.PartieDeChasseRepositoryForTests; +import io.vavr.Tuple2; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.UUID; + +import static java.lang.System.lineSeparator; +import static java.time.Month.APRIL; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +class PartieDeChasseServiceTests { + @Nested + class DemarrerUnePartieDeChasse { + @Test + void avec_plusieurs_chasseurs() throws ImpossibleDeDémarrerUnePartieSansGalinettes, ImpossibleDeDémarrerUnePartieAvecUnChasseurSansBalle, ImpossibleDeDémarrerUnePartieSansChasseur { + var repository = new PartieDeChasseRepositoryForTests(); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + var chasseurs = new ArrayList>() {{ + add(new Tuple2<>("Dédé", 20)); + add(new Tuple2<>("Bernard", 8)); + add(new Tuple2<>("Robert", 12)); + }}; + var terrainDeChasse = new Tuple2<>("Pitibon sur Sauldre", 3); + + var id = service.démarrer( + terrainDeChasse, + chasseurs + ); + + var savedPartieDeChasse = repository.getSavedPartieDeChasse(); + assertThat(savedPartieDeChasse.getId()).isEqualTo(id); + assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.EN_COURS); + assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); + assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs()).hasSize(3); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNom()).isEqualTo("Dédé"); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getBallesRestantes()).isEqualTo(20); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNom()).isEqualTo("Bernard"); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getBallesRestantes()).isEqualTo(8); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNom()).isEqualTo("Robert"); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getBallesRestantes()).isEqualTo(12); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNbGalinettes()).isZero(); + } + + @Test + void echoue_sans_chasseurs() { + var repository = new PartieDeChasseRepositoryForTests(); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + var chasseurs = new ArrayList>(); + var terrainDeChasse = new Tuple2<>("Pitibon sur Sauldre", 3); + + assertThatThrownBy(() -> service.démarrer(terrainDeChasse, chasseurs)) + .isInstanceOf(ImpossibleDeDémarrerUnePartieSansChasseur.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_avec_un_terrain_sans_galinettes() { + var repository = new PartieDeChasseRepositoryForTests(); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + var chasseurs = new ArrayList>(); + var terrainDeChasse = new Tuple2<>("Pitibon sur Sauldre", 0); + + assertThatThrownBy(() -> service.démarrer(terrainDeChasse, chasseurs)) + .isInstanceOf(ImpossibleDeDémarrerUnePartieSansGalinettes.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_si_un_chasseur_sans_balle() { + var repository = new PartieDeChasseRepositoryForTests(); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + var chasseurs = new ArrayList>() {{ + add(new Tuple2<>("Dédé", 20)); + add(new Tuple2<>("Bernard", 0)); + }}; + var terrainDeChasse = new Tuple2<>("Pitibon sur Sauldre", 3); + + assertThatThrownBy(() -> service.démarrer(terrainDeChasse, chasseurs)) + .isInstanceOf(ImpossibleDeDémarrerUnePartieAvecUnChasseurSansBalle.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + } + + @Nested + class TirerSurUneGalinette { + @Test + void avec_un_chasseur_ayant_des_balles_et_assez_de_galinettes_sur_le_terrain() throws ChasseurInconnu, TasTropPicoledMonVieuxTasRienTouche, OnTirePasQuandLaPartieEstTerminee, TasPlusDeBallesMonVieuxChasseALaMain, LaPartieDeChasseNexistePas, OnTirePasPendantLapéroCestSacré { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + service.tirerSurUneGalinette(id, "Bernard"); + + var savedPartieDeChasse = repository.getSavedPartieDeChasse(); + assertThat(savedPartieDeChasse.getId()).isEqualTo(id); + assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.EN_COURS); + assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); + assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(2); + assertThat(savedPartieDeChasse.getChasseurs()).hasSize(3); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNom()).isEqualTo("Dédé"); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getBallesRestantes()).isEqualTo(20); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNom()).isEqualTo("Bernard"); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getBallesRestantes()).isEqualTo(7); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNbGalinettes()).isEqualTo(1); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNom()).isEqualTo("Robert"); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getBallesRestantes()).isEqualTo(12); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNbGalinettes()).isZero(); + } + + @Test + void echoue_car_partie_nexiste_pas() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirerSurUneGalinette(id, "Bernard")) + .isInstanceOf(LaPartieDeChasseNexistePas.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_avec_un_chasseur_nayant_plus_de_balles() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(0); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirerSurUneGalinette(id, "Bernard")) + .isInstanceOf(TasPlusDeBallesMonVieuxChasseALaMain.class); + } + + @Test + void echoue_car_pas_de_galinettes_sur_le_terrain() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(0); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirerSurUneGalinette(id, "Bernard")) + .isInstanceOf(TasTropPicoledMonVieuxTasRienTouche.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_car_le_chasseur_n_est_pas_dans_la_partie() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirerSurUneGalinette(id, "Chasseur inconnu")) + .isInstanceOf(ChasseurInconnu.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_si_les_chasseurs_sont_en_apéro() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.APÉRO); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirerSurUneGalinette(id, "Bernard")) + .isInstanceOf(OnTirePasPendantLapéroCestSacré.class); + } + + @Test + void echoue_si_la_partie_est_terminée() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.TERMINÉE); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirerSurUneGalinette(id, "Bernard")) + .isInstanceOf(OnTirePasQuandLaPartieEstTerminee.class); + } + } + + @Nested + class Tirer { + @Test + void avec_un_chasseur_ayant_des_balles_et_assez_de_galinettes_sur_le_terrain() throws ChasseurInconnu, TasTropPicoledMonVieuxTasRienTouche, OnTirePasQuandLaPartieEstTerminee, TasPlusDeBallesMonVieuxChasseALaMain, LaPartieDeChasseNexistePas, OnTirePasPendantLapéroCestSacré { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + service.tirer(id, "Bernard"); + + var savedPartieDeChasse = repository.getSavedPartieDeChasse(); + assertThat(savedPartieDeChasse.getId()).isEqualTo(id); + assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.EN_COURS); + assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); + assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs()).hasSize(3); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNom()).isEqualTo("Dédé"); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getBallesRestantes()).isEqualTo(20); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNom()).isEqualTo("Bernard"); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getBallesRestantes()).isEqualTo(7); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNom()).isEqualTo("Robert"); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getBallesRestantes()).isEqualTo(12); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNbGalinettes()).isZero(); + } + + @Test + void echoue_car_partie_nexiste_pas() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirer(id, "Bernard")) + .isInstanceOf(LaPartieDeChasseNexistePas.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_avec_un_chasseur_nayant_plus_de_balles() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(0); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirer(id, "Bernard")) + .isInstanceOf(TasPlusDeBallesMonVieuxChasseALaMain.class); + } + + @Test + void echoue_car_le_chasseur_n_est_pas_dans_la_partie() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirer(id, "Chasseur inconnu")) + .isInstanceOf(ChasseurInconnu.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_si_les_chasseurs_sont_en_apéro() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.APÉRO); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirer(id, "Bernard")) + .isInstanceOf(OnTirePasPendantLapéroCestSacré.class); + } + + @Test + void echoue_si_la_partie_est_terminée() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.TERMINÉE); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirer(id, "Bernard")) + .isInstanceOf(OnTirePasQuandLaPartieEstTerminee.class); + } + } + + @Nested + class PrendreLApéro { + @Test + void quand_la_partie_est_en_cours() throws LaPartieDeChasseNexistePas, OnPrendPasLapéroQuandLaPartieEstTerminée, OnEstDéjaEnTrainDePrendreLapéro { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + service.prendreLapéro(id); + + var savedPartieDeChasse = repository.getSavedPartieDeChasse(); + assertThat(savedPartieDeChasse.getId()).isEqualTo(id); + assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.APÉRO); + assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); + assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs()).hasSize(3); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNom()).isEqualTo("Dédé"); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getBallesRestantes()).isEqualTo(20); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNom()).isEqualTo("Bernard"); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getBallesRestantes()).isEqualTo(8); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNom()).isEqualTo("Robert"); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getBallesRestantes()).isEqualTo(12); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNbGalinettes()).isZero(); + } + + @Test + void echoue_car_partie_nexiste_pas() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.prendreLapéro(id)) + .isInstanceOf(LaPartieDeChasseNexistePas.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_si_les_chasseurs_sont_déjà_en_apéro() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.APÉRO); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.prendreLapéro(id)) + .isInstanceOf(OnEstDéjaEnTrainDePrendreLapéro.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_si_la_partie_de_chasse_est_terminée() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.TERMINÉE); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.prendreLapéro(id)) + .isInstanceOf(OnPrendPasLapéroQuandLaPartieEstTerminée.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + } + + @Nested + class ReprendreLaPartieDeChasse { + @Test + void quand_lapéro_est_en_cours() throws LaPartieDeChasseNexistePas, LaChasseEstDéjaEnCours, QuandCestFiniCestFini { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.APÉRO); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + service.reprendreLaPartie(id); + + var savedPartieDeChasse = repository.getSavedPartieDeChasse(); + assertThat(savedPartieDeChasse.getId()).isEqualTo(id); + assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.EN_COURS); + assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); + assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs()).hasSize(3); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNom()).isEqualTo("Dédé"); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getBallesRestantes()).isEqualTo(20); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNom()).isEqualTo("Bernard"); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getBallesRestantes()).isEqualTo(8); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNom()).isEqualTo("Robert"); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getBallesRestantes()).isEqualTo(12); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNbGalinettes()).isZero(); + } + + @Test + void echoue_car_partie_nexiste_pas() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.reprendreLaPartie(id)) + .isInstanceOf(LaPartieDeChasseNexistePas.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_si_la_chasse_est_en_cours() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.reprendreLaPartie(id)) + .isInstanceOf(LaChasseEstDéjaEnCours.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + + @Test + void echoue_si_la_partie_de_chasse_est_terminée() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.TERMINÉE); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.reprendreLaPartie(id)) + .isInstanceOf(QuandCestFiniCestFini.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + } + + @Nested + class TerminerLaPartieDeChasse { + @Test + void quand_la_partie_est_en_cours_et_1_seul_chasseur_gagne() throws QuandCestFiniCestFini { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + setNbGalinettes(2); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + var meilleurChasseur = service.terminerLaPartie(id); + + var savedPartieDeChasse = repository.getSavedPartieDeChasse(); + assertThat(savedPartieDeChasse.getId()).isEqualTo(id); + assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.TERMINÉE); + assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); + assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs()).hasSize(3); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNom()).isEqualTo("Dédé"); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getBallesRestantes()).isEqualTo(20); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNom()).isEqualTo("Bernard"); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getBallesRestantes()).isEqualTo(8); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNom()).isEqualTo("Robert"); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getBallesRestantes()).isEqualTo(12); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNbGalinettes()).isEqualTo(2); + + assertThat(meilleurChasseur).isEqualTo("Robert"); + } + + @Test + void quand_la_partie_est_en_cours_et_1_seul_chasseur_dans_la_partie() throws QuandCestFiniCestFini { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + setNbGalinettes(2); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + var meilleurChasseur = service.terminerLaPartie(id); + + var savedPartieDeChasse = repository.getSavedPartieDeChasse(); + assertThat(savedPartieDeChasse.getId()).isEqualTo(id); + assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.TERMINÉE); + assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); + assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs()).hasSize(1); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNom()).isEqualTo("Robert"); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getBallesRestantes()).isEqualTo(12); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNbGalinettes()).isEqualTo(2); + + assertThat(meilleurChasseur).isEqualTo("Robert"); + } + + @Test + void quand_la_partie_est_en_cours_et_2_chasseurs_ex_aequo() throws QuandCestFiniCestFini { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + setNbGalinettes(2); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + setNbGalinettes(2); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + var meilleurChasseur = service.terminerLaPartie(id); + + var savedPartieDeChasse = repository.getSavedPartieDeChasse(); + assertThat(savedPartieDeChasse.getId()).isEqualTo(id); + assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.TERMINÉE); + assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); + assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs()).hasSize(3); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNom()).isEqualTo("Dédé"); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getBallesRestantes()).isEqualTo(20); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNbGalinettes()).isEqualTo(2); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNom()).isEqualTo("Bernard"); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getBallesRestantes()).isEqualTo(8); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNbGalinettes()).isEqualTo(2); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNom()).isEqualTo("Robert"); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getBallesRestantes()).isEqualTo(12); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNbGalinettes()).isZero(); + + assertThat(meilleurChasseur).isEqualTo("Dédé, Bernard"); + } + + @Test + void quand_la_partie_est_en_cours_et_tout_le_monde_brocouille() throws QuandCestFiniCestFini { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + var meilleurChasseur = service.terminerLaPartie(id); + + var savedPartieDeChasse = repository.getSavedPartieDeChasse(); + assertThat(savedPartieDeChasse.getId()).isEqualTo(id); + assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.TERMINÉE); + assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); + assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs()).hasSize(3); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNom()).isEqualTo("Dédé"); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getBallesRestantes()).isEqualTo(20); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNom()).isEqualTo("Bernard"); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getBallesRestantes()).isEqualTo(8); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNom()).isEqualTo("Robert"); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getBallesRestantes()).isEqualTo(12); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNbGalinettes()).isZero(); + + assertThat(meilleurChasseur).isEqualTo("Brocouille"); + } + + @Test + void quand_les_chasseurs_sont_a_lapéro_et_tous_ex_aequo() throws QuandCestFiniCestFini { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + setNbGalinettes(3); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + setNbGalinettes(3); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + setNbGalinettes(3); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.APÉRO); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + var meilleurChasseur = service.terminerLaPartie(id); + + var savedPartieDeChasse = repository.getSavedPartieDeChasse(); + assertThat(savedPartieDeChasse.getId()).isEqualTo(id); + assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.TERMINÉE); + assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); + assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs()).hasSize(3); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNom()).isEqualTo("Dédé"); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getBallesRestantes()).isEqualTo(20); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNom()).isEqualTo("Bernard"); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getBallesRestantes()).isEqualTo(8); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNom()).isEqualTo("Robert"); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getBallesRestantes()).isEqualTo(12); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNbGalinettes()).isEqualTo(3); + + assertThat(meilleurChasseur).isEqualTo("Dédé, Bernard, Robert"); + } + + @Test + void echoue_si_la_partie_est_déja_terminée() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.TERMINÉE); + setEvents(new ArrayList<>()); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.terminerLaPartie(id)) + .isInstanceOf(QuandCestFiniCestFini.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } + } + + @Nested + class ConsulterStatus { + @Test + void quand_la_partie_vient_de_démarrer() throws LaPartieDeChasseNexistePas, LaChasseEstDéjaEnCours, QuandCestFiniCestFini { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>() {{ + add(new Event(LocalDateTime.of(2024, APRIL, 25, 9, 0, 12), + "La partie de chasse commence à Pitibon sur Sauldre avec Dédé (20 balles), Bernard (8 balles), Robert (12 balles)")); + }}); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + var status = service.consulterStatus(id); + + assertThat(status) + .isEqualTo("09:00 - La partie de chasse commence à Pitibon sur Sauldre avec Dédé (20 balles), Bernard (8 balles), Robert (12 balles)"); + } + + @Test + void quand_la_partie_est_terminée() throws LaPartieDeChasseNexistePas, LaChasseEstDéjaEnCours, QuandCestFiniCestFini { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + repository.add(new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(8); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + setNbGalinettes(2); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>() {{ + add(new Event(LocalDateTime.of(2024, APRIL, 25, 9, 0, 12), "La partie de chasse commence à Pitibon sur Sauldre avec Dédé (20 balles), Bernard (8 balles), Robert (12 balles)")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 9, 10, 0), "Dédé tire")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 9, 40, 0), "Robert tire sur une galinette")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 10, 0, 0), "Petit apéro")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 11, 0, 0), "Reprise de la chasse")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 11, 2, 0), "Bernard tire")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 11, 3, 0), "Bernard tire")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 11, 4, 0), "Dédé tire sur une galinette")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 11, 30, 0), "Robert tire sur une galinette")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 11, 40, 0), "Petit apéro")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 14, 30, 0), "Reprise de la chasse")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 0), "Bernard tire")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 1), "Bernard tire")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 2), "Bernard tire")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 3), "Bernard tire")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 4), "Bernard tire")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 5), "Bernard tire")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 6), "Bernard tire")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 7), "Bernard tire -> T'as plus de balles mon vieux, chasse à la main")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 15, 0, 0), "Robert tire sur une galinette")); + add(new Event(LocalDateTime.of(2024, APRIL, 25, 15, 30, 0), "La partie de chasse est terminée, vainqueur : Robert - 3 galinettes")); + }}); + } + }); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + var status = service.consulterStatus(id); + + assertThat(status) + .isEqualTo("15:30 - La partie de chasse est terminée, vainqueur : Robert - 3 galinettes" + lineSeparator() + + "15:00 - Robert tire sur une galinette" + lineSeparator() + + "14:41 - Bernard tire -> T'as plus de balles mon vieux, chasse à la main" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:30 - Reprise de la chasse" + lineSeparator() + + "11:40 - Petit apéro" + lineSeparator() + + "11:30 - Robert tire sur une galinette" + lineSeparator() + + "11:04 - Dédé tire sur une galinette" + lineSeparator() + + "11:03 - Bernard tire" + lineSeparator() + + "11:02 - Bernard tire" + lineSeparator() + + "11:00 - Reprise de la chasse" + lineSeparator() + + "10:00 - Petit apéro" + lineSeparator() + + "09:40 - Robert tire sur une galinette" + lineSeparator() + + "09:10 - Dédé tire" + lineSeparator() + + "09:00 - La partie de chasse commence à Pitibon sur Sauldre avec Dédé (20 balles), Bernard (8 balles), Robert (12 balles)" + ); + } + } +} diff --git a/java/src/test/java/bouchonnois/tests/service/ScenarioTests.java b/java/src/test/java/bouchonnois/tests/service/ScenarioTests.java new file mode 100644 index 0000000..fff218e --- /dev/null +++ b/java/src/test/java/bouchonnois/tests/service/ScenarioTests.java @@ -0,0 +1,120 @@ +package bouchonnois.tests.service; + +import bouchonnois.service.PartieDeChasseService; +import bouchonnois.service.exceptions.*; +import bouchonnois.tests.doubles.PartieDeChasseRepositoryForTests; +import io.vavr.Tuple2; +import org.junit.jupiter.api.Test; + +import java.time.LocalDateTime; +import java.util.ArrayList; + +import static java.lang.System.lineSeparator; +import static java.time.Month.APRIL; +import static org.assertj.core.api.Assertions.assertThat; + +class ScenarioTests { + private LocalDateTime time = LocalDateTime.of(2024, APRIL, 25, 9, 0, 0); + + @Test + void dérouler_une_partie() throws ImpossibleDeDémarrerUnePartieAvecUnChasseurSansBalle, ImpossibleDeDémarrerUnePartieSansChasseur, ImpossibleDeDémarrerUnePartieSansGalinettes, OnTirePasPendantLapéroCestSacré, ChasseurInconnu, TasTropPicoledMonVieuxTasRienTouche, OnTirePasQuandLaPartieEstTerminee, TasPlusDeBallesMonVieuxChasseALaMain, LaPartieDeChasseNexistePas, OnPrendPasLapéroQuandLaPartieEstTerminée, OnEstDéjaEnTrainDePrendreLapéro, LaChasseEstDéjaEnCours, QuandCestFiniCestFini { + + var repository = new PartieDeChasseRepositoryForTests(); + var service = new PartieDeChasseService(repository, () -> time); + var chasseurs = new ArrayList>() {{ + add(new Tuple2<>("Dédé", 20)); + add(new Tuple2<>("Bernard", 8)); + add(new Tuple2<>("Robert", 12)); + }}; + var terrainDeChasse = new Tuple2<>("Pitibon sur Sauldre", 4); + + var id = service.démarrer( + terrainDeChasse, + chasseurs + ); + + time = time.plusMinutes(10); + service.tirer(id, "Dédé"); + + time = time.plusMinutes(30); + service.tirerSurUneGalinette(id, "Robert"); + + time = time.plusMinutes(20); + service.prendreLapéro(id); + + time = time.plusHours(1); + service.reprendreLaPartie(id); + + time = time.plusMinutes(2); + service.tirer(id, "Bernard"); + + time = time.plusMinutes(1); + service.tirer(id, "Bernard"); + + time = time.plusMinutes(1); + service.tirerSurUneGalinette(id, "Dédé"); + + time = time.plusMinutes(26); + service.tirerSurUneGalinette(id, "Robert"); + + time = time.plusMinutes(10); + service.prendreLapéro(id); + + time = time.plusMinutes(170); + service.reprendreLaPartie(id); + + time = time.plusMinutes(11); + service.tirer(id, "Bernard"); + + time = time.plusSeconds(1); + service.tirer(id, "Bernard"); + + time = time.plusSeconds(1); + service.tirer(id, "Bernard"); + + time = time.plusSeconds(1); + service.tirer(id, "Bernard"); + + time = time.plusSeconds(1); + service.tirer(id, "Bernard"); + + time = time.plusSeconds(1); + service.tirer(id, "Bernard"); + + time = time.plusSeconds(1); + + try { + service.tirer(id, "Bernard"); + } catch (TasPlusDeBallesMonVieuxChasseALaMain e) { + } + + time = time.plusMinutes(19); + service.tirerSurUneGalinette(id, "Robert"); + + time = time.plusMinutes(30); + service.terminerLaPartie(id); + + assertThat(service.consulterStatus(id)) + .isEqualTo("15:30 - La partie de chasse est terminée, vainqueur : Robert - 3 galinettes" + lineSeparator() + + "15:00 - Robert tire sur une galinette" + lineSeparator() + + "14:41 - Bernard tire -> T'as plus de balles mon vieux, chasse à la main" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:30 - Reprise de la chasse" + lineSeparator() + + "11:40 - Petit apéro" + lineSeparator() + + "11:30 - Robert tire sur une galinette" + lineSeparator() + + "11:04 - Dédé tire sur une galinette" + lineSeparator() + + "11:03 - Bernard tire" + lineSeparator() + + "11:02 - Bernard tire" + lineSeparator() + + "11:00 - Reprise de la chasse" + lineSeparator() + + "10:00 - Petit apéro" + lineSeparator() + + "09:40 - Robert tire sur une galinette" + lineSeparator() + + "09:10 - Dédé tire" + lineSeparator() + + "09:00 - La partie de chasse commence à Pitibon sur Sauldre avec Dédé (20 balles), Bernard (8 balles), Robert (12 balles)" + ); + } +} diff --git a/kotlin/.gitignore b/kotlin/.gitignore new file mode 100644 index 0000000..b63da45 --- /dev/null +++ b/kotlin/.gitignore @@ -0,0 +1,42 @@ +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/kotlin/build.gradle.kts b/kotlin/build.gradle.kts new file mode 100644 index 0000000..66586b9 --- /dev/null +++ b/kotlin/build.gradle.kts @@ -0,0 +1,48 @@ +import info.solidsoft.gradle.pitest.PitestPluginExtension + +plugins { + kotlin("jvm") version "1.9.20" + application + jacoco + id("info.solidsoft.pitest") version "1.9.11" +} + +group = "org.bouchonnois" +version = "1.0-SNAPSHOT" + +repositories { + mavenCentral() +} + +dependencies { + testImplementation("io.kotest:kotest-runner-junit5:5.7.2") + testImplementation("io.kotest.extensions:kotest-extensions-pitest:1.2.0") +} + +tasks.test { + useJUnitPlatform() + finalizedBy(tasks.jacocoTestReport) +} + +kotlin { + jvmToolchain(8) +} + +jacoco { + toolVersion = "0.8.7" +} + +tasks.jacocoTestReport { + dependsOn(tasks.test) + reports { + xml.required.set(true) + } +} + +configure { + targetClasses.set(listOf("bouchonnois.*")) +} + +application { + mainClass.set("MainKt") +} \ No newline at end of file diff --git a/kotlin/gradle.properties b/kotlin/gradle.properties new file mode 100644 index 0000000..7fc6f1f --- /dev/null +++ b/kotlin/gradle.properties @@ -0,0 +1 @@ +kotlin.code.style=official diff --git a/kotlin/gradle/wrapper/gradle-wrapper.jar b/kotlin/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..249e5832f090a2944b7473328c07c9755baa3196 GIT binary patch literal 60756 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kotlin/gradlew.bat b/kotlin/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/kotlin/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kotlin/settings.gradle.kts b/kotlin/settings.gradle.kts new file mode 100644 index 0000000..f69851c --- /dev/null +++ b/kotlin/settings.gradle.kts @@ -0,0 +1,12 @@ +pluginManagement { + repositories { + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "0.5.0" +} + +rootProject.name = "refactoring-du-bouchonnois" \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/domain/Chasseur.kt b/kotlin/src/main/kotlin/bouchonnois/domain/Chasseur.kt new file mode 100644 index 0000000..56287ca --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/domain/Chasseur.kt @@ -0,0 +1,7 @@ +package bouchonnois.domain + +class Chasseur { + var nom: String? = null + var ballesRestantes = 0 + var nbGalinettes = 0 +} \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/domain/Event.kt b/kotlin/src/main/kotlin/bouchonnois/domain/Event.kt new file mode 100644 index 0000000..372385f --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/domain/Event.kt @@ -0,0 +1,10 @@ +package bouchonnois.domain + +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter + +data class Event(val date: LocalDateTime, val message: String) { + override fun toString(): String { + return date.format(DateTimeFormatter.ofPattern("HH:mm - ")) + message + } +} \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/domain/PartieDeChasse.kt b/kotlin/src/main/kotlin/bouchonnois/domain/PartieDeChasse.kt new file mode 100644 index 0000000..09246ce --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/domain/PartieDeChasse.kt @@ -0,0 +1,12 @@ +package bouchonnois.domain + +import bouchonnois.service.Terrain +import java.util.* + +class PartieDeChasse { + var id: UUID? = null + var chasseurs: MutableList? = null + var terrain: Terrain? = null + var status: PartieStatus? = null + var events: MutableList? = null +} \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/domain/PartieStatus.kt b/kotlin/src/main/kotlin/bouchonnois/domain/PartieStatus.kt new file mode 100644 index 0000000..6fd01f5 --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/domain/PartieStatus.kt @@ -0,0 +1,8 @@ +package bouchonnois.domain + + +enum class PartieStatus { + EN_COURS, + APÉRO, + TERMINÉE +} \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/repository/PartieDeChasseRepository.kt b/kotlin/src/main/kotlin/bouchonnois/repository/PartieDeChasseRepository.kt new file mode 100644 index 0000000..85a1af3 --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/repository/PartieDeChasseRepository.kt @@ -0,0 +1,9 @@ +package bouchonnois.repository + +import bouchonnois.domain.PartieDeChasse +import java.util.* + +interface PartieDeChasseRepository { + fun save(partieDeChasse: PartieDeChasse) + fun getById(partieDeChasseId: UUID?): PartieDeChasse? +} \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/service/PartieDeChasseService.kt b/kotlin/src/main/kotlin/bouchonnois/service/PartieDeChasseService.kt new file mode 100644 index 0000000..e813452 --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/service/PartieDeChasseService.kt @@ -0,0 +1,249 @@ +package bouchonnois.service + +import bouchonnois.domain.Chasseur +import bouchonnois.domain.Event +import bouchonnois.domain.PartieDeChasse +import bouchonnois.domain.PartieStatus +import bouchonnois.repository.PartieDeChasseRepository +import bouchonnois.service.exceptions.* +import java.time.LocalDateTime +import java.util.* + +class PartieDeChasseService( + private val repository: PartieDeChasseRepository, + private val timeProvider: () -> LocalDateTime +) { + fun démarrer(terrainDeChasse: Pair, chasseurs: Map): UUID { + if (terrainDeChasse.second <= 0) { + throw ImpossibleDeDémarrerUnePartieSansGalinettes() + } + + val partieDeChasse = PartieDeChasse() + partieDeChasse.id = UUID.randomUUID() + partieDeChasse.status = PartieStatus.EN_COURS + partieDeChasse.chasseurs = mutableListOf() + + val terrain = Terrain(terrainDeChasse.first) + terrain.nbGalinettes = terrainDeChasse.second + + partieDeChasse.terrain = terrain + partieDeChasse.events = mutableListOf() + + for (chasseur in chasseurs) { + if (chasseur.value == 0) { + throw ImpossibleDeDémarrerUnePartieAvecUnChasseurSansBalle() + } + val chasseurToAdd = Chasseur() + chasseurToAdd.nom = chasseur.key + chasseurToAdd.ballesRestantes = chasseur.value + + partieDeChasse.chasseurs!!.add(chasseurToAdd) + } + + if (partieDeChasse.chasseurs!!.isEmpty()) { + throw ImpossibleDeDémarrerUnePartieSansChasseur() + } + + val chasseursToString = partieDeChasse + .chasseurs!! + .joinToString(", ") { "${it.nom} (${it.ballesRestantes} balles)" } + + partieDeChasse.events!!.add( + Event( + timeProvider(), + "La partie de chasse commence à ${partieDeChasse.terrain!!.nom} avec $chasseursToString" + ) + ) + repository.save(partieDeChasse) + + return partieDeChasse.id!! + } + + fun tirerSurUneGalinette(id: UUID, chasseur: String) { + val partieDeChasse = repository.getById(id) ?: throw LaPartieDeChasseNexistePas() + + if (partieDeChasse.terrain!!.nbGalinettes != 0) { + if (partieDeChasse.status != PartieStatus.APÉRO) { + if (partieDeChasse.status != PartieStatus.TERMINÉE) { + if (partieDeChasse.chasseurs!!.any { c -> c.nom == chasseur }) { + val chasseurQuiTire = partieDeChasse.chasseurs!!.first { c -> c.nom == chasseur } + + if (chasseurQuiTire.ballesRestantes == 0) { + partieDeChasse.events!!.add( + Event( + timeProvider(), + "$chasseur veut tirer sur une galinette -> T'as plus de balles mon vieux, chasse à la main" + ) + ) + repository.save(partieDeChasse) + throw TasPlusDeBallesMonVieuxChasseALaMain() + } + chasseurQuiTire.ballesRestantes -= 1 + chasseurQuiTire.nbGalinettes += 1 + partieDeChasse.terrain!!.nbGalinettes -= 1 + partieDeChasse.events!!.add( + Event( + timeProvider(), + "$chasseur tire sur une galinette" + ) + ) + } else { + throw ChasseurInconnu(chasseur) + } + } else { + partieDeChasse.events!!.add( + Event( + timeProvider(), + "$chasseur veut tirer -> On tire pas quand la partie est terminée" + ) + ) + repository.save(partieDeChasse) + throw OnTirePasQuandLaPartieEstTerminee() + } + } else { + partieDeChasse + .events!!.add( + Event( + timeProvider(), + "$chasseur veut tirer -> On tire pas pendant l'apéro, c'est sacré !!!" + ) + ) + repository.save(partieDeChasse) + throw OnTirePasPendantLapéroCestSacré() + } + } else { + throw TasTropPicoledMonVieuxTasRienTouche() + } + + repository.save(partieDeChasse) + } + + fun tirer(id: UUID, chasseur: String) { + val partieDeChasse = repository.getById(id) ?: throw LaPartieDeChasseNexistePas() + + if (partieDeChasse.status != PartieStatus.APÉRO) { + if (partieDeChasse.status != PartieStatus.TERMINÉE) { + if (partieDeChasse.chasseurs!!.any { c -> c.nom == chasseur }) { + val chasseurQuiTire = partieDeChasse.chasseurs!!.first { c -> c.nom == chasseur } + + if (chasseurQuiTire.ballesRestantes == 0) { + partieDeChasse.events!!.add( + Event( + timeProvider(), + "$chasseur tire -> T'as plus de balles mon vieux, chasse à la main" + ) + ) + repository.save(partieDeChasse) + throw TasPlusDeBallesMonVieuxChasseALaMain() + } + chasseurQuiTire.ballesRestantes = chasseurQuiTire.ballesRestantes - 1 + partieDeChasse.events!!.add(Event(timeProvider(), "$chasseur tire")) + } else { + throw ChasseurInconnu(chasseur) + } + } else { + partieDeChasse.events!!.add( + Event( + timeProvider(), + "$chasseur veut tirer -> On tire pas quand la partie est terminée" + ) + ) + repository.save(partieDeChasse) + throw OnTirePasQuandLaPartieEstTerminee() + } + } else { + partieDeChasse.events!!.add( + Event( + timeProvider(), + "$chasseur veut tirer -> On tire pas pendant l'apéro, c'est sacré !!!" + ) + ) + repository.save(partieDeChasse) + throw OnTirePasPendantLapéroCestSacré() + } + repository.save(partieDeChasse) + } + + fun prendreLapéro(id: UUID) { + val partieDeChasse = repository.getById(id) ?: throw LaPartieDeChasseNexistePas() + + if (partieDeChasse.status == PartieStatus.APÉRO) { + throw OnEstDéjaEnTrainDePrendreLapéro() + } else if (partieDeChasse.status == PartieStatus.TERMINÉE) { + throw OnPrendPasLapéroQuandLaPartieEstTerminée() + } else { + partieDeChasse.status = PartieStatus.APÉRO + partieDeChasse.events!!.add(Event(timeProvider(), "Petit apéro")) + repository.save(partieDeChasse) + } + } + + fun reprendreLaPartie(id: UUID) { + val partieDeChasse = repository.getById(id) + + if (partieDeChasse == null) { + throw LaPartieDeChasseNexistePas() + } + if (partieDeChasse.status == PartieStatus.EN_COURS) { + throw LaChasseEstDéjaEnCours() + } + if (partieDeChasse.status == PartieStatus.TERMINÉE) { + throw QuandCestFiniCestFini() + } + + partieDeChasse.status = PartieStatus.EN_COURS + partieDeChasse.events!!.add(Event(timeProvider(), "Reprise de la chasse")) + repository.save(partieDeChasse) + } + + fun terminerLaPartie(id: UUID): String { + val partieDeChasse = repository.getById(id) + + val classement = partieDeChasse + ?.chasseurs + ?.groupBy { c -> c.nbGalinettes } + + if (partieDeChasse!!.status == PartieStatus.TERMINÉE) { + throw QuandCestFiniCestFini() + } + + partieDeChasse.status = PartieStatus.TERMINÉE + + val result: String + + if (classement!!.keys.all { it == 0 }) { + result = "Brocouille" + partieDeChasse.events!!.add( + Event( + timeProvider(), + "La partie de chasse est terminée, vainqueur : Brocouille" + ) + ) + } else { + val winners = classement[classement.keys.max()] + result = winners!! + .map(Chasseur::nom) + .joinToString(", ") + + partieDeChasse.events!!.add( + Event( + timeProvider(), + "La partie de chasse est terminée, vainqueur : ${ + winners.joinToString(", ") { chasseur: Chasseur -> chasseur.nom + " - " + chasseur.nbGalinettes + " galinettes" } + }" + )) + } + repository.save(partieDeChasse) + + return result + } + + fun consulterStatus(id: UUID): String { + val partieDeChasse = repository.getById(id) + if (partieDeChasse == null) throw LaPartieDeChasseNexistePas() + + return partieDeChasse.events!! + .sortedByDescending { it.date } + .joinToString(System.lineSeparator()) { it.toString() } + } +} \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/service/Terrain.kt b/kotlin/src/main/kotlin/bouchonnois/service/Terrain.kt new file mode 100644 index 0000000..913cdc0 --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/service/Terrain.kt @@ -0,0 +1,6 @@ +package bouchonnois.service + + +class Terrain(val nom: String) { + var nbGalinettes = 0 +} \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ChasseurInconnu.kt b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ChasseurInconnu.kt new file mode 100644 index 0000000..109a053 --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ChasseurInconnu.kt @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions + + +class ChasseurInconnu(chasseur: String) : Exception("Chasseur inconnu $chasseur") \ No newline at end of file diff --git "a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.kt" "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.kt" new file mode 100644 index 0000000..7c53949 --- /dev/null +++ "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieAvecUnChasseurSansBalle.kt" @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions + + +class ImpossibleDeDémarrerUnePartieAvecUnChasseurSansBalle : Exception() \ No newline at end of file diff --git "a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.kt" "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.kt" new file mode 100644 index 0000000..11d5eb8 --- /dev/null +++ "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansChasseur.kt" @@ -0,0 +1,3 @@ +package bouchonnois.service.exceptions + +class ImpossibleDeDémarrerUnePartieSansChasseur : Exception() \ No newline at end of file diff --git "a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.kt" "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.kt" new file mode 100644 index 0000000..a8c926f --- /dev/null +++ "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/ImpossibleDeD\303\251marrerUnePartieSansGalinettes.kt" @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions + + +class ImpossibleDeDémarrerUnePartieSansGalinettes : Exception() \ No newline at end of file diff --git "a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/LaChasseEstD\303\251jaEnCours.kt" "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/LaChasseEstD\303\251jaEnCours.kt" new file mode 100644 index 0000000..adfbea8 --- /dev/null +++ "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/LaChasseEstD\303\251jaEnCours.kt" @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions + + +class LaChasseEstDéjaEnCours : Exception() \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/LaPartieDeChasseNexistePas.kt b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/LaPartieDeChasseNexistePas.kt new file mode 100644 index 0000000..b7fe385 --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/LaPartieDeChasseNexistePas.kt @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions + + +class LaPartieDeChasseNexistePas : Exception() \ No newline at end of file diff --git "a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnEstD\303\251jaEnTrainDePrendreLap\303\251ro.kt" "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnEstD\303\251jaEnTrainDePrendreLap\303\251ro.kt" new file mode 100644 index 0000000..f1f9059 --- /dev/null +++ "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnEstD\303\251jaEnTrainDePrendreLap\303\251ro.kt" @@ -0,0 +1,3 @@ +package bouchonnois.service.exceptions + +class OnEstDéjaEnTrainDePrendreLapéro : Exception() \ No newline at end of file diff --git "a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.kt" "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.kt" new file mode 100644 index 0000000..d177e59 --- /dev/null +++ "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnPrendPasLap\303\251roQuandLaPartieEstTermin\303\251e.kt" @@ -0,0 +1,3 @@ +package bouchonnois.service.exceptions + +class OnPrendPasLapéroQuandLaPartieEstTerminée : Exception() \ No newline at end of file diff --git "a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.kt" "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.kt" new file mode 100644 index 0000000..d344c05 --- /dev/null +++ "b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnTirePasPendantLap\303\251roCestSacr\303\251.kt" @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions + + +class OnTirePasPendantLapéroCestSacré : Exception() \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnTirePasQuandLaPartieEstTerminee.kt b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnTirePasQuandLaPartieEstTerminee.kt new file mode 100644 index 0000000..bf7c5d6 --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/OnTirePasQuandLaPartieEstTerminee.kt @@ -0,0 +1,3 @@ +package bouchonnois.service.exceptions + +class OnTirePasQuandLaPartieEstTerminee : Exception() \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/QuandCestFiniCestFini.kt b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/QuandCestFiniCestFini.kt new file mode 100644 index 0000000..3d37234 --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/QuandCestFiniCestFini.kt @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions + + +class QuandCestFiniCestFini : Exception() diff --git a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/TasPlusDeBallesMonVieuxChasseALaMain.kt b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/TasPlusDeBallesMonVieuxChasseALaMain.kt new file mode 100644 index 0000000..4c00234 --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/TasPlusDeBallesMonVieuxChasseALaMain.kt @@ -0,0 +1,3 @@ +package bouchonnois.service.exceptions + +class TasPlusDeBallesMonVieuxChasseALaMain : Exception() \ No newline at end of file diff --git a/kotlin/src/main/kotlin/bouchonnois/service/exceptions/TasTropPicoledMonVieuxTasRienTouche.kt b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/TasTropPicoledMonVieuxTasRienTouche.kt new file mode 100644 index 0000000..49c6d5d --- /dev/null +++ b/kotlin/src/main/kotlin/bouchonnois/service/exceptions/TasTropPicoledMonVieuxTasRienTouche.kt @@ -0,0 +1,4 @@ +package bouchonnois.service.exceptions + + +class TasTropPicoledMonVieuxTasRienTouche : Exception() \ No newline at end of file diff --git a/kotlin/src/test/kotlin/bouchonnois/tests/doubles/PartieDeChasseRepositoryForTests.kt b/kotlin/src/test/kotlin/bouchonnois/tests/doubles/PartieDeChasseRepositoryForTests.kt new file mode 100644 index 0000000..e7c9137 --- /dev/null +++ b/kotlin/src/test/kotlin/bouchonnois/tests/doubles/PartieDeChasseRepositoryForTests.kt @@ -0,0 +1,22 @@ +package bouchonnois.tests.doubles + +import bouchonnois.domain.PartieDeChasse +import bouchonnois.repository.PartieDeChasseRepository +import java.util.* + +class PartieDeChasseRepositoryForTests : PartieDeChasseRepository { + var savedPartieDeChasse: PartieDeChasse? = null + private val partiesDeChasse: MutableMap = mutableMapOf() + + override fun save(partieDeChasse: PartieDeChasse) { + savedPartieDeChasse = partieDeChasse + add(partieDeChasse) + } + + override fun getById(partieDeChasseId: UUID?): PartieDeChasse? = + partiesDeChasse[partieDeChasseId] + + fun add(partieDeChasse: PartieDeChasse) { + partiesDeChasse.put(partieDeChasse.id!!, partieDeChasse) + } +} \ No newline at end of file diff --git a/kotlin/src/test/kotlin/bouchonnois/tests/service/PartieDeChasseServiceTests.kt b/kotlin/src/test/kotlin/bouchonnois/tests/service/PartieDeChasseServiceTests.kt new file mode 100644 index 0000000..0d963a2 --- /dev/null +++ b/kotlin/src/test/kotlin/bouchonnois/tests/service/PartieDeChasseServiceTests.kt @@ -0,0 +1,1341 @@ +package bouchonnois.tests.service + +import bouchonnois.domain.Chasseur +import bouchonnois.domain.Event +import bouchonnois.domain.PartieDeChasse +import bouchonnois.domain.PartieStatus +import bouchonnois.service.PartieDeChasseService +import bouchonnois.service.Terrain +import bouchonnois.service.exceptions.* +import bouchonnois.tests.doubles.PartieDeChasseRepositoryForTests +import io.kotest.assertions.throwables.shouldThrow +import io.kotest.core.spec.style.FeatureSpec +import io.kotest.matchers.collections.shouldHaveSize +import io.kotest.matchers.shouldBe +import java.lang.System.lineSeparator +import java.time.LocalDateTime +import java.time.Month.APRIL +import java.util.* + +class PartieDeChasseServiceTests : FeatureSpec({ + feature("démarrer une partie de chasse") { + scenario("avec plusieurs chasseurs") { + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + val chasseurs = mapOf( + ("Dédé" to 20), + ("Bernard" to 8), + ("Robert" to 12) + ) + val terrainDeChasse = ("Pitibon sur Sauldre" to 3) + + val id = service.démarrer( + terrainDeChasse, + chasseurs + ) + + val savedPartieDeChasse = repository.savedPartieDeChasse!! + savedPartieDeChasse.id shouldBe id + savedPartieDeChasse.status shouldBe PartieStatus.EN_COURS + savedPartieDeChasse.terrain!!.nom shouldBe "Pitibon sur Sauldre" + savedPartieDeChasse.terrain!!.nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!! shouldHaveSize 3 + savedPartieDeChasse.chasseurs!![0].nom shouldBe "Dédé" + savedPartieDeChasse.chasseurs!![0].ballesRestantes shouldBe 20 + savedPartieDeChasse.chasseurs!![0].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![1].nom shouldBe "Bernard" + savedPartieDeChasse.chasseurs!![1].ballesRestantes shouldBe 8 + savedPartieDeChasse.chasseurs!![1].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![2].nom shouldBe "Robert" + savedPartieDeChasse.chasseurs!![2].ballesRestantes shouldBe 12 + savedPartieDeChasse.chasseurs!![2].nbGalinettes shouldBe 0 + } + + scenario("échoue sans chasseurs") { + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + val chasseurs: Map = mapOf() + val terrainDeChasse = ("Pitibon sur Sauldre" to 3) + + shouldThrow { + service.démarrer( + terrainDeChasse, + chasseurs + ) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue avec un terrain sans galinettes") { + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + val terrainDeChasse = ("Pitibon sur Sauldre" to 0) + + shouldThrow { + service.démarrer( + terrainDeChasse, + mapOf() + ) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue si chasseur sans balle") { + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + val chasseurs = mapOf( + ("Dédé" to 20), + ("Bernard" to 0) + ) + val terrainDeChasse = ("Pitibon sur Sauldre" to 3) + + shouldThrow { + service.démarrer( + terrainDeChasse, + chasseurs + ) + } + repository.savedPartieDeChasse shouldBe null + } + } + + feature("tirer sur une galinette") { + scenario("avec un chasseur ayant des balles et assez de galinettes sur le terrain") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + service.tirerSurUneGalinette(id, "Bernard") + + val savedPartieDeChasse = repository.savedPartieDeChasse!! + savedPartieDeChasse.id shouldBe id + savedPartieDeChasse.status shouldBe PartieStatus.EN_COURS + savedPartieDeChasse.terrain!!.nom shouldBe "Pitibon sur Sauldre" + savedPartieDeChasse.terrain!!.nbGalinettes shouldBe 2 + savedPartieDeChasse.chasseurs!! shouldHaveSize 3 + savedPartieDeChasse.chasseurs!![0].nom shouldBe "Dédé" + savedPartieDeChasse.chasseurs!![0].ballesRestantes shouldBe 20 + savedPartieDeChasse.chasseurs!![0].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![1].nom shouldBe "Bernard" + savedPartieDeChasse.chasseurs!![1].ballesRestantes shouldBe 7 + savedPartieDeChasse.chasseurs!![1].nbGalinettes shouldBe 1 + savedPartieDeChasse.chasseurs!![2].nom shouldBe "Robert" + savedPartieDeChasse.chasseurs!![2].ballesRestantes shouldBe 12 + savedPartieDeChasse.chasseurs!![2].nbGalinettes shouldBe 0 + } + + scenario("échoue car partie n'existe pas") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.tirerSurUneGalinette( + id, + "Bernard" + ) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue avec un chasseur n'ayant plus de balles") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 0 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + + shouldThrow { + service.tirerSurUneGalinette( + id, + "Bernard" + ) + } + } + + scenario("échoue car pas de galinettes sur le terrain") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 0 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.tirerSurUneGalinette( + id, + "Bernard" + ) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue car le chasseur n'est pas dans la partie") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.tirerSurUneGalinette( + id, + "Chasseur inconnu" + ) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue si les chasseurs sont en apéro") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.APÉRO + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.tirerSurUneGalinette( + id, + "Bernard" + ) + } + } + + scenario("échoue si la partie est terminée") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.TERMINÉE + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.tirerSurUneGalinette( + id, + "Bernard" + ) + } + } + } + + feature("tirer") { + scenario("avec un chasseur ayant des balles et assez de galinettes sur le terrain") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + service.tirer(id, "Bernard") + + val savedPartieDeChasse = repository.savedPartieDeChasse!! + savedPartieDeChasse.id shouldBe id + savedPartieDeChasse.status shouldBe PartieStatus.EN_COURS + savedPartieDeChasse.terrain!!.nom shouldBe "Pitibon sur Sauldre" + savedPartieDeChasse.terrain!!.nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!! shouldHaveSize 3 + savedPartieDeChasse.chasseurs!![0].nom shouldBe "Dédé" + savedPartieDeChasse.chasseurs!![0].ballesRestantes shouldBe 20 + savedPartieDeChasse.chasseurs!![0].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![1].nom shouldBe "Bernard" + savedPartieDeChasse.chasseurs!![1].ballesRestantes shouldBe 7 + savedPartieDeChasse.chasseurs!![1].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![2].nom shouldBe "Robert" + savedPartieDeChasse.chasseurs!![2].ballesRestantes shouldBe 12 + savedPartieDeChasse.chasseurs!![2].nbGalinettes shouldBe 0 + } + + scenario("échoue car partie n'existe pas") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.tirer( + id, + "Bernard" + ) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue avec un chasseur n'ayant plus de balles") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 0 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + + shouldThrow { + service.tirer( + id, + "Bernard" + ) + } + } + + scenario("échoue car le chasseur n'est pas dans la partie") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.tirer( + id, + "Chasseur inconnu" + ) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue si les chasseurs sont en apéro") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.APÉRO + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.tirer( + id, + "Bernard" + ) + } + } + + scenario("échoue si la partie est terminée") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.TERMINÉE + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.tirer( + id, + "Bernard" + ) + } + } + } + + feature("prendre l'apéro") { + scenario("quand la partie est en cours") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + service.prendreLapéro(id) + + val savedPartieDeChasse = repository.savedPartieDeChasse!! + savedPartieDeChasse.id shouldBe id + savedPartieDeChasse.status shouldBe PartieStatus.APÉRO + savedPartieDeChasse.terrain!!.nom shouldBe "Pitibon sur Sauldre" + savedPartieDeChasse.terrain!!.nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!! shouldHaveSize 3 + savedPartieDeChasse.chasseurs!![0].nom shouldBe "Dédé" + savedPartieDeChasse.chasseurs!![0].ballesRestantes shouldBe 20 + savedPartieDeChasse.chasseurs!![0].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![1].nom shouldBe "Bernard" + savedPartieDeChasse.chasseurs!![1].ballesRestantes shouldBe 8 + savedPartieDeChasse.chasseurs!![1].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![2].nom shouldBe "Robert" + savedPartieDeChasse.chasseurs!![2].ballesRestantes shouldBe 12 + savedPartieDeChasse.chasseurs!![2].nbGalinettes shouldBe 0 + } + + scenario("échoue car partie n'existe pas") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.prendreLapéro(id) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue si les chasseurs sont déja en apéro") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.APÉRO + events = mutableListOf() + } + + ) + + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.prendreLapéro(id) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue si la partie de chasse est terminée") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.TERMINÉE + events = mutableListOf() + } + + ) + + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.prendreLapéro(id) + } + repository.savedPartieDeChasse shouldBe null + } + } + + feature("reprendre la partie de chasse") { + scenario("quand l'apéro est en cours") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.APÉRO + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + service.reprendreLaPartie(id) + + val savedPartieDeChasse = repository.savedPartieDeChasse!! + savedPartieDeChasse.id shouldBe id + savedPartieDeChasse.status shouldBe PartieStatus.EN_COURS + savedPartieDeChasse.terrain!!.nom shouldBe "Pitibon sur Sauldre" + savedPartieDeChasse.terrain!!.nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!! shouldHaveSize 3 + savedPartieDeChasse.chasseurs!![0].nom shouldBe "Dédé" + savedPartieDeChasse.chasseurs!![0].ballesRestantes shouldBe 20 + savedPartieDeChasse.chasseurs!![0].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![1].nom shouldBe "Bernard" + savedPartieDeChasse.chasseurs!![1].ballesRestantes shouldBe 8 + savedPartieDeChasse.chasseurs!![1].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![2].nom shouldBe "Robert" + savedPartieDeChasse.chasseurs!![2].ballesRestantes shouldBe 12 + savedPartieDeChasse.chasseurs!![2].nbGalinettes shouldBe 0 + } + + scenario("échoue car partie n'existe pas") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.reprendreLaPartie(id) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue si la partie de chasse est en cours") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.reprendreLaPartie(id) + } + repository.savedPartieDeChasse shouldBe null + } + + scenario("échoue si la partie de chasse est terminée") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.TERMINÉE + events = mutableListOf() + } + + ) + + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.reprendreLaPartie(id) + } + repository.savedPartieDeChasse shouldBe null + } + } + + feature("terminer la partie de chasse") { + scenario("quand la partie est en cours et 1 seul chasseur gagne") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + this.nbGalinettes = 2 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + val meilleurChasseur = service.terminerLaPartie(id) + + val savedPartieDeChasse = repository.savedPartieDeChasse!! + savedPartieDeChasse.id shouldBe id + savedPartieDeChasse.status shouldBe PartieStatus.TERMINÉE + savedPartieDeChasse.terrain!!.nom shouldBe "Pitibon sur Sauldre" + savedPartieDeChasse.terrain!!.nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!! shouldHaveSize 3 + savedPartieDeChasse.chasseurs!![0].nom shouldBe "Dédé" + savedPartieDeChasse.chasseurs!![0].ballesRestantes shouldBe 20 + savedPartieDeChasse.chasseurs!![0].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![1].nom shouldBe "Bernard" + savedPartieDeChasse.chasseurs!![1].ballesRestantes shouldBe 8 + savedPartieDeChasse.chasseurs!![1].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![2].nom shouldBe "Robert" + savedPartieDeChasse.chasseurs!![2].ballesRestantes shouldBe 12 + savedPartieDeChasse.chasseurs!![2].nbGalinettes shouldBe 2 + + meilleurChasseur shouldBe "Robert" + } + + scenario("quand la partie est en cours et 1 seul chasseur dans la partie") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + this.nbGalinettes = 2 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + val meilleurChasseur = service.terminerLaPartie(id) + + val savedPartieDeChasse = repository.savedPartieDeChasse!! + savedPartieDeChasse.id shouldBe id + savedPartieDeChasse.status shouldBe PartieStatus.TERMINÉE + savedPartieDeChasse.terrain!!.nom shouldBe "Pitibon sur Sauldre" + savedPartieDeChasse.terrain!!.nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!! shouldHaveSize 1 + savedPartieDeChasse.chasseurs!![0].nom shouldBe "Robert" + savedPartieDeChasse.chasseurs!![0].ballesRestantes shouldBe 12 + savedPartieDeChasse.chasseurs!![0].nbGalinettes shouldBe 2 + + meilleurChasseur shouldBe "Robert" + } + + scenario("quand la partie est en cours et 2 chasseurs ex aequo") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + this.nbGalinettes = 2 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + this.nbGalinettes = 2 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + val meilleurChasseur = service.terminerLaPartie(id) + + val savedPartieDeChasse = repository.savedPartieDeChasse!! + savedPartieDeChasse.id shouldBe id + savedPartieDeChasse.status shouldBe PartieStatus.TERMINÉE + savedPartieDeChasse.terrain!!.nom shouldBe "Pitibon sur Sauldre" + savedPartieDeChasse.terrain!!.nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!! shouldHaveSize 3 + savedPartieDeChasse.chasseurs!![0].nom shouldBe "Dédé" + savedPartieDeChasse.chasseurs!![0].ballesRestantes shouldBe 20 + savedPartieDeChasse.chasseurs!![0].nbGalinettes shouldBe 2 + savedPartieDeChasse.chasseurs!![1].nom shouldBe "Bernard" + savedPartieDeChasse.chasseurs!![1].ballesRestantes shouldBe 8 + savedPartieDeChasse.chasseurs!![1].nbGalinettes shouldBe 2 + savedPartieDeChasse.chasseurs!![2].nom shouldBe "Robert" + savedPartieDeChasse.chasseurs!![2].ballesRestantes shouldBe 12 + savedPartieDeChasse.chasseurs!![2].nbGalinettes shouldBe 0 + + meilleurChasseur shouldBe "Dédé, Bernard" + } + + scenario("quand la partie est en cours et tout le monde brocouille") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + val meilleurChasseur = service.terminerLaPartie(id) + + val savedPartieDeChasse = repository.savedPartieDeChasse!! + savedPartieDeChasse.id shouldBe id + savedPartieDeChasse.status shouldBe PartieStatus.TERMINÉE + savedPartieDeChasse.terrain!!.nom shouldBe "Pitibon sur Sauldre" + savedPartieDeChasse.terrain!!.nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!! shouldHaveSize 3 + savedPartieDeChasse.chasseurs!![0].nom shouldBe "Dédé" + savedPartieDeChasse.chasseurs!![0].ballesRestantes shouldBe 20 + savedPartieDeChasse.chasseurs!![0].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![1].nom shouldBe "Bernard" + savedPartieDeChasse.chasseurs!![1].ballesRestantes shouldBe 8 + savedPartieDeChasse.chasseurs!![1].nbGalinettes shouldBe 0 + savedPartieDeChasse.chasseurs!![2].nom shouldBe "Robert" + savedPartieDeChasse.chasseurs!![2].ballesRestantes shouldBe 12 + savedPartieDeChasse.chasseurs!![2].nbGalinettes shouldBe 0 + + meilleurChasseur shouldBe "Brocouille" + } + + scenario("quand les chasseurs sont à l'apéro et tous ex aequo") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + this.nbGalinettes = 3 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + this.nbGalinettes = 3 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + this.nbGalinettes = 3 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.APÉRO + events = mutableListOf() + } + + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + val meilleurChasseur = service.terminerLaPartie(id) + + val savedPartieDeChasse = repository.savedPartieDeChasse!! + savedPartieDeChasse.id shouldBe id + savedPartieDeChasse.status shouldBe PartieStatus.TERMINÉE + savedPartieDeChasse.terrain!!.nom shouldBe "Pitibon sur Sauldre" + savedPartieDeChasse.terrain!!.nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!! shouldHaveSize 3 + savedPartieDeChasse.chasseurs!![0].nom shouldBe "Dédé" + savedPartieDeChasse.chasseurs!![0].ballesRestantes shouldBe 20 + savedPartieDeChasse.chasseurs!![0].nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!![1].nom shouldBe "Bernard" + savedPartieDeChasse.chasseurs!![1].ballesRestantes shouldBe 8 + savedPartieDeChasse.chasseurs!![1].nbGalinettes shouldBe 3 + savedPartieDeChasse.chasseurs!![2].nom shouldBe "Robert" + savedPartieDeChasse.chasseurs!![2].ballesRestantes shouldBe 12 + savedPartieDeChasse.chasseurs!![2].nbGalinettes shouldBe 3 + + meilleurChasseur shouldBe "Dédé, Bernard, Robert" + } + + scenario("échoue si la partie est déjà terminée") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.TERMINÉE + events = mutableListOf() + } + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + shouldThrow { + service.reprendreLaPartie(id) + } + repository.savedPartieDeChasse shouldBe null + } + } + + feature("consulter status") { + scenario("quand la partie vient de démarrer") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + this.nbGalinettes = 3 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + this.nbGalinettes = 3 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + this.nbGalinettes = 3 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf( + Event( + LocalDateTime.of(2024, APRIL, 25, 9, 0, 12), + "La partie de chasse commence à Pitibon sur Sauldre avec Dédé (20 balles), Bernard (8 balles), Robert (12 balles)" + ) + ) + } + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + val status = service.consulterStatus(id) + + status shouldBe "09:00 - La partie de chasse commence à Pitibon sur Sauldre avec Dédé (20 balles), Bernard (8 balles), Robert (12 balles)" + } + + scenario("quand la partie est terminée") { + val id = UUID.randomUUID() + val repository = PartieDeChasseRepositoryForTests() + + repository.add( + PartieDeChasse() + .apply { + this.id = id + chasseurs = mutableListOf( + Chasseur() + .apply { + this.nom = "Dédé" + this.ballesRestantes = 20 + this.nbGalinettes = 3 + }, + Chasseur() + .apply { + this.nom = "Bernard" + this.ballesRestantes = 8 + this.nbGalinettes = 3 + }, + Chasseur() + .apply { + this.nom = "Robert" + this.ballesRestantes = 12 + this.nbGalinettes = 3 + } + ) + terrain = Terrain("Pitibon sur Sauldre").apply { this.nbGalinettes = 3 } + status = PartieStatus.EN_COURS + events = mutableListOf( + Event( + LocalDateTime.of(2024, APRIL, 25, 9, 0, 12), + "La partie de chasse commence à Pitibon sur Sauldre avec Dédé (20 balles), Bernard (8 balles), Robert (12 balles)" + ), + Event(LocalDateTime.of(2024, APRIL, 25, 9, 10, 0), "Dédé tire"), + Event(LocalDateTime.of(2024, APRIL, 25, 9, 40, 0), "Robert tire sur une galinette"), + Event(LocalDateTime.of(2024, APRIL, 25, 10, 0, 0), "Petit apéro"), + Event(LocalDateTime.of(2024, APRIL, 25, 11, 0, 0), "Reprise de la chasse"), + Event(LocalDateTime.of(2024, APRIL, 25, 11, 2, 0), "Bernard tire"), + Event(LocalDateTime.of(2024, APRIL, 25, 11, 3, 0), "Bernard tire"), + Event(LocalDateTime.of(2024, APRIL, 25, 11, 4, 0), "Dédé tire sur une galinette"), + Event(LocalDateTime.of(2024, APRIL, 25, 11, 30, 0), "Robert tire sur une galinette"), + Event(LocalDateTime.of(2024, APRIL, 25, 11, 40, 0), "Petit apéro"), + Event(LocalDateTime.of(2024, APRIL, 25, 14, 30, 0), "Reprise de la chasse"), + Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 0), "Bernard tire"), + Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 1), "Bernard tire"), + Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 2), "Bernard tire"), + Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 3), "Bernard tire"), + Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 4), "Bernard tire"), + Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 5), "Bernard tire"), + Event(LocalDateTime.of(2024, APRIL, 25, 14, 41, 6), "Bernard tire"), + Event( + LocalDateTime.of(2024, APRIL, 25, 14, 41, 7), + "Bernard tire -> T'as plus de balles mon vieux, chasse à la main" + ), + Event(LocalDateTime.of(2024, APRIL, 25, 15, 0, 0), "Robert tire sur une galinette"), + Event( + LocalDateTime.of(2024, APRIL, 25, 15, 30, 0), + "La partie de chasse est terminée, vainqueur : Robert - 3 galinettes" + ) + ) + } + ) + val service = PartieDeChasseService(repository) { LocalDateTime.now() } + + val status = service.consulterStatus(id) + + status shouldBe "15:30 - La partie de chasse est terminée, vainqueur : Robert - 3 galinettes" + lineSeparator() + + "15:00 - Robert tire sur une galinette" + lineSeparator() + + "14:41 - Bernard tire -> T'as plus de balles mon vieux, chasse à la main" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:30 - Reprise de la chasse" + lineSeparator() + + "11:40 - Petit apéro" + lineSeparator() + + "11:30 - Robert tire sur une galinette" + lineSeparator() + + "11:04 - Dédé tire sur une galinette" + lineSeparator() + + "11:03 - Bernard tire" + lineSeparator() + + "11:02 - Bernard tire" + lineSeparator() + + "11:00 - Reprise de la chasse" + lineSeparator() + + "10:00 - Petit apéro" + lineSeparator() + + "09:40 - Robert tire sur une galinette" + lineSeparator() + + "09:10 - Dédé tire" + lineSeparator() + + "09:00 - La partie de chasse commence à Pitibon sur Sauldre avec Dédé (20 balles), Bernard (8 balles), Robert (12 balles)" + } + } +}) \ No newline at end of file diff --git a/kotlin/src/test/kotlin/bouchonnois/tests/service/ScenarioTests.kt b/kotlin/src/test/kotlin/bouchonnois/tests/service/ScenarioTests.kt new file mode 100644 index 0000000..e3171fd --- /dev/null +++ b/kotlin/src/test/kotlin/bouchonnois/tests/service/ScenarioTests.kt @@ -0,0 +1,113 @@ +package bouchonnois.tests.service + +import bouchonnois.service.PartieDeChasseService +import bouchonnois.service.exceptions.TasPlusDeBallesMonVieuxChasseALaMain +import bouchonnois.tests.doubles.PartieDeChasseRepositoryForTests +import io.kotest.core.spec.style.FeatureSpec +import io.kotest.matchers.shouldBe +import java.lang.System.lineSeparator +import java.time.LocalDateTime +import java.time.Month + +class ScenarioTests : FeatureSpec({ + feature("test d'acceptation métier") { + var time = LocalDateTime.of(2024, Month.APRIL, 25, 9, 0, 0) + + scenario("dérouler une partie") { + val repository = PartieDeChasseRepositoryForTests() + val service = PartieDeChasseService(repository) { time } + val chasseurs = mapOf( + ("Dédé" to 20), + ("Bernard" to 8), + ("Robert" to 12) + ) + val terrainDeChasse = ("Pitibon sur Sauldre" to 4) + + val id = service.démarrer( + terrainDeChasse, + chasseurs + ) + + time = time.plusMinutes(10) + service.tirer(id, "Dédé") + + time = time.plusMinutes(30) + service.tirerSurUneGalinette(id, "Robert") + + time = time.plusMinutes(20) + service.prendreLapéro(id) + + time = time.plusHours(1) + service.reprendreLaPartie(id) + + time = time.plusMinutes(2) + service.tirer(id, "Bernard") + + time = time.plusMinutes(1) + service.tirer(id, "Bernard") + + time = time.plusMinutes(1) + service.tirerSurUneGalinette(id, "Dédé") + + time = time.plusMinutes(26) + service.tirerSurUneGalinette(id, "Robert") + + time = time.plusMinutes(10) + service.prendreLapéro(id) + + time = time.plusMinutes(170) + service.reprendreLaPartie(id) + + time = time.plusMinutes(11) + service.tirer(id, "Bernard") + + time = time.plusSeconds(1) + service.tirer(id, "Bernard") + + time = time.plusSeconds(1) + service.tirer(id, "Bernard") + + time = time.plusSeconds(1) + service.tirer(id, "Bernard") + + time = time.plusSeconds(1) + service.tirer(id, "Bernard") + + time = time.plusSeconds(1) + service.tirer(id, "Bernard") + + time = time.plusSeconds(1) + + try { + service.tirer(id, "Bernard") + } catch (e: TasPlusDeBallesMonVieuxChasseALaMain) { + } + + time = time.plusMinutes(19) + service.tirerSurUneGalinette(id, "Robert") + + time = time.plusMinutes(30) + service.terminerLaPartie(id) + + service.consulterStatus(id) shouldBe "15:30 - La partie de chasse est terminée, vainqueur : Robert - 3 galinettes" + lineSeparator() + + "15:00 - Robert tire sur une galinette" + lineSeparator() + + "14:41 - Bernard tire -> T'as plus de balles mon vieux, chasse à la main" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:41 - Bernard tire" + lineSeparator() + + "14:30 - Reprise de la chasse" + lineSeparator() + + "11:40 - Petit apéro" + lineSeparator() + + "11:30 - Robert tire sur une galinette" + lineSeparator() + + "11:04 - Dédé tire sur une galinette" + lineSeparator() + + "11:03 - Bernard tire" + lineSeparator() + + "11:02 - Bernard tire" + lineSeparator() + + "11:00 - Reprise de la chasse" + lineSeparator() + + "10:00 - Petit apéro" + lineSeparator() + + "09:40 - Robert tire sur une galinette" + lineSeparator() + + "09:10 - Dédé tire" + lineSeparator() + "09:00 - La partie de chasse commence à Pitibon sur Sauldre avec Dédé (20 balles), Bernard (8 balles), Robert (12 balles)" + } + } +}) \ No newline at end of file From e39b3777de246cc6333775150bc45225c3c756df Mon Sep 17 00:00:00 2001 From: Yoan Thirion Date: Thu, 16 Nov 2023 22:02:45 +0100 Subject: [PATCH 07/14] warn as error in kt --- kotlin/build.gradle.kts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kotlin/build.gradle.kts b/kotlin/build.gradle.kts index 66586b9..d52704f 100644 --- a/kotlin/build.gradle.kts +++ b/kotlin/build.gradle.kts @@ -26,8 +26,12 @@ tasks.test { kotlin { jvmToolchain(8) + compilerOptions { + allWarningsAsErrors = true + } } + jacoco { toolVersion = "0.8.7" } From 997d6d6ef4ae5f728128e2ffba3d6c804cc69662 Mon Sep 17 00:00:00 2001 From: Yoan Thirion Date: Fri, 17 Nov 2023 06:39:44 +0100 Subject: [PATCH 08/14] fix java annotation warning --- java/pom.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/java/pom.xml b/java/pom.xml index 542e360..0468006 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -66,6 +66,8 @@ -Werror -Xlint:all -Xlint:-serial + -Xlint:-options + -Xlint:-processing From e28f7d8ff5e944150d4900c805f94ba40ad98faf Mon Sep 17 00:00:00 2001 From: Yoan Thirion Date: Tue, 21 Nov 2023 11:17:48 +0100 Subject: [PATCH 09/14] kill all java mutants --- .../java/bouchonnois/domain/Chasseur.java | 6 +- .../bouchonnois/domain/PartieDeChasse.java | 6 +- .../java/bouchonnois/service/Terrain.java | 10 +++- .../service/PartieDeChasseServiceTests.java | 59 ++++++++++++++----- 4 files changed, 60 insertions(+), 21 deletions(-) diff --git a/java/src/main/java/bouchonnois/domain/Chasseur.java b/java/src/main/java/bouchonnois/domain/Chasseur.java index 447a16d..0df9cfb 100644 --- a/java/src/main/java/bouchonnois/domain/Chasseur.java +++ b/java/src/main/java/bouchonnois/domain/Chasseur.java @@ -1,8 +1,10 @@ package bouchonnois.domain; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; -@Data +@Getter +@Setter public class Chasseur { private String nom; private int ballesRestantes; diff --git a/java/src/main/java/bouchonnois/domain/PartieDeChasse.java b/java/src/main/java/bouchonnois/domain/PartieDeChasse.java index 04a16b8..2df345f 100644 --- a/java/src/main/java/bouchonnois/domain/PartieDeChasse.java +++ b/java/src/main/java/bouchonnois/domain/PartieDeChasse.java @@ -1,12 +1,14 @@ package bouchonnois.domain; import bouchonnois.service.Terrain; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; import java.util.List; import java.util.UUID; -@Data +@Getter +@Setter public class PartieDeChasse { private UUID id; private List chasseurs; diff --git a/java/src/main/java/bouchonnois/service/Terrain.java b/java/src/main/java/bouchonnois/service/Terrain.java index dee1ae8..b2d1f1b 100644 --- a/java/src/main/java/bouchonnois/service/Terrain.java +++ b/java/src/main/java/bouchonnois/service/Terrain.java @@ -1,9 +1,15 @@ package bouchonnois.service; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; -@Data +@Getter +@Setter public class Terrain { private final String nom; private int nbGalinettes; + + public Terrain(String nom) { + this.nom = nom; + } } diff --git a/java/src/test/java/bouchonnois/tests/service/PartieDeChasseServiceTests.java b/java/src/test/java/bouchonnois/tests/service/PartieDeChasseServiceTests.java index c6983f0..55f5eac 100644 --- a/java/src/test/java/bouchonnois/tests/service/PartieDeChasseServiceTests.java +++ b/java/src/test/java/bouchonnois/tests/service/PartieDeChasseServiceTests.java @@ -22,6 +22,11 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; class PartieDeChasseServiceTests { + private static void assertPartieDeChasseHasBeenSaved(PartieDeChasseRepositoryForTests repository, PartieDeChasse partieDeChasse) { + assertThat(repository.getSavedPartieDeChasse()) + .isEqualTo(partieDeChasse); + } + @Nested class DemarrerUnePartieDeChasse { @Test @@ -41,7 +46,7 @@ void avec_plusieurs_chasseurs() throws ImpossibleDeDémarrerUnePartieSansGalinet ); var savedPartieDeChasse = repository.getSavedPartieDeChasse(); - assertThat(savedPartieDeChasse.getId()).isEqualTo(id); + assertThat(savedPartieDeChasse.getId()).isNotNull().isEqualTo(id); assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.EN_COURS); assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(3); @@ -166,7 +171,7 @@ void echoue_avec_un_chasseur_nayant_plus_de_balles() { var id = UUID.randomUUID(); var repository = new PartieDeChasseRepositoryForTests(); - repository.add(new PartieDeChasse() { + var partieDeChasse = new PartieDeChasse() { { setId(id); setChasseurs(new ArrayList<>() {{ @@ -190,11 +195,14 @@ void echoue_avec_un_chasseur_nayant_plus_de_balles() { setStatus(PartieStatus.EN_COURS); setEvents(new ArrayList<>()); } - }); + }; + repository.add(partieDeChasse); var service = new PartieDeChasseService(repository, LocalDateTime::now); assertThatThrownBy(() -> service.tirerSurUneGalinette(id, "Bernard")) .isInstanceOf(TasPlusDeBallesMonVieuxChasseALaMain.class); + + assertPartieDeChasseHasBeenSaved(repository, partieDeChasse); } @Test @@ -276,7 +284,7 @@ void echoue_car_le_chasseur_n_est_pas_dans_la_partie() { var id = UUID.randomUUID(); var repository = new PartieDeChasseRepositoryForTests(); - repository.add(new PartieDeChasse() { + var partieDeChasse = new PartieDeChasse() { { setId(id); setChasseurs(new ArrayList<>() {{ @@ -300,11 +308,13 @@ void echoue_car_le_chasseur_n_est_pas_dans_la_partie() { setStatus(PartieStatus.APÉRO); setEvents(new ArrayList<>()); } - }); + }; + repository.add(partieDeChasse); var service = new PartieDeChasseService(repository, LocalDateTime::now); assertThatThrownBy(() -> service.tirerSurUneGalinette(id, "Bernard")) .isInstanceOf(OnTirePasPendantLapéroCestSacré.class); + assertPartieDeChasseHasBeenSaved(repository, partieDeChasse); } @Test @@ -312,7 +322,7 @@ void echoue_car_le_chasseur_n_est_pas_dans_la_partie() { var id = UUID.randomUUID(); var repository = new PartieDeChasseRepositoryForTests(); - repository.add(new PartieDeChasse() { + PartieDeChasse partieDeChasse = new PartieDeChasse() { { setId(id); setChasseurs(new ArrayList<>() {{ @@ -336,11 +346,13 @@ void echoue_car_le_chasseur_n_est_pas_dans_la_partie() { setStatus(PartieStatus.TERMINÉE); setEvents(new ArrayList<>()); } - }); + }; + repository.add(partieDeChasse); var service = new PartieDeChasseService(repository, LocalDateTime::now); assertThatThrownBy(() -> service.tirerSurUneGalinette(id, "Bernard")) .isInstanceOf(OnTirePasQuandLaPartieEstTerminee.class); + assertPartieDeChasseHasBeenSaved(repository, partieDeChasse); } } @@ -413,7 +425,7 @@ void echoue_avec_un_chasseur_nayant_plus_de_balles() { var id = UUID.randomUUID(); var repository = new PartieDeChasseRepositoryForTests(); - repository.add(new PartieDeChasse() { + var partieDeChasse = new PartieDeChasse() { { setId(id); setChasseurs(new ArrayList<>() {{ @@ -437,11 +449,13 @@ void echoue_avec_un_chasseur_nayant_plus_de_balles() { setStatus(PartieStatus.EN_COURS); setEvents(new ArrayList<>()); } - }); + }; + repository.add(partieDeChasse); var service = new PartieDeChasseService(repository, LocalDateTime::now); assertThatThrownBy(() -> service.tirer(id, "Bernard")) .isInstanceOf(TasPlusDeBallesMonVieuxChasseALaMain.class); + assertPartieDeChasseHasBeenSaved(repository, partieDeChasse); } @Test @@ -486,7 +500,7 @@ void echoue_car_le_chasseur_n_est_pas_dans_la_partie() { var id = UUID.randomUUID(); var repository = new PartieDeChasseRepositoryForTests(); - repository.add(new PartieDeChasse() { + var partieDeChasse = new PartieDeChasse() { { setId(id); setChasseurs(new ArrayList<>() {{ @@ -510,11 +524,13 @@ void echoue_car_le_chasseur_n_est_pas_dans_la_partie() { setStatus(PartieStatus.APÉRO); setEvents(new ArrayList<>()); } - }); + }; + repository.add(partieDeChasse); var service = new PartieDeChasseService(repository, LocalDateTime::now); assertThatThrownBy(() -> service.tirer(id, "Bernard")) .isInstanceOf(OnTirePasPendantLapéroCestSacré.class); + assertPartieDeChasseHasBeenSaved(repository, partieDeChasse); } @Test @@ -522,7 +538,7 @@ void echoue_car_le_chasseur_n_est_pas_dans_la_partie() { var id = UUID.randomUUID(); var repository = new PartieDeChasseRepositoryForTests(); - repository.add(new PartieDeChasse() { + PartieDeChasse partieDeChasse = new PartieDeChasse() { { setId(id); setChasseurs(new ArrayList<>() {{ @@ -546,11 +562,13 @@ void echoue_car_le_chasseur_n_est_pas_dans_la_partie() { setStatus(PartieStatus.TERMINÉE); setEvents(new ArrayList<>()); } - }); + }; + repository.add(partieDeChasse); var service = new PartieDeChasseService(repository, LocalDateTime::now); assertThatThrownBy(() -> service.tirer(id, "Bernard")) .isInstanceOf(OnTirePasQuandLaPartieEstTerminee.class); + assertPartieDeChasseHasBeenSaved(repository, partieDeChasse); } } @@ -1133,7 +1151,7 @@ void quand_la_partie_est_en_cours_et_tout_le_monde_brocouille() throws QuandCest @Nested class ConsulterStatus { @Test - void quand_la_partie_vient_de_démarrer() throws LaPartieDeChasseNexistePas, LaChasseEstDéjaEnCours, QuandCestFiniCestFini { + void quand_la_partie_vient_de_démarrer() throws LaPartieDeChasseNexistePas { var id = UUID.randomUUID(); var repository = new PartieDeChasseRepositoryForTests(); @@ -1174,7 +1192,7 @@ class ConsulterStatus { } @Test - void quand_la_partie_est_terminée() throws LaPartieDeChasseNexistePas, LaChasseEstDéjaEnCours, QuandCestFiniCestFini { + void quand_la_partie_est_terminée() throws LaPartieDeChasseNexistePas { var id = UUID.randomUUID(); var repository = new PartieDeChasseRepositoryForTests(); @@ -1253,5 +1271,16 @@ class ConsulterStatus { "09:00 - La partie de chasse commence à Pitibon sur Sauldre avec Dédé (20 balles), Bernard (8 balles), Robert (12 balles)" ); } + + @Test + void echoue_car_partie_nexiste_pas() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.consulterStatus(id)) + .isInstanceOf(LaPartieDeChasseNexistePas.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); + } } } From f9f6e22b95a39aad157519c72e1f705a672b0ee6 Mon Sep 17 00:00:00 2001 From: Yoan Thirion Date: Fri, 15 Dec 2023 15:21:55 +0100 Subject: [PATCH 10/14] add mutation in java step-by-step --- java/docs/03.kill-mutants.md | 186 ++++++++++++++++++ java/docs/img/add-ctor-terrain.png | Bin 0 -> 123924 bytes java/docs/img/chasseur-data.png | Bin 0 -> 674859 bytes java/docs/img/chasseur-fixed.png | Bin 0 -> 193595 bytes java/docs/img/mutant-setId.png | Bin 0 -> 395311 bytes .../img/partiedechasseservice-mutations.png | Bin 0 -> 1019397 bytes java/docs/img/pit-report-service-level.png | Bin 0 -> 129219 bytes java/docs/img/pit-report.png | Bin 0 -> 129351 bytes java/docs/img/rapport-final.png | Bin 0 -> 119114 bytes java/docs/img/test-manquant.png | Bin 0 -> 166832 bytes 10 files changed, 186 insertions(+) create mode 100644 java/docs/03.kill-mutants.md create mode 100644 java/docs/img/add-ctor-terrain.png create mode 100644 java/docs/img/chasseur-data.png create mode 100644 java/docs/img/chasseur-fixed.png create mode 100644 java/docs/img/mutant-setId.png create mode 100644 java/docs/img/partiedechasseservice-mutations.png create mode 100644 java/docs/img/pit-report-service-level.png create mode 100644 java/docs/img/pit-report.png create mode 100644 java/docs/img/rapport-final.png create mode 100644 java/docs/img/test-manquant.png diff --git a/java/docs/03.kill-mutants.md b/java/docs/03.kill-mutants.md new file mode 100644 index 0000000..6e6b7df --- /dev/null +++ b/java/docs/03.kill-mutants.md @@ -0,0 +1,186 @@ +# Let's kill some mutants + +Prendre quelques instants pour découvrir la +page [`Mutation Testing`](https://xtrem-tdd.netlify.app/flavours/mutation-testing/). + +Durant cette étape: + +- Lancer [`pitest`](https://pitest.org/) + - Analyser les mutants survivants +- `Tuer` autant de mutants que possible (atteindre un score de mutation d'au moins 90%) + +![Step 3 - Let's kill some mutants](../../img/step3.webp) + +## Point de départ + +![Rapport de départ](img/pit-report.png) + +Malgré notre fort `coverage` le score de mutation est très faible: `11%` sur le `domain`... + +## `Domain` +De nombreux morceaux de code sont marqués comme `NO_COVERAGE` dûs à l'usage massif de `lombok`... + +![@Data sur Chasseur](img/chasseur-data.png) + +- On supprime `@Data` qui amène trop de fonctionnalité par rapport à notre besoin + +```java +@Getter +@Setter +public class Chasseur { + private String nom; + private int ballesRestantes; + private int nbGalinettes; +} +``` + +- Cela va réduire drastiquement le nombre de mutations possibles + +![Fix sur Chasseur](img/chasseur-fixed.png) + +> On fait de même sur le reste de notre `domain` + +## `Service` +On s'intéresse désormais au package `service` + +![Package service](img/pit-report-service-level.png) + +- On commence par travailler sur les annotation sur `Terrain` + - On a besoin de rajouter le constructeur contenant le `nom` en argument + +```java +@Getter +@Setter +public class Terrain { + private final String nom; + private int nbGalinettes; + + public Terrain(String nom) { + this.nom = nom; + } +} +``` + +- Maintenant, on peut s'attaquer au `PartieDeChasseService` + +![setId](img/mutant-setId.png) + +- On va tuer ce mutant en renforçant notre test + - vérifier que le call au `setId` se fait bien + +```java + @Test +void avec_plusieurs_chasseurs() throws ImpossibleDeDémarrerUnePartieSansGalinettes, ImpossibleDeDémarrerUnePartieAvecUnChasseurSansBalle, ImpossibleDeDémarrerUnePartieSansChasseur { + var repository = new PartieDeChasseRepositoryForTests(); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + var chasseurs = new ArrayList>() {{ + add(new Tuple2<>("Dédé", 20)); + add(new Tuple2<>("Bernard", 8)); + add(new Tuple2<>("Robert", 12)); + }}; + var terrainDeChasse = new Tuple2<>("Pitibon sur Sauldre", 3); + + var id = service.démarrer( + terrainDeChasse, + chasseurs + ); + + var savedPartieDeChasse = repository.getSavedPartieDeChasse(); + // On vérifier que l'id généré n'est pas null + assertThat(savedPartieDeChasse.getId()).isNotNull().isEqualTo(id); + assertThat(savedPartieDeChasse.getStatus()).isEqualTo(PartieStatus.EN_COURS); + assertThat(savedPartieDeChasse.getTerrain().getNom()).isEqualTo("Pitibon sur Sauldre"); + assertThat(savedPartieDeChasse.getTerrain().getNbGalinettes()).isEqualTo(3); + assertThat(savedPartieDeChasse.getChasseurs()).hasSize(3); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNom()).isEqualTo("Dédé"); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getBallesRestantes()).isEqualTo(20); + assertThat(savedPartieDeChasse.getChasseurs().get(0).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNom()).isEqualTo("Bernard"); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getBallesRestantes()).isEqualTo(8); + assertThat(savedPartieDeChasse.getChasseurs().get(1).getNbGalinettes()).isZero(); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNom()).isEqualTo("Robert"); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getBallesRestantes()).isEqualTo(12); + assertThat(savedPartieDeChasse.getChasseurs().get(2).getNbGalinettes()).isZero(); +} +``` + +- Si on jette un oeil aux autres mutants, on se rend compte que `pitest` arrive à retirer l'appel au `save` du repository sans que les tests le détectent + +![Autres mutants](img/partiedechasseservice-mutations.png) + +- On change les tests pour faire cette vérification + +```java +@Test +void echoue_avec_un_chasseur_nayant_plus_de_balles() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + + var partieDeChasse = new PartieDeChasse() { + { + setId(id); + setChasseurs(new ArrayList<>() {{ + add(new Chasseur() {{ + setNom("Dédé"); + setBallesRestantes(20); + }}); + add(new Chasseur() {{ + setNom("Bernard"); + setBallesRestantes(0); + }}); + add(new Chasseur() {{ + setNom("Robert"); + setBallesRestantes(12); + }}); + }}); + + setTerrain(new Terrain("Pitibon sur Sauldre") {{ + setNbGalinettes(3); + }}); + setStatus(PartieStatus.EN_COURS); + setEvents(new ArrayList<>()); + } + }; + repository.add(partieDeChasse); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.tirerSurUneGalinette(id, "Bernard")) + .isInstanceOf(TasPlusDeBallesMonVieuxChasseALaMain.class); + + assertPartieDeChasseHasBeenSaved(repository, partieDeChasse); +} +``` + +### Amélioration du coverage +- Via ce rapport, on se rend compte qu'il y a une branche qui n'est pas couverte + +![Test manquant](img/test-manquant.png) + +- Ajoutons le test manquant + +```java +@Test +void echoue_car_partie_nexiste_pas() { + var id = UUID.randomUUID(); + var repository = new PartieDeChasseRepositoryForTests(); + var service = new PartieDeChasseService(repository, LocalDateTime::now); + + assertThatThrownBy(() -> service.consulterStatus(id)) + .isInstanceOf(LaPartieDeChasseNexistePas.class); + assertThat(repository.getSavedPartieDeChasse()).isNull(); +} +``` + +> Bravo, tous les mutants sont morts + +![Rapport final](img/rapport-final.png) + +## Reflect + +Pour créer de bons tests, il est important de `toujours se concentrer sur l'écriture de bonnes assertions` et encore +mieux développer en utilisant T.D.D. + +Lorsqu'on écrit des tests (a priori ou posteriori), il est important d'avoir en tête certains principes tels que +les [Test Desiderata](https://kentbeck.github.io/TestDesiderata/). + +![Let's kill some mutants](../../facilitation/steps/img/03.kill-mutants/kill-mutants.webp) \ No newline at end of file diff --git a/java/docs/img/add-ctor-terrain.png b/java/docs/img/add-ctor-terrain.png new file mode 100644 index 0000000000000000000000000000000000000000..d521f5145f19ec34fada7eed975bcca2dfa9efae GIT binary patch literal 123924 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%0AmwGPEeT0i6e)&dfghfffpqwSC^$)sZm6 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

*SDe1| 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

r8iRAde-&j!Zy{?cQeGgWM-k{MT#KCnv(L`CHY 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