Files
Daybreak/Daybreak.Tests/Models/ItemBaseTests.cs
T
2025-12-12 15:39:58 +01:00

71 lines
1.9 KiB
C#

using System.Text;
using Daybreak.Shared.Models.Guildwars;
using FluentAssertions;
namespace Daybreak.Tests.Models;
[TestClass]
public sealed class ItemBaseTests
{
[TestMethod]
public void TryParse_UnknownId_Fails()
{
var found = ItemBase.TryParse(int.MaxValue, modifiers: default, out var item);
found.Should().BeFalse();
item.Should().BeNull();
}
[TestMethod]
public void Parse_UnknownId_ThrowsInvalidOperationException()
{
var action = () => ItemBase.Parse(int.MaxValue, modifiers: default);
action.Should().Throw<InvalidOperationException>();
}
[TestMethod]
public void TryParse_KnownId_Succeeds()
{
var found = ItemBase.TryParse(Inscription.WeaponInscription.Id, Inscription.WeaponInscription.Modifiers, out var inscription);
found.Should().BeTrue();
inscription.Should().Be(Inscription.WeaponInscription);
}
[TestMethod]
public void Parse_KnownId_ReturnsExpected()
{
var inscription = ItemBase.Parse(Inscription.WeaponInscription.Id, Inscription.WeaponInscription.Modifiers);
inscription.Should().Be(Inscription.WeaponInscription);
}
[TestMethod]
public void ItemList_Should_ContainOnlyUniqueItems()
{
var itemMap = new Dictionary<ItemBase, int>();
foreach (var item in ItemBase.AllItems)
{
if (!itemMap.TryGetValue(item, out _))
{
itemMap[item] = 0;
}
itemMap[item] += 1;
}
var errorMessage = new StringBuilder("Duplicated item entries: ");
foreach (var tuple in itemMap)
{
if (tuple.Value > 1)
{
errorMessage.Append(tuple.Key.Name);
errorMessage.Append(", ");
}
}
if (itemMap.Any(kvp => kvp.Value > 1))
{
Assert.Fail(errorMessage.ToString());
}
}
}