using Data; using Data.EF; using Microsoft.Data.Sqlite; using Microsoft.EntityFrameworkCore; using Microsoft.VisualStudio.TestTools.UnitTesting; using Model.Dice; using Model.Dice.Faces; using Model.Games; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using Xunit; namespace Tests.Data_UTs.Dice { public class DiceGroupManagerTest { private readonly MasterOfCeremonies stubGameRunner = new Stub().LoadApp(); [Fact] public void TestConstructorReturnsEmptyEnumerable() { // Arrange DiceGroupManager diceGroupManager = new(); Dictionary> expected; Dictionary> actual; // Act expected = new Dictionary>(); actual = (Dictionary>)diceGroupManager.GetAll(); // Assert Xunit.Assert.Equal(expected, actual); } [Fact] public void TestAddWhenDiceGroupThenDoAddAndReturnDiceGroup() { // Arrange DiceGroupManager dgm = new(); KeyValuePair> group1 = stubGameRunner.DiceGroupManager.GetAll().First(); KeyValuePair> group2 = stubGameRunner.DiceGroupManager.GetAll().Last(); // Act //...adding keys and values to some dictionary for future comparison Dictionary> expected = new() { { group1.Key, group1.Value }, { group2.Key, group2.Value } }; //...storing the results of DiceGroupManager.Add() in variables KeyValuePair> resultFromAdd1 = dgm.Add(group1); KeyValuePair> resultFromAdd2 = dgm.Add(group2); //...using those variables to fill a second dictionary for comparison Dictionary> actual = new() { { resultFromAdd1.Key, resultFromAdd1.Value }, { resultFromAdd2.Key, resultFromAdd2.Value } }; // Assert Xunit.Assert.Equal(expected, actual); } [Fact] public void TestAddIfNullThrowsException() { DiceGroupManager dgm = new(); KeyValuePair> group1 = stubGameRunner.DiceGroupManager.GetAll().First(); KeyValuePair> group2 = stubGameRunner.DiceGroupManager.GetAll().Last(); NumberFace[] d6Faces = new NumberFace[] { new(1), new(2), new(3), new(4), new(5), new(6) }; Dictionary> expected = new() { { "", new List{ new NumberDie(d6Faces[0], d6Faces[1..]), new NumberDie(d6Faces[0], d6Faces[3..]) } } }; Dictionary> toAdd = new(); /* void action() => toAdd.Add("", new List{ new NumberDie(d6Faces[0], d6Faces[1..]), new NumberDie(d6Faces[0], d6Faces[3..])}); */ // Xunit.Assert.Empty(expected.Keys); foreach (KeyValuePair> entry in expected) { Xunit.Assert.Empty(entry.Key); // do something with entry.Value or entry.Key } } [Fact] public void TestAddIfAlreadyExistsThrowsException() { DiceGroupManager dgm = new(); // Act KeyValuePair> toAdd = new("Monopoly", new List { new NumberDie(new NumberFace(5), new NumberFace(7)), new NumberDie(new NumberFace(5), new NumberFace(7))}); dgm.Add(toAdd); void action() => dgm.Add(toAdd); // Assert Xunit.Assert.Throws(action); } [Fact] public void TestGetOneByIdThrowsException() { // Arrange DiceGroupManager dgm = new(); // Act void action() => dgm.GetOneByID(new("9657b6f0-9431-458e-a2bd-4bb0c7d4a6ed")); // Assert Xunit.Assert.Throws(action); } } }