[Add] Tests summary & fix scene

This commit is contained in:
2026-03-05 10:21:05 +07:00
parent 05c2619de4
commit 9580d76a53
10 changed files with 466 additions and 0 deletions
@@ -15,6 +15,9 @@ namespace YachtDice.Tests
_collection = new DiceCollection();
}
/// <summary>
/// Добавление кости увеличивает размер коллекции.
/// </summary>
[Test]
public void Add_IncreasesCount()
{
@@ -25,6 +28,9 @@ namespace YachtDice.Tests
Assert.AreEqual(1, _collection.OwnedDice.Count);
}
/// <summary>
/// Повторное добавление кости с тем же ID игнорируется.
/// </summary>
[Test]
public void Add_DuplicateId_Ignored()
{
@@ -36,6 +42,9 @@ namespace YachtDice.Tests
Assert.AreEqual(1, _collection.OwnedDice.Count);
}
/// <summary>
/// Значение null не добавляется в коллекцию.
/// </summary>
[Test]
public void Add_Null_Ignored()
{
@@ -44,6 +53,9 @@ namespace YachtDice.Tests
Assert.AreEqual(0, _collection.OwnedDice.Count);
}
/// <summary>
/// Проверка владения по ID возвращает true для добавленной кости.
/// </summary>
[Test]
public void OwnsById_ReturnsTrueWhenOwned()
{
@@ -54,12 +66,18 @@ namespace YachtDice.Tests
Assert.IsTrue(_collection.OwnsById("standard_d6"));
}
/// <summary>
/// Проверка владения по ID возвращает false, если кость отсутствует.
/// </summary>
[Test]
public void OwnsById_ReturnsFalseWhenNotOwned()
{
Assert.IsFalse(_collection.OwnsById("standard_d6"));
}
/// <summary>
/// Удаление кости уменьшает размер коллекции.
/// </summary>
[Test]
public void Remove_DecreasesCount()
{
@@ -71,6 +89,9 @@ namespace YachtDice.Tests
Assert.AreEqual(0, _collection.OwnedDice.Count);
}
/// <summary>
/// Данные сохранения возвращают корректный список ID костей.
/// </summary>
[Test]
public void GetSaveData_ReturnsIds()
{
@@ -83,6 +104,9 @@ namespace YachtDice.Tests
Assert.AreEqual("standard_d6", ids[0]);
}
/// <summary>
/// Загрузка по сохраненным ID восстанавливает кости из каталога.
/// </summary>
[Test]
public void LoadSaveData_RestoresDice()
{
@@ -96,6 +120,9 @@ namespace YachtDice.Tests
Assert.AreEqual("standard_d6", _collection.OwnedDice[0].Id);
}
/// <summary>
/// При загрузке отсутствующие в каталоге ID пропускаются.
/// </summary>
[Test]
public void LoadSaveData_SkipsMissingIds()
{
@@ -107,6 +134,9 @@ namespace YachtDice.Tests
Assert.AreEqual(0, _collection.OwnedDice.Count);
}
/// <summary>
/// Очистка коллекции удаляет все кости.
/// </summary>
[Test]
public void Clear_RemovesAll()
{
@@ -118,6 +148,9 @@ namespace YachtDice.Tests
Assert.AreEqual(0, _collection.OwnedDice.Count);
}
/// <summary>
/// При добавлении кости вызывается событие изменения коллекции.
/// </summary>
[Test]
public void Add_FiresOnChanged()
{
@@ -24,6 +24,9 @@ namespace YachtDice.Tests
hasLimitedUses: hasLimitedUses, maxUses: maxUses);
}
/// <summary>
/// Добавление модификатора увеличивает количество элементов в инвентаре.
/// </summary>
[Test]
public void AddModifier_IncreasesCount()
{
@@ -32,6 +35,9 @@ namespace YachtDice.Tests
Assert.AreEqual(1, _inventory.OwnedModifiers.Count);
}
/// <summary>
/// Активация модификатора проходит успешно, если есть свободные слоты.
/// </summary>
[Test]
public void TryActivate_SucceedsWithinSlotLimit()
{
@@ -45,6 +51,9 @@ namespace YachtDice.Tests
Assert.AreEqual(1, _inventory.ActiveCount);
}
/// <summary>
/// Активация не выполняется, когда лимит активных слотов исчерпан.
/// </summary>
[Test]
public void TryActivate_FailsWhenSlotsFull()
{
@@ -63,6 +72,9 @@ namespace YachtDice.Tests
Assert.AreEqual(3, _inventory.ActiveCount);
}
/// <summary>
/// Деактивация модификатора освобождает активный слот.
/// </summary>
[Test]
public void Deactivate_FreesSlot()
{
@@ -76,6 +88,9 @@ namespace YachtDice.Tests
Assert.AreEqual(0, _inventory.ActiveCount);
}
/// <summary>
/// Удаление модификатора снимает его активность и убирает из инвентаря.
/// </summary>
[Test]
public void RemoveModifier_DeactivatesAndRemoves()
{
@@ -89,6 +104,9 @@ namespace YachtDice.Tests
Assert.AreEqual(0, _inventory.ActiveCount);
}
/// <summary>
/// Расход использования уменьшает число оставшихся зарядов активного модификатора.
/// </summary>
[Test]
public void ConsumeUseOnActive_DecrementsUses()
{
@@ -101,6 +119,9 @@ namespace YachtDice.Tests
Assert.AreEqual(2, mod.RemainingUses);
}
/// <summary>
/// Модификатор удаляется из инвентаря после расхода последнего заряда.
/// </summary>
[Test]
public void ConsumeUseOnActive_RemovesExpired()
{
@@ -113,6 +134,9 @@ namespace YachtDice.Tests
Assert.AreEqual(0, _inventory.OwnedModifiers.Count);
}
/// <summary>
/// Постоянные модификаторы не расходуют заряды при использовании.
/// </summary>
[Test]
public void ConsumeUseOnActive_IgnoresPermanent()
{
@@ -126,6 +150,9 @@ namespace YachtDice.Tests
Assert.IsTrue(mod.IsActive);
}
/// <summary>
/// Список активных определений содержит только активированные модификаторы.
/// </summary>
[Test]
public void GetActiveModifierDefinitions_ReturnsOnlyActive()
{
@@ -138,6 +165,9 @@ namespace YachtDice.Tests
Assert.AreEqual(1, active.Count);
}
/// <summary>
/// Изменение максимума активных слотов позволяет расширить лимит.
/// </summary>
[Test]
public void SetMaxActiveSlots_AllowsExpansion()
{
@@ -146,6 +176,9 @@ namespace YachtDice.Tests
Assert.AreEqual(10, _inventory.MaxActiveSlots);
}
/// <summary>
/// Событие изменения активных модификаторов срабатывает при активации.
/// </summary>
[Test]
public void OnActiveModifiersChanged_FiredOnActivate()
{
@@ -98,6 +98,9 @@ namespace YachtDice.Tests
_createdAssets.Clear();
}
/// <summary>
/// Предпросмотр очков не расходует заряды ограниченного модификатора.
/// </summary>
[Test]
public void PreviewScore_DoesNotConsumeCharges()
{
@@ -109,6 +112,9 @@ namespace YachtDice.Tests
Assert.IsTrue(_instance.IsActive);
}
/// <summary>
/// Подтверждение категории расходует ровно один заряд модификатора.
/// </summary>
[Test]
public void ScoreCategory_ConsumesExactlyOneCharge()
{
@@ -118,6 +124,9 @@ namespace YachtDice.Tests
Assert.AreEqual(1, _registry.All.Count);
}
/// <summary>
/// Модификатор удаляется из реестра после полного исчерпания зарядов.
/// </summary>
[Test]
public void ScoreCategory_RemovesModifier_WhenChargesExhausted()
{
@@ -42,6 +42,9 @@ namespace YachtDice.Tests
// ── AddPerDiceEffect ─────────────────────────────────────────
/// <summary>
/// Эффект добавляет бонус за каждую кость с целевым значением.
/// </summary>
[Test]
public void AddPerDiceEffect_CountsMatchingDice()
{
@@ -54,6 +57,9 @@ namespace YachtDice.Tests
Assert.AreEqual(30, ctx.FlatBonus); // 10 * 3 matching dice
}
/// <summary>
/// При целевом значении 0 бонус начисляется за все кости.
/// </summary>
[Test]
public void AddPerDiceEffect_ZeroTarget_CountsAllDice()
{
@@ -66,6 +72,9 @@ namespace YachtDice.Tests
Assert.AreEqual(10, ctx.FlatBonus); // 2 * 5 dice
}
/// <summary>
/// При отсутствии совпадений по значению бонус остается нулевым.
/// </summary>
[Test]
public void AddPerDiceEffect_NoMatches_ZeroBonus()
{
@@ -78,6 +87,9 @@ namespace YachtDice.Tests
Assert.AreEqual(0, ctx.FlatBonus);
}
/// <summary>
/// Бонус AddPerDice масштабируется количеством стаков модификатора.
/// </summary>
[Test]
public void AddPerDiceEffect_ScalesWithStacks()
{
@@ -93,6 +105,9 @@ namespace YachtDice.Tests
// ── AddFlatScoreEffect ──────────────────────────────────────
/// <summary>
/// Эффект AddFlatScore добавляет фиксированный бонус к очкам.
/// </summary>
[Test]
public void AddFlatScoreEffect_AddsFlat()
{
@@ -105,6 +120,9 @@ namespace YachtDice.Tests
Assert.AreEqual(15, ctx.FlatBonus);
}
/// <summary>
/// Фиксированный бонус AddFlatScore масштабируется стаками.
/// </summary>
[Test]
public void AddFlatScoreEffect_ScalesWithStacks()
{
@@ -120,6 +138,9 @@ namespace YachtDice.Tests
// ── MultiplyPerDiceEffect ────────────────────────────────────
/// <summary>
/// MultiplyPerDice увеличивает множитель за каждое совпадение по кости.
/// </summary>
[Test]
public void MultiplyPerDiceEffect_MultipliesPerMatch()
{
@@ -132,6 +153,9 @@ namespace YachtDice.Tests
Assert.AreEqual(8f, ctx.Multiplier, 0.001f); // 1 * 2 * 2 * 2 = 8
}
/// <summary>
/// Без совпадений MultiplyPerDice не изменяет множитель.
/// </summary>
[Test]
public void MultiplyPerDiceEffect_NoMatches_MultiplierUnchanged()
{
@@ -146,6 +170,9 @@ namespace YachtDice.Tests
// ── MultiplyScoreEffect ─────────────────────────────────────
/// <summary>
/// MultiplyScore применяет заданный множитель один раз.
/// </summary>
[Test]
public void MultiplyScoreEffect_MultipliesOnce()
{
@@ -158,6 +185,9 @@ namespace YachtDice.Tests
Assert.AreEqual(1.5f, ctx.Multiplier, 0.001f);
}
/// <summary>
/// MultiplyScore масштабирует множитель в зависимости от стаков.
/// </summary>
[Test]
public void MultiplyScoreEffect_ScalesWithStacks()
{
@@ -174,6 +204,9 @@ namespace YachtDice.Tests
// ── PostMultiplyEffect ──────────────────────────────────────
/// <summary>
/// PostMultiply изменяет пост-множитель контекста.
/// </summary>
[Test]
public void PostMultiplyEffect_MultipliesPostMultiplier()
{
@@ -188,6 +221,9 @@ namespace YachtDice.Tests
// ── AddCurrencyEffect ───────────────────────────────────────
/// <summary>
/// AddCurrency увеличивает дельту валюты в контексте.
/// </summary>
[Test]
public void AddCurrencyEffect_AddsToCurrencyDelta()
{
@@ -200,6 +236,9 @@ namespace YachtDice.Tests
Assert.AreEqual(25, ctx.CurrencyDelta);
}
/// <summary>
/// Эффект добавления валюты масштабируется стаками.
/// </summary>
[Test]
public void AddCurrencyEffect_ScalesWithStacks()
{
@@ -215,6 +254,9 @@ namespace YachtDice.Tests
// ── ConsumeChargeEffect ─────────────────────────────────────
/// <summary>
/// ConsumeCharge уменьшает число оставшихся использований ограниченного модификатора.
/// </summary>
[Test]
public void ConsumeChargeEffect_DecrementsRemainingUses()
{
@@ -229,6 +271,9 @@ namespace YachtDice.Tests
Assert.AreEqual(2, inst.RemainingUses);
}
/// <summary>
/// Постоянный модификатор игнорирует расход зарядов.
/// </summary>
[Test]
public void ConsumeChargeEffect_IgnoresPermanent()
{
@@ -243,6 +288,9 @@ namespace YachtDice.Tests
// ── FinalScore Integration ──────────────────────────────────
/// <summary>
/// Финальный счет корректно учитывает базу, бонус и множители.
/// </summary>
[Test]
public void FinalScore_CombinesBaseAndFlatAndMultiplier()
{
@@ -80,6 +80,9 @@ namespace YachtDice.Tests
// ── Phase Ordering ──────────────────────────────────────────
/// <summary>
/// Аддитивные эффекты применяются раньше мультипликативных.
/// </summary>
[Test]
public void Execute_AdditiveBeforeMultiplicative()
{
@@ -101,6 +104,9 @@ namespace YachtDice.Tests
Assert.AreEqual(60, result.FinalScore);
}
/// <summary>
/// Пост-мультипликативная фаза выполняется после мультипликативной.
/// </summary>
[Test]
public void Execute_PostMultiplicativeAfterMultiplicative()
{
@@ -124,6 +130,9 @@ namespace YachtDice.Tests
// ── Condition Filtering ─────────────────────────────────────
/// <summary>
/// Эффект пропускается, если условие модификатора не выполнено.
/// </summary>
[Test]
public void Execute_ConditionFails_SkipsEffect()
{
@@ -144,6 +153,9 @@ namespace YachtDice.Tests
Assert.AreEqual(5, result.FinalScore);
}
/// <summary>
/// Эффект применяется, когда условие модификатора выполняется.
/// </summary>
[Test]
public void Execute_ConditionPasses_AppliesEffect()
{
@@ -165,6 +177,9 @@ namespace YachtDice.Tests
// ── Trigger Filtering ───────────────────────────────────────
/// <summary>
/// Модификатор пропускается при несовпадении триггера события.
/// </summary>
[Test]
public void Execute_WrongTrigger_SkipsModifier()
{
@@ -183,6 +198,9 @@ namespace YachtDice.Tests
// ── Multiple Modifiers ──────────────────────────────────────
/// <summary>
/// Несколько модификаторов применяются в правильном порядке фаз и приоритетов.
/// </summary>
[Test]
public void Execute_MultipleModifiers_CorrectOrder()
{
@@ -215,6 +233,9 @@ namespace YachtDice.Tests
// ── Empty / Null Cases ──────────────────────────────────────
/// <summary>
/// При отсутствии активных модификаторов результат не изменяется.
/// </summary>
[Test]
public void Execute_NoActiveModifiers_NoChange()
{
@@ -226,6 +247,9 @@ namespace YachtDice.Tests
Assert.AreEqual(1f, result.Multiplier);
}
/// <summary>
/// Неактивный модификатор не влияет на вычисление результата.
/// </summary>
[Test]
public void Execute_InactiveModifier_Skipped()
{
@@ -244,6 +268,9 @@ namespace YachtDice.Tests
// ── Side Effects ────────────────────────────────────────────
/// <summary>
/// Побочные эффекты выполняются в фазе SideEffect и сохраняют корректный результат.
/// </summary>
[Test]
public void Execute_SideEffectsInSideEffectPhase()
{
@@ -265,6 +292,9 @@ namespace YachtDice.Tests
// ── Tracing ─────────────────────────────────────────────────
/// <summary>
/// При включенном трейсинге pipeline наполняет отладочный лог.
/// </summary>
[Test]
public void Execute_TracingEnabled_PopulatesDebugLog()
{
@@ -285,6 +315,9 @@ namespace YachtDice.Tests
// ── DiceValue Condition ──────────────────────────────────────
/// <summary>
/// Условие по значению костей срабатывает только при достижении нужного количества совпадений.
/// </summary>
[Test]
public void Execute_DiceValueCondition_OnlyTriggersOnMatch()
{
@@ -312,6 +345,9 @@ namespace YachtDice.Tests
// ── MinScore Condition ──────────────────────────────────────
/// <summary>
/// Условие минимального базового счета работает ниже и на пороговом значении.
/// </summary>
[Test]
public void Execute_MinScoreCondition_ThresholdWorks()
{
@@ -339,6 +375,9 @@ namespace YachtDice.Tests
// ── ToScoreResult ───────────────────────────────────────────
/// <summary>
/// Преобразование контекста в ScoreResult корректно переносит все поля.
/// </summary>
[Test]
public void ToScoreResult_ConvertsCorrectly()
{
@@ -20,6 +20,9 @@ namespace YachtDice.Tests
SaveSystem.Delete();
}
/// <summary>
/// Сохранение и последующая загрузка сохраняют валюту и модификаторы без потерь.
/// </summary>
[Test]
public void SaveAndLoad_RoundTrip_PreservesData()
{
@@ -45,6 +48,9 @@ namespace YachtDice.Tests
Assert.IsFalse(loaded.ownedModifiers[1].isActive);
}
/// <summary>
/// При отсутствии ключа сохранения возвращаются значения по умолчанию.
/// </summary>
[Test]
public void Load_MissingKey_ReturnsDefault()
{
@@ -55,12 +61,18 @@ namespace YachtDice.Tests
Assert.AreEqual(0, loaded.ownedModifiers.Count);
}
/// <summary>
/// Метод HasSave возвращает false, когда сохранение отсутствует.
/// </summary>
[Test]
public void HasSave_ReturnsFalseWhenEmpty()
{
Assert.IsFalse(SaveSystem.HasSave());
}
/// <summary>
/// После сохранения метод HasSave возвращает true.
/// </summary>
[Test]
public void HasSave_ReturnsTrueAfterSave()
{
@@ -69,6 +81,9 @@ namespace YachtDice.Tests
Assert.IsTrue(SaveSystem.HasSave());
}
/// <summary>
/// Удаление сохранения убирает данные из хранилища.
/// </summary>
[Test]
public void Delete_RemovesSaveData()
{
@@ -78,6 +93,9 @@ namespace YachtDice.Tests
Assert.IsFalse(SaveSystem.HasSave());
}
/// <summary>
/// Поврежденный JSON при загрузке безопасно заменяется данными по умолчанию.
/// </summary>
[Test]
public void Load_CorruptJson_ReturnsDefault()
{
@@ -90,6 +108,9 @@ namespace YachtDice.Tests
Assert.AreEqual(0, loaded.currency);
}
/// <summary>
/// Сохранение и загрузка корректно сохраняют список ID костей.
/// </summary>
[Test]
public void SaveAndLoad_RoundTrip_PreservesDiceIds()
{
@@ -66,6 +66,9 @@ namespace YachtDice.Tests
_createdAssets.Clear();
}
/// <summary>
/// Валютный модификатор увеличивает баланс и вызывает событие изменения баланса.
/// </summary>
[Test]
public void ScoreCategory_WithCurrencyModifier_AddsCurrencyAndFiresBalanceChanged()
{
@@ -60,6 +60,9 @@ namespace YachtDice.Tests
return dice;
}
/// <summary>
/// Без модификаторов результат равен базовому расчету категории.
/// </summary>
[Test]
public void ScoreCategory_WithNoModifiers_CalculatesBaseOnly()
{
@@ -73,6 +76,9 @@ namespace YachtDice.Tests
Assert.AreEqual(50, result.FinalScore);
}
/// <summary>
/// Подтверждение категории вызывает событие с корректной категорией и результатом.
/// </summary>
[Test]
public void ScoreCategory_FiresOnCategoryConfirmed()
{
@@ -93,6 +99,9 @@ namespace YachtDice.Tests
Assert.AreEqual(5, firedResult.baseScore);
}
/// <summary>
/// Повторное подтверждение уже использованной категории вызывает исключение.
/// </summary>
[Test]
public void ScoreCategory_PreventsDuplicateCategory()
{
@@ -104,6 +113,9 @@ namespace YachtDice.Tests
system.ScoreCategory(dice, _chanceCategory));
}
/// <summary>
/// Предпросмотр без модификаторов возвращает только базовый счет.
/// </summary>
[Test]
public void PreviewScore_WithNoModifiers_CalculatesBaseOnly()
{
@@ -116,6 +128,9 @@ namespace YachtDice.Tests
Assert.AreEqual(15, result.FinalScore);
}
/// <summary>
/// Общий счет суммирует результаты всех подтвержденных категорий.
/// </summary>
[Test]
public void TotalScore_SumsAllScoredCategories()
{
@@ -126,6 +141,9 @@ namespace YachtDice.Tests
Assert.AreEqual(15, system.TotalScore); // 5 + 10
}
/// <summary>
/// Сброс карточки очищает счет и отметки использованных категорий.
/// </summary>
[Test]
public void ResetScorecard_ClearsAll()
{
@@ -140,6 +158,9 @@ namespace YachtDice.Tests
// ── Category SO Unit Tests ──────────────────────────────────
/// <summary>
/// Категория суммы значения корректно складывает подходящие кости.
/// </summary>
[Test]
public void SumOfValueCategory_SumsCorrectly()
{
@@ -151,6 +172,9 @@ namespace YachtDice.Tests
Object.DestroyImmediate(cat);
}
/// <summary>
/// N-of-a-kind возвращает сумму костей при совпадении и ноль при его отсутствии.
/// </summary>
[Test]
public void NOfAKindCategory_ThreeOfAKind_ReturnsSumOrZero()
{
@@ -162,6 +186,9 @@ namespace YachtDice.Tests
Object.DestroyImmediate(cat);
}
/// <summary>
/// Категория яхты возвращает фиксированный счет только при пяти одинаковых костях.
/// </summary>
[Test]
public void NOfAKindCategory_Yacht_ReturnsFixedScore()
{
@@ -169,6 +196,9 @@ namespace YachtDice.Tests
Assert.AreEqual(0, _yachtCategory.Calculate(CreateDice(6, 6, 6, 6, 1)));
}
/// <summary>
/// Категория фулл-хауса корректно определяет валидную комбинацию.
/// </summary>
[Test]
public void FullHouseCategory_CalculatesCorrectly()
{
@@ -180,6 +210,9 @@ namespace YachtDice.Tests
Object.DestroyImmediate(cat);
}
/// <summary>
/// Малый стрит распознается и оценивается корректно.
/// </summary>
[Test]
public void StraightCategory_SmallStraight()
{
@@ -191,6 +224,9 @@ namespace YachtDice.Tests
Object.DestroyImmediate(cat);
}
/// <summary>
/// Большой стрит распознается на обеих валидных последовательностях.
/// </summary>
[Test]
public void StraightCategory_LargeStraight()
{
@@ -203,6 +239,9 @@ namespace YachtDice.Tests
Object.DestroyImmediate(cat);
}
/// <summary>
/// Категория шанса суммирует значения всех костей.
/// </summary>
[Test]
public void SumAllCategory_SumsEverything()
{
@@ -47,6 +47,9 @@ namespace YachtDice.Tests
shopPrice: shopPrice, sellPrice: sellPrice);
}
/// <summary>
/// Покупка проходит успешно при достаточном балансе.
/// </summary>
[Test]
public void TryPurchase_SucceedsWithSufficientCurrency()
{
@@ -59,6 +62,9 @@ namespace YachtDice.Tests
Assert.AreEqual(1, _inventory.OwnedModifiers.Count);
}
/// <summary>
/// Покупка отклоняется при нехватке валюты.
/// </summary>
[Test]
public void TryPurchase_FailsWhenBroke()
{
@@ -72,6 +78,9 @@ namespace YachtDice.Tests
Assert.AreEqual(0, _inventory.OwnedModifiers.Count);
}
/// <summary>
/// Постоянный модификатор нельзя приобрести повторно.
/// </summary>
[Test]
public void TryPurchase_PermanentCannotBeBoughtTwice()
{
@@ -85,6 +94,9 @@ namespace YachtDice.Tests
Assert.AreEqual(1, _inventory.OwnedModifiers.Count);
}
/// <summary>
/// Ограниченный модификатор можно купить несколько раз.
/// </summary>
[Test]
public void TryPurchase_LimitedCanBeReBought()
{
@@ -98,6 +110,9 @@ namespace YachtDice.Tests
Assert.AreEqual(2, _inventory.OwnedModifiers.Count);
}
/// <summary>
/// Успешная покупка вызывает событие OnItemPurchased.
/// </summary>
[Test]
public void TryPurchase_FiresPurchaseEvent()
{
@@ -112,6 +127,9 @@ namespace YachtDice.Tests
Assert.AreEqual("test", purchased.Id);
}
/// <summary>
/// Товар имеет состояние Available, когда его можно позволить себе купить.
/// </summary>
[Test]
public void GetItemState_Available_WhenCanAfford()
{
@@ -120,6 +138,9 @@ namespace YachtDice.Tests
Assert.AreEqual(ShopItemState.Available, _shop.GetItemState(mod));
}
/// <summary>
/// Товар имеет состояние TooExpensive при недостатке валюты.
/// </summary>
[Test]
public void GetItemState_TooExpensive_WhenCannotAfford()
{
@@ -129,6 +150,9 @@ namespace YachtDice.Tests
Assert.AreEqual(ShopItemState.TooExpensive, _shop.GetItemState(mod));
}
/// <summary>
/// После покупки постоянного модификатора его состояние становится Owned.
/// </summary>
[Test]
public void GetItemState_Owned_WhenPermanentPurchased()
{
@@ -139,6 +163,9 @@ namespace YachtDice.Tests
Assert.AreEqual(ShopItemState.Owned, _shop.GetItemState(mod));
}
/// <summary>
/// Покупка кости добавляет ее в коллекцию игрока.
/// </summary>
[Test]
public void TryPurchase_DiceItem_AddsToDiceCollection()
{
@@ -151,6 +178,9 @@ namespace YachtDice.Tests
Assert.AreEqual(1, _diceCollection.OwnedDice.Count);
}
/// <summary>
/// Одну и ту же кость нельзя купить повторно.
/// </summary>
[Test]
public void TryPurchase_DiceItem_CannotBeBoughtTwice()
{
@@ -164,6 +194,9 @@ namespace YachtDice.Tests
Assert.AreEqual(1, _diceCollection.OwnedDice.Count);
}
/// <summary>
/// После покупки кость отображается в магазине как Owned.
/// </summary>
[Test]
public void GetItemState_Dice_Owned_AfterPurchase()
{