diff --git a/.gitignore b/.gitignore index 3ee7f61..a395674 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,6 @@ bin obj - +report +tools/ +TestResults \ No newline at end of file diff --git a/documentation/Coverage.adoc b/documentation/Coverage.adoc new file mode 100644 index 0000000..6851caa --- /dev/null +++ b/documentation/Coverage.adoc @@ -0,0 +1,6 @@ +Pour générer la couverture en local il faut installer l'outil : + - dotnet tool install -g dotnet-reportgenerator-globaltool + - dotnet tool install dotnet-reportgenerator-globaltool --tool-path tools + +Pour le lancer + - reportgenerator "-reports:src/**/TestResults/**/coverage.cobertura.xml" "-targetdir:./report" "-reporttypes:Html" \ No newline at end of file diff --git a/scripts/windows/generateCoverage.ps1 b/scripts/windows/generateCoverage.ps1 new file mode 100644 index 0000000..4bdb459 --- /dev/null +++ b/scripts/windows/generateCoverage.ps1 @@ -0,0 +1,13 @@ + + +#supprimer les dossiers de tests précédents +get-childitem -Include TestResults -Recurse -force | Remove-Item -Force -Recurse + +#lancer les tests +dotnet test ./src/LittleTown.sln --configuration Release --verbosity normal --logger trx --collect:"XPlat Code Coverage" --logger:"trx;LogFileName=test_results.xml" + +#générer le rapport html +reportgenerator "-reports:src/**/TestResults/**/coverage.cobertura.xml" "-targetdir:./report" "-reporttypes:Html" + +#ouvrir le fichier html +report/index.html \ No newline at end of file diff --git a/src/LittleTown.Core.Tests/ExceptionTesting.cs b/src/LittleTown.Core.Tests/ExceptionTesting.cs new file mode 100644 index 0000000..52de8fa --- /dev/null +++ b/src/LittleTown.Core.Tests/ExceptionTesting.cs @@ -0,0 +1,37 @@ +using System.Reflection; +using System.Text.Json; +using LittleTown.Core.Exceptions; +using LittleTown.StaticDataAcces; + +namespace LittleTown.Core.Tests; + +public class ExceptionTesting +{ + [Fact] + public void ExceptionForStaticData() + { + StaticDataGetter getter = new StaticDataGetter("null", "null", "null"); + + + Assert.Throws(() => getter.GetBoard(1)); + Assert.Throws(() => getter.GetObjectives()); + Assert.Throws(() => getter.GetBuildings()); + } + + [Fact] + public void NombreDeJoueurMauvaisDansMatch() + { + StaticDataGetter getter = new(); + + Match match2Player = new Match(getter); + match2Player.AddPlayer("Player1"); + match2Player.AddPlayer("Player2"); + + Type type = match2Player.GetType(); + + PropertyInfo? prop = type?.BaseType?.GetProperty("_players"); + + prop?.SetValue(match2Player, new Dictionary(), null); + Assert.Throws(() => match2Player.Init()); + } +} \ No newline at end of file diff --git a/src/LittleTown.Core.Tests/LittleTown.Core.Tests.csproj b/src/LittleTown.Core.Tests/LittleTown.Core.Tests.csproj index 4ffeaf3..536e202 100644 --- a/src/LittleTown.Core.Tests/LittleTown.Core.Tests.csproj +++ b/src/LittleTown.Core.Tests/LittleTown.Core.Tests.csproj @@ -11,6 +11,7 @@ + diff --git a/src/LittleTown.Core/LittleTown.Core.csproj b/src/LittleTown.Core/LittleTown.Core.csproj index d7b5bc5..85c685f 100644 --- a/src/LittleTown.Core/LittleTown.Core.csproj +++ b/src/LittleTown.Core/LittleTown.Core.csproj @@ -9,6 +9,8 @@ true true All + full + true diff --git a/src/LittleTown.StaticDataAccess/StaticDataGetter.cs b/src/LittleTown.StaticDataAccess/StaticDataGetter.cs index 9cc7df8..d985b56 100644 --- a/src/LittleTown.StaticDataAccess/StaticDataGetter.cs +++ b/src/LittleTown.StaticDataAccess/StaticDataGetter.cs @@ -9,23 +9,50 @@ namespace LittleTown.StaticDataAcces; /// public class StaticDataGetter : IStaticDataGetter { + string _boardData = ""; + string _buildingData = ""; + string _objectivesData = ""; + + /// + /// Constructeur avec les chemin des fichiers de données + /// + /// structure json definissant le plateau + /// structure json definissant les building + /// structure json definissant les objectifs + public StaticDataGetter(string boardData, string buildingData, string objectivesData) + { + _boardData = boardData; + _objectivesData = objectivesData; + _buildingData = buildingData; + } + + /// Constructeur avec les chemins par défaut, à utiliser pour les tests seulement + public StaticDataGetter() + { + string boardPath = Path.Combine(Environment.CurrentDirectory, "../../../../LittleTown.StaticDataAccess/Data/Board1.json"); + string buildingPath = Path.Combine(Environment.CurrentDirectory, "../../../../LittleTown.StaticDataAccess/Data/Buildings.json"); + string objectivesPath = Path.Combine(Environment.CurrentDirectory, "../../../../LittleTown.StaticDataAccess/Data/Objectives.json"); + ReadFiles(boardPath, buildingPath, objectivesPath); + } + + private void ReadFiles(string boardPath, string buildingPath, string objectivesPath) + { + _boardData = File.ReadAllText(boardPath); + _buildingData = File.ReadAllText(buildingPath); + _objectivesData = File.ReadAllText(objectivesPath); + } /// public Board GetBoard(int version) { - - string path = Path.Combine(Environment.CurrentDirectory, "../../../../LittleTown.StaticDataAccess/Data/Board1.json"); - string data = File.ReadAllText(path); - Board board = JsonSerializer.Deserialize(data) ?? throw new JsonException("Cannot deserialize Board"); + Board board = JsonSerializer.Deserialize(_boardData) ?? throw new JsonException("Cannot deserialize Board"); return board; } /// public ICollection GetBuildings() { - string path = Path.Combine(Environment.CurrentDirectory, "../../../../LittleTown.StaticDataAccess/Data/Buildings.json"); - string data = System.IO.File.ReadAllText(path); - List buildings = JsonSerializer.Deserialize>(data) ?? throw new JsonException("Cannot deserialize Buildings"); + List buildings = JsonSerializer.Deserialize>(_buildingData) ?? throw new JsonException("Cannot deserialize Buildings"); return buildings; } @@ -33,9 +60,7 @@ public class StaticDataGetter : IStaticDataGetter /// public ICollection GetObjectives() { - string path = Path.Combine(Environment.CurrentDirectory, "../../../../LittleTown.StaticDataAccess/Data/Objectives.json"); - string data = System.IO.File.ReadAllText(path); - List objectives = JsonSerializer.Deserialize>(data) ?? throw new JsonException("Cannot deserialize Objectives"); + List objectives = JsonSerializer.Deserialize>(_objectivesData) ?? throw new JsonException("Cannot deserialize Objectives"); return objectives; }