diff --git a/Sources/Model/IManager.cs b/Sources/Model/IManager.cs index ecc8ea9..2d7c13e 100644 --- a/Sources/Model/IManager.cs +++ b/Sources/Model/IManager.cs @@ -3,10 +3,10 @@ namespace Model { public interface IManager { - public T Add(ref T toAdd); + public T Add(T toAdd); public T GetOneById(int id); public IEnumerable GetAll(); - public T Update(ref T before, ref T after); - public void Remove(ref T toRemove); + public T Update(T before, T after); + public void Remove(T toRemove); } } diff --git a/Sources/Model/PlayerManager.cs b/Sources/Model/PlayerManager.cs index 93ab043..b14c07f 100644 --- a/Sources/Model/PlayerManager.cs +++ b/Sources/Model/PlayerManager.cs @@ -26,7 +26,7 @@ namespace Model /// /// player to be added /// added player, or null if was null - public Player Add(ref Player toAdd) + public Player Add(Player toAdd) { if (toAdd != null) { @@ -76,19 +76,24 @@ namespace Model /// player to be updated /// player in the state that it needs to be in after the update /// updated player - public Player Update(ref Player before, ref Player after) + public Player Update(Player before, Player after) { - Remove(ref before); - return Add(ref after); + Remove(before); + return Add(after); } /// /// remove a player /// /// player to be removed - public void Remove(ref Player toRemove) + public void Remove(Player toRemove) { - players.Remove(toRemove); + // delegating, making sure we find it even if different case etc. + if (toRemove != null) + { + Player realToRemove = GetOneByName(toRemove.Name); + players.Remove(realToRemove); + } } } } diff --git a/Sources/Tests/Model_UTs/PlayerManagerTest.cs b/Sources/Tests/Model_UTs/PlayerManagerTest.cs index b87d7d4..f3f87dc 100644 --- a/Sources/Tests/Model_UTs/PlayerManagerTest.cs +++ b/Sources/Tests/Model_UTs/PlayerManagerTest.cs @@ -1,29 +1,25 @@ using Model; using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Xml.Linq; using Xunit; -using Xunit.Sdk; namespace Tests.Model_UTs { public class PlayerManagerTest { [Fact] - public void TestConstructorReturnsEmptyHashSet() + public void TestConstructorReturnsEmptyEnumerable() { // Arrange - PlayerManager playerManager; - HashSet expected; - HashSet actual; + PlayerManager playerManager = new(); + IEnumerable expected; + IEnumerable actual; // Act - playerManager = new(); - expected = new(); - actual = (HashSet)playerManager.GetAll(); + expected = new Collection(); + actual = playerManager.GetAll(); // Assert Assert.Equal(expected, actual); @@ -36,13 +32,13 @@ namespace Tests.Model_UTs PlayerManager playerManager = new(); Player alice = new("Alice"); Player bob = new("Bob"); - HashSet expected = new() { alice, bob }; // Act - HashSet actual = new() + Collection expected = new() { alice, bob }; + Collection actual = new() { - playerManager.Add(ref alice), - playerManager.Add(ref bob) + playerManager.Add(alice), + playerManager.Add(bob) }; // Assert @@ -59,7 +55,7 @@ namespace Tests.Model_UTs // Act expected = null; - actual = playerManager.Add(ref expected); + actual = playerManager.Add(expected);// Add() returns the added element if succesful // Assert Assert.Equal(expected, actual); @@ -89,7 +85,7 @@ namespace Tests.Model_UTs // Arrange PlayerManager playerManager = new(); Player player = new("Bob"); - playerManager.Add(ref player); + playerManager.Add(player); // Act Player result = playerManager.GetOneByName(name); @@ -104,7 +100,7 @@ namespace Tests.Model_UTs // Arrange PlayerManager playerManager = new(); Player player = new("Bob"); - playerManager.Add(ref player); + playerManager.Add(player); // Act Player result = playerManager.GetOneByName("Clyde"); @@ -123,7 +119,7 @@ namespace Tests.Model_UTs // Arrange PlayerManager playerManager = new(); Player expected = new("Bob"); - playerManager.Add(ref expected); + playerManager.Add(expected); // Act Player actual = playerManager.GetOneByName(name); @@ -138,10 +134,10 @@ namespace Tests.Model_UTs // Arrange PlayerManager playerManager = new(); Player p1 = new("Dylan"); - playerManager.Add(ref p1); + playerManager.Add(p1); // Act - playerManager.Remove(ref p1); + playerManager.Remove(p1); // Assert Assert.DoesNotContain(p1, playerManager.GetAll()); @@ -153,13 +149,13 @@ namespace Tests.Model_UTs // Arrange PlayerManager playerManager = new(); Player player = new("Dylan"); - playerManager.Add(ref player); + playerManager.Add(player); Player notPlayer = null; - HashSet expected = new() { player }; + IEnumerable expected = new Collection { player }; // Act - playerManager.Remove(ref notPlayer); - HashSet actual = (HashSet)playerManager.GetAll(); + playerManager.Remove(notPlayer); + IEnumerable actual = playerManager.GetAll(); // Assert Assert.Equal(actual, expected); @@ -171,13 +167,13 @@ namespace Tests.Model_UTs // Arrange PlayerManager playerManager = new(); Player player = new("Dylan"); - playerManager.Add(ref player); + playerManager.Add(player); Player notPlayer = new("Eric"); - HashSet expected = new() { player }; + IEnumerable expected = new Collection { player }; // Act - playerManager.Remove(ref notPlayer); - HashSet actual = (HashSet)playerManager.GetAll(); + playerManager.Remove(notPlayer); + IEnumerable actual = playerManager.GetAll(); // Assert Assert.Equal(actual, expected); @@ -189,33 +185,39 @@ namespace Tests.Model_UTs // Arrange PlayerManager playerManager = new(); Player oldPlayer = new("Dylan"); - playerManager.Add(ref oldPlayer); + playerManager.Add(oldPlayer); Player newPlayer = new("Eric"); // Act - playerManager.Update(ref oldPlayer, ref newPlayer); + playerManager.Update(oldPlayer, newPlayer); // Assert Assert.DoesNotContain(oldPlayer, playerManager.GetAll()); Assert.Contains(newPlayer, playerManager.GetAll()); + Assert.True(playerManager.GetAll().Count() == 1); } - [Fact] - public void TestUpdateDoesNothingIfSame() + [Theory] + [InlineData("Filibert", "filibert")] + [InlineData("Filibert", " fiLibert")] + [InlineData("Filibert", "FIlibert ")] + [InlineData(" Filibert", " filiBErt ")] + public void TestUpdateDiscreetlyUpdatesCaseAndIgnoresExtraSpaceIfOtherwiseSame(string n1, string n2) { // Arrange - string name = "Filibert"; PlayerManager playerManager = new(); - Player oldPlayer = new(name); - playerManager.Add(ref oldPlayer); - Player newPlayer = new(name); + Player oldPlayer = new(n1); + playerManager.Add(oldPlayer); + Player newPlayer = new(n2); // Act - playerManager.Update(ref oldPlayer, ref newPlayer); + playerManager.Update(oldPlayer, newPlayer); // Assert Assert.Contains(oldPlayer, playerManager.GetAll()); Assert.Contains(newPlayer, playerManager.GetAll()); + Assert.Equal(n2.Trim(), playerManager.GetAll().First().Name); + // uses Equals(), which is made to be case-insensitive } } } diff --git a/Sources/Tests/Model_UTs/PlayerTest.cs b/Sources/Tests/Model_UTs/PlayerTest.cs index efe8011..9ab7bb8 100644 --- a/Sources/Tests/Model_UTs/PlayerTest.cs +++ b/Sources/Tests/Model_UTs/PlayerTest.cs @@ -11,12 +11,14 @@ namespace Tests.Model_UTs { // Arrange Player player; + string expected = "Alice"; // Act - player = new("Alice"); + player = new(expected); + string actual = player.Name; // Assert - Assert.Equal("Alice", player.Name); + Assert.Equal(expected, actual); } [Fact] @@ -24,12 +26,14 @@ namespace Tests.Model_UTs { // Arrange Player player; + string expected = "Alice"; // Act - player = new("Alice "); + player = new(" Alice "); + string actual = player.Name; // Assert - Assert.Equal("Alice", player.Name); + Assert.Equal(expected, actual); } [Theory] @@ -159,10 +163,11 @@ namespace Tests.Model_UTs // Arrange Player p1; Player p2; + string name = "Elyse"; // Act - p1 = new("Elyse"); - p2 = new("Elyse"); + p1 = new(name); + p2 = new(name); // Assert Assert.True(p1.Equals(p2)); @@ -211,10 +216,11 @@ namespace Tests.Model_UTs // Arrange Player p1; Player p2; + string name = "Elyse"; // Act - p1 = new("Elyse"); - p2 = new("Elyse"); + p1 = new(name); + p2 = new(name); // Assert Assert.True(p1.GetHashCode().Equals(p2.GetHashCode()));