From 49276658901c4c4dfe34c0927184502348767ce0 Mon Sep 17 00:00:00 2001 From: Maxence Lanone Date: Wed, 29 Mar 2023 23:11:32 +0200 Subject: [PATCH] :white_check_mark: add test for player class --- Sources/Model/Player.cs | 2 +- Sources/Tests/Test_Model/TestPlayer.cs | 152 +++++++++++++++++++++ Sources/Tests/Test_Model/Test_Model.csproj | 27 ++++ Sources/Tests/Test_Model/Usings.cs | 1 + Sources/Trek12_API.sln | 7 + 5 files changed, 188 insertions(+), 1 deletion(-) create mode 100644 Sources/Tests/Test_Model/TestPlayer.cs create mode 100644 Sources/Tests/Test_Model/Test_Model.csproj create mode 100644 Sources/Tests/Test_Model/Usings.cs diff --git a/Sources/Model/Player.cs b/Sources/Model/Player.cs index 89a0bec..fb37d0a 100644 --- a/Sources/Model/Player.cs +++ b/Sources/Model/Player.cs @@ -1,5 +1,5 @@ namespace Model; - public class Player : IEquatable +public class Player : IEquatable { public int Id { get; set; } diff --git a/Sources/Tests/Test_Model/TestPlayer.cs b/Sources/Tests/Test_Model/TestPlayer.cs new file mode 100644 index 0000000..63d1b89 --- /dev/null +++ b/Sources/Tests/Test_Model/TestPlayer.cs @@ -0,0 +1,152 @@ +using Model; + +namespace Test_Model; + +public class TestPlayer +{ + public static IEnumerable PlayerData => + new List + { + new object[] { new Player("Alice", new Stats { NbWin = 2, NbPlayed = 5, MaxChain = 3, MaxZone = 10, MaxPoints = 200 }), true }, + new object[] { new Player("Bob", new Stats { NbWin = 1, NbPlayed = 2, MaxChain = 2, MaxZone = 5, MaxPoints = 100 }), false }, + new object[] { new Player("Alice", new Stats { NbWin = 1, NbPlayed = 3, MaxChain = 4, MaxZone = 12, MaxPoints = 150 }), true }, + new object[] { new Player(null), false }, + new object[] { new Player("Charlie"), false } + }; + + [Theory] + [MemberData(nameof(PlayerData))] + public void TestEquals(Player p1, bool expected) + { + var p2 = new Player(p1.Pseudo, p1.Stats, p1.Id); + + Assert.Equal(expected, p1.Equals(p2)); + } + + [Theory] + [InlineData("Alice", 2, 5, 3, 10, 200)] + [InlineData("Bob", 1, 2, 2, 5, 100)] + [InlineData("Charlie", 0, 0, 0, 0, 0)] + public void TestConstructorWithStats(string pseudo, int nbWin, int nbPlayed, int maxChain, int maxZone, int maxPoints) + { + var stats = new Stats { NbWin = nbWin, NbPlayed = nbPlayed, MaxChain = maxChain, MaxZone = maxZone, MaxPoints = maxPoints }; + var player = new Player(pseudo, stats); + + Assert.Equal(pseudo, player.Pseudo); + Assert.Equal(0, player.Id); + Assert.Equal(nbWin, player.Stats.NbWin); + Assert.Equal(nbPlayed, player.Stats.NbPlayed); + Assert.Equal(maxChain, player.Stats.MaxChain); + Assert.Equal(maxZone, player.Stats.MaxZone); + Assert.Equal(maxPoints, player.Stats.MaxPoints); + } + + [Fact] + public void TestAddWin() + { + var player = new Player("Alice"); + player.AddWin(); + player.AddWin(); + player.AddWin(); + + Assert.Equal(3, player.Stats.NbWin); + } + + [Fact] + public void TestAddPlayed() + { + var player = new Player("Alice"); + player.AddPlayed(); + player.AddPlayed(); + + Assert.Equal(2, player.Stats.NbPlayed); + } + + [Theory] + [InlineData("John")] + [InlineData("Jane")] + [InlineData("Jake")] + public void AddWin_ShouldIncrementNbWinByOne(string pseudo) + { + // Arrange + var player = new Player(pseudo); + var initialNbWin = player.Stats.NbWin; + + // Act + player.AddWin(); + + // Assert + Assert.Equal(initialNbWin + 1, player.Stats.NbWin); + } + + [Theory] + [InlineData("John")] + [InlineData("Jane")] + [InlineData("Jake")] + public void AddPlayed_ShouldIncrementNbPlayedByOne(string pseudo) + { + // Arrange + var player = new Player(pseudo); + var initialNbPlayed = player.Stats.NbPlayed; + + // Act + player.AddPlayed(); + + // Assert + Assert.Equal(initialNbPlayed + 1, player.Stats.NbPlayed); + } + + [Theory] + [InlineData("John", 10)] + [InlineData("Jane", 5)] + [InlineData("Jake", 7)] + public void AddMaxChain_ShouldSetMaxChain(string pseudo, int maxChain) + { + // Arrange + var player = new Player(pseudo); + var initialMaxChain = player.Stats.MaxChain; + + // Act + player.AddMaxChain(maxChain); + + // Assert + Assert.Equal(maxChain, player.Stats.MaxChain); + Assert.NotEqual(initialMaxChain, player.Stats.MaxChain); + } + + [Theory] + [InlineData("John", 5)] + [InlineData("Jane", 8)] + [InlineData("Jake", 12)] + public void AddMaxZone_ShouldSetMaxZone(string pseudo, int maxZone) + { + // Arrange + var player = new Player(pseudo); + var initialMaxZone = player.Stats.MaxZone; + + // Act + player.AddMaxZone(maxZone); + + // Assert + Assert.Equal(maxZone, player.Stats.MaxZone); + Assert.NotEqual(initialMaxZone, player.Stats.MaxZone); + } + + [Theory] + [InlineData("John", 100)] + [InlineData("Jane", 50)] + [InlineData("Jake", 75)] + public void AddMaxPoints_ShouldSetMaxPoints(string pseudo, int maxPoints) + { + // Arrange + var player = new Player(pseudo); + var initialMaxPoints = player.Stats.MaxPoints; + + // Act + player.AddMaxPoints(maxPoints); + + // Assert + Assert.Equal(maxPoints, player.Stats.MaxPoints); + Assert.NotEqual(initialMaxPoints, player.Stats.MaxPoints); + } +} diff --git a/Sources/Tests/Test_Model/Test_Model.csproj b/Sources/Tests/Test_Model/Test_Model.csproj new file mode 100644 index 0000000..89cc59c --- /dev/null +++ b/Sources/Tests/Test_Model/Test_Model.csproj @@ -0,0 +1,27 @@ + + + + net6.0 + enable + enable + + false + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + diff --git a/Sources/Tests/Test_Model/Usings.cs b/Sources/Tests/Test_Model/Usings.cs new file mode 100644 index 0000000..9df1d42 --- /dev/null +++ b/Sources/Tests/Test_Model/Usings.cs @@ -0,0 +1 @@ +global using Xunit; diff --git a/Sources/Trek12_API.sln b/Sources/Trek12_API.sln index 85afd25..527b156 100644 --- a/Sources/Trek12_API.sln +++ b/Sources/Trek12_API.sln @@ -23,6 +23,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shared", "Shared\Shared.csp EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test_Stub", "Tests\Test_Stub\Test_Stub.csproj", "{5A1D87FF-E82F-43FF-AC5C-59659B91D5B8}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test_Model", "Tests\Test_Model\Test_Model.csproj", "{593766AA-8E2A-4B3D-A299-8E45F5C19C18}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -61,6 +63,10 @@ Global {5A1D87FF-E82F-43FF-AC5C-59659B91D5B8}.Debug|Any CPU.Build.0 = Debug|Any CPU {5A1D87FF-E82F-43FF-AC5C-59659B91D5B8}.Release|Any CPU.ActiveCfg = Release|Any CPU {5A1D87FF-E82F-43FF-AC5C-59659B91D5B8}.Release|Any CPU.Build.0 = Release|Any CPU + {593766AA-8E2A-4B3D-A299-8E45F5C19C18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {593766AA-8E2A-4B3D-A299-8E45F5C19C18}.Debug|Any CPU.Build.0 = Debug|Any CPU + {593766AA-8E2A-4B3D-A299-8E45F5C19C18}.Release|Any CPU.ActiveCfg = Release|Any CPU + {593766AA-8E2A-4B3D-A299-8E45F5C19C18}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -70,6 +76,7 @@ Global {6EC6383D-10E8-44E1-8EDD-EF4DF460A9B1} = {C75DF644-C41F-4A08-8B69-C8554204AC72} {5E45E953-4FCC-42B6-9F22-15108D002D78} = {B1585816-FCBB-484F-A1AA-C7AEB501C39B} {5A1D87FF-E82F-43FF-AC5C-59659B91D5B8} = {C75DF644-C41F-4A08-8B69-C8554204AC72} + {593766AA-8E2A-4B3D-A299-8E45F5C19C18} = {C75DF644-C41F-4A08-8B69-C8554204AC72} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {4D47853B-D1A3-49A5-84BA-CD2DC65FD105}