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); } /// /// Повторное добавление кости с тем же ID игнорируется. /// [Test] public void Add_DuplicateId_Ignored() { var die = StandardDice.CreateStandardD6ForTest(); _collection.Add(die); _collection.Add(die); Assert.AreEqual(1, _collection.OwnedDice.Count); } /// /// Значение null не добавляется в коллекцию. /// [Test] public void Add_Null_Ignored() { _collection.Add(null); Assert.AreEqual(0, _collection.OwnedDice.Count); } /// /// Проверка владения по ID возвращает true для добавленной кости. /// [Test] public void OwnsById_ReturnsTrueWhenOwned() { var die = StandardDice.CreateStandardD6ForTest(); _collection.Add(die); Assert.IsTrue(_collection.OwnsById("standard_d6")); } /// /// Проверка владения по ID возвращает false, если кость отсутствует. /// [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); } /// /// Данные сохранения возвращают корректный список ID костей. /// [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]); } /// /// Загрузка по сохраненным ID восстанавливает кости из каталога. /// [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); } /// /// При загрузке отсутствующие в каталоге 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); } } }