🐛♻️ Fix-uts #51

Merged
alexis.drai merged 6 commits from fix-uts into main 3 years ago

@ -3,10 +3,10 @@ namespace Model
{ {
public interface IManager<T> public interface IManager<T>
{ {
public T Add(ref T toAdd); public T Add(T toAdd);
public T GetOneById(int id); public T GetOneById(int id);
public IEnumerable<T> GetAll(); public IEnumerable<T> GetAll();
public T Update(ref T before, ref T after); public T Update(T before, T after);
public void Remove(ref T toRemove); public void Remove(T toRemove);
} }
} }

@ -26,7 +26,7 @@ namespace Model
/// </summary> /// </summary>
/// <param name="toAdd">player to be added</param> /// <param name="toAdd">player to be added</param>
/// <returns>added player, or null if <paramref name="toAdd"/> was null</returns> /// <returns>added player, or null if <paramref name="toAdd"/> was null</returns>
public Player Add(ref Player toAdd) public Player Add(Player toAdd)
{ {
if (toAdd != null) if (toAdd != null)
{ {
@ -76,19 +76,24 @@ namespace Model
/// <param name="before">player to be updated</param> /// <param name="before">player to be updated</param>
/// <param name="after">player in the state that it needs to be in after the update</param> /// <param name="after">player in the state that it needs to be in after the update</param>
/// <returns>updated player</returns> /// <returns>updated player</returns>
public Player Update(ref Player before, ref Player after) public Player Update(Player before, Player after)
{ {
Remove(ref before); Remove(before);
return Add(ref after); return Add(after);
} }
/// <summary> /// <summary>
/// remove a player /// remove a player
/// </summary> /// </summary>
/// <param name="toRemove">player to be removed</param> /// <param name="toRemove">player to be removed</param>
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);
}
} }
} }
} }

@ -1,29 +1,25 @@
using Model; using Model;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using Xunit; using Xunit;
using Xunit.Sdk;
namespace Tests.Model_UTs namespace Tests.Model_UTs
{ {
public class PlayerManagerTest public class PlayerManagerTest
{ {
[Fact] [Fact]
public void TestConstructorReturnsEmptyHashSet() public void TestConstructorReturnsEmptyEnumerable()
{ {
// Arrange // Arrange
PlayerManager playerManager; PlayerManager playerManager = new();
HashSet<Player> expected; IEnumerable<Player> expected;
HashSet<Player> actual; IEnumerable<Player> actual;
// Act // Act
playerManager = new(); expected = new Collection<Player>();
expected = new(); actual = playerManager.GetAll();
actual = (HashSet<Player>)playerManager.GetAll();
// Assert // Assert
Assert.Equal(expected, actual); Assert.Equal(expected, actual);
@ -36,13 +32,13 @@ namespace Tests.Model_UTs
PlayerManager playerManager = new(); PlayerManager playerManager = new();
Player alice = new("Alice"); Player alice = new("Alice");
Player bob = new("Bob"); Player bob = new("Bob");
HashSet<Player> expected = new() { alice, bob };
// Act // Act
HashSet<Player> actual = new() Collection<Player> expected = new() { alice, bob };
Collection<Player> actual = new()
{ {
playerManager.Add(ref alice), playerManager.Add(alice),
playerManager.Add(ref bob) playerManager.Add(bob)
}; };
// Assert // Assert
@ -59,7 +55,7 @@ namespace Tests.Model_UTs
// Act // Act
expected = null; expected = null;
actual = playerManager.Add(ref expected); actual = playerManager.Add(expected);// Add() returns the added element if succesful
// Assert // Assert
Assert.Equal(expected, actual); Assert.Equal(expected, actual);
@ -89,7 +85,7 @@ namespace Tests.Model_UTs
// Arrange // Arrange
PlayerManager playerManager = new(); PlayerManager playerManager = new();
Player player = new("Bob"); Player player = new("Bob");
playerManager.Add(ref player); playerManager.Add(player);
// Act // Act
Player result = playerManager.GetOneByName(name); Player result = playerManager.GetOneByName(name);
@ -104,7 +100,7 @@ namespace Tests.Model_UTs
// Arrange // Arrange
PlayerManager playerManager = new(); PlayerManager playerManager = new();
Player player = new("Bob"); Player player = new("Bob");
playerManager.Add(ref player); playerManager.Add(player);
// Act // Act
Player result = playerManager.GetOneByName("Clyde"); Player result = playerManager.GetOneByName("Clyde");
@ -123,7 +119,7 @@ namespace Tests.Model_UTs
// Arrange // Arrange
PlayerManager playerManager = new(); PlayerManager playerManager = new();
Player expected = new("Bob"); Player expected = new("Bob");
playerManager.Add(ref expected); playerManager.Add(expected);
// Act // Act
Player actual = playerManager.GetOneByName(name); Player actual = playerManager.GetOneByName(name);
@ -138,10 +134,10 @@ namespace Tests.Model_UTs
// Arrange // Arrange
PlayerManager playerManager = new(); PlayerManager playerManager = new();
Player p1 = new("Dylan"); Player p1 = new("Dylan");
playerManager.Add(ref p1); playerManager.Add(p1);
// Act // Act
playerManager.Remove(ref p1); playerManager.Remove(p1);
// Assert // Assert
Assert.DoesNotContain(p1, playerManager.GetAll()); Assert.DoesNotContain(p1, playerManager.GetAll());
@ -153,13 +149,13 @@ namespace Tests.Model_UTs
// Arrange // Arrange
PlayerManager playerManager = new(); PlayerManager playerManager = new();
Player player = new("Dylan"); Player player = new("Dylan");
playerManager.Add(ref player); playerManager.Add(player);
Player notPlayer = null; Player notPlayer = null;
HashSet<Player> expected = new() { player }; IEnumerable<Player> expected = new Collection<Player> { player };
// Act // Act
playerManager.Remove(ref notPlayer); playerManager.Remove(notPlayer);
HashSet<Player> actual = (HashSet<Player>)playerManager.GetAll(); IEnumerable<Player> actual = playerManager.GetAll();
// Assert // Assert
Assert.Equal(actual, expected); Assert.Equal(actual, expected);
@ -171,13 +167,13 @@ namespace Tests.Model_UTs
// Arrange // Arrange
PlayerManager playerManager = new(); PlayerManager playerManager = new();
Player player = new("Dylan"); Player player = new("Dylan");
playerManager.Add(ref player); playerManager.Add(player);
Player notPlayer = new("Eric"); Player notPlayer = new("Eric");
HashSet<Player> expected = new() { player }; IEnumerable<Player> expected = new Collection<Player> { player };
// Act // Act
playerManager.Remove(ref notPlayer); playerManager.Remove(notPlayer);
HashSet<Player> actual = (HashSet<Player>)playerManager.GetAll(); IEnumerable<Player> actual = playerManager.GetAll();
// Assert // Assert
Assert.Equal(actual, expected); Assert.Equal(actual, expected);
@ -189,33 +185,39 @@ namespace Tests.Model_UTs
// Arrange // Arrange
PlayerManager playerManager = new(); PlayerManager playerManager = new();
Player oldPlayer = new("Dylan"); Player oldPlayer = new("Dylan");
playerManager.Add(ref oldPlayer); playerManager.Add(oldPlayer);
Player newPlayer = new("Eric"); Player newPlayer = new("Eric");
// Act // Act
playerManager.Update(ref oldPlayer, ref newPlayer); playerManager.Update(oldPlayer, newPlayer);
// Assert // Assert
Assert.DoesNotContain(oldPlayer, playerManager.GetAll()); Assert.DoesNotContain(oldPlayer, playerManager.GetAll());
Assert.Contains(newPlayer, playerManager.GetAll()); Assert.Contains(newPlayer, playerManager.GetAll());
Assert.True(playerManager.GetAll().Count() == 1);
} }
[Fact] [Theory]
public void TestUpdateDoesNothingIfSame() [InlineData("Filibert", "filibert")]
[InlineData("Filibert", " fiLibert")]
[InlineData("Filibert", "FIlibert ")]
[InlineData(" Filibert", " filiBErt ")]
public void TestUpdateDiscreetlyUpdatesCaseAndIgnoresExtraSpaceIfOtherwiseSame(string n1, string n2)
{ {
// Arrange // Arrange
string name = "Filibert";
PlayerManager playerManager = new(); PlayerManager playerManager = new();
Player oldPlayer = new(name); Player oldPlayer = new(n1);
playerManager.Add(ref oldPlayer); playerManager.Add(oldPlayer);
Player newPlayer = new(name); Player newPlayer = new(n2);
// Act // Act
playerManager.Update(ref oldPlayer, ref newPlayer); playerManager.Update(oldPlayer, newPlayer);
// Assert // Assert
Assert.Contains(oldPlayer, playerManager.GetAll()); Assert.Contains(oldPlayer, playerManager.GetAll());
Assert.Contains(newPlayer, playerManager.GetAll()); Assert.Contains(newPlayer, playerManager.GetAll());
Assert.Equal(n2.Trim(), playerManager.GetAll().First().Name);
// uses Equals(), which is made to be case-insensitive
} }
} }
} }

@ -11,12 +11,14 @@ namespace Tests.Model_UTs
{ {
// Arrange // Arrange
Player player; Player player;
string expected = "Alice";
// Act // Act
player = new("Alice"); player = new(expected);
string actual = player.Name;
// Assert // Assert
Assert.Equal("Alice", player.Name); Assert.Equal(expected, actual);
} }
[Fact] [Fact]
@ -24,12 +26,14 @@ namespace Tests.Model_UTs
{ {
// Arrange // Arrange
Player player; Player player;
string expected = "Alice";
// Act // Act
player = new("Alice "); player = new(" Alice ");
string actual = player.Name;
// Assert // Assert
Assert.Equal("Alice", player.Name); Assert.Equal(expected, actual);
} }
[Theory] [Theory]
@ -159,10 +163,11 @@ namespace Tests.Model_UTs
// Arrange // Arrange
Player p1; Player p1;
Player p2; Player p2;
string name = "Elyse";
// Act // Act
p1 = new("Elyse"); p1 = new(name);
p2 = new("Elyse"); p2 = new(name);
// Assert // Assert
Assert.True(p1.Equals(p2)); Assert.True(p1.Equals(p2));
@ -211,10 +216,11 @@ namespace Tests.Model_UTs
// Arrange // Arrange
Player p1; Player p1;
Player p2; Player p2;
string name = "Elyse";
// Act // Act
p1 = new("Elyse"); p1 = new(name);
p2 = new("Elyse"); p2 = new(name);
// Assert // Assert
Assert.True(p1.GetHashCode().Equals(p2.GetHashCode())); Assert.True(p1.GetHashCode().Equals(p2.GetHashCode()));

Loading…
Cancel
Save