using System.Collections.Generic; using NUnit.Framework; using YachtDice.Dice; using YachtDice.Player; namespace YachtDice.Tests { public sealed class DiceCollectionTests { private DiceCollection _collection; [SetUp] public void SetUp() { _collection = new DiceCollection(); } [Test] public void Add_IncreasesCount() { var die = StandardDice.CreateStandardD6ForTest(); _collection.Add(die); Assert.AreEqual(1, _collection.OwnedDice.Count); } [Test] public void Add_DuplicateId_Ignored() { var die = StandardDice.CreateStandardD6ForTest(); _collection.Add(die); _collection.Add(die); Assert.AreEqual(1, _collection.OwnedDice.Count); } [Test] public void Add_Null_Ignored() { _collection.Add(null); Assert.AreEqual(0, _collection.OwnedDice.Count); } [Test] public void OwnsById_ReturnsTrueWhenOwned() { var die = StandardDice.CreateStandardD6ForTest(); _collection.Add(die); Assert.IsTrue(_collection.OwnsById("standard_d6")); } [Test] public void OwnsById_ReturnsFalseWhenNotOwned() { Assert.IsFalse(_collection.OwnsById("standard_d6")); } [Test] public void Remove_DecreasesCount() { var die = StandardDice.CreateStandardD6ForTest(); _collection.Add(die); _collection.Remove(die); Assert.AreEqual(0, _collection.OwnedDice.Count); } [Test] public void GetSaveData_ReturnsIds() { var die = StandardDice.CreateStandardD6ForTest(); _collection.Add(die); var ids = _collection.GetSaveData(); Assert.AreEqual(1, ids.Count); Assert.AreEqual("standard_d6", ids[0]); } [Test] public void LoadSaveData_RestoresDice() { var die = StandardDice.CreateStandardD6ForTest(); var catalog = DiceCatalog.CreateForTest(new List { die }); var ids = new List { "standard_d6" }; _collection.LoadSaveData(ids, catalog); Assert.AreEqual(1, _collection.OwnedDice.Count); Assert.AreEqual("standard_d6", _collection.OwnedDice[0].Id); } [Test] public void LoadSaveData_SkipsMissingIds() { var catalog = DiceCatalog.CreateForTest(new List()); var ids = new List { "nonexistent" }; _collection.LoadSaveData(ids, catalog); Assert.AreEqual(0, _collection.OwnedDice.Count); } [Test] public void Clear_RemovesAll() { var die = StandardDice.CreateStandardD6ForTest(); _collection.Add(die); _collection.Clear(); Assert.AreEqual(0, _collection.OwnedDice.Count); } [Test] public void Add_FiresOnChanged() { bool fired = false; _collection.OnChanged += () => fired = true; var die = StandardDice.CreateStandardD6ForTest(); _collection.Add(die); Assert.IsTrue(fired); } } }