using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using SVSim.Database.Services.Inventory; namespace SVSim.UnitTests.Services.Inventory; public class InventoryHistoryTests { [Test] public void GrantSourceMessages_returns_known_messages_for_seeded_sources() { Assert.That(GrantSourceMessages.For(GrantSource.DailyBonus), Is.EqualTo("Daily Bonus")); Assert.That(GrantSourceMessages.For(GrantSource.PackOpen), Is.EqualTo("From buying card packs")); Assert.That(GrantSourceMessages.For(GrantSource.CardCosmeticCascade), Is.EqualTo("Card cosmetic")); Assert.That(GrantSourceMessages.For(GrantSource.Unknown), Is.EqualTo("Unknown")); } [Test] public void GrantSourceMessages_covers_every_enum_value() { foreach (GrantSource source in Enum.GetValues()) { var message = GrantSourceMessages.For(source); Assert.That(message, Is.Not.Null.And.Not.Empty, $"GrantSource.{source} has no message defined."); } } [Test] public void InventoryLoadConfig_Source_defaults_to_Unknown() { var cfg = new InventoryLoadConfig(); Assert.That(cfg.Source, Is.EqualTo(GrantSource.Unknown)); } [Test] public void InventoryLoadConfig_Source_is_assignable() { var cfg = new InventoryLoadConfig { Source = GrantSource.PackOpen }; Assert.That(cfg.Source, Is.EqualTo(GrantSource.PackOpen)); } [Test] public async Task ViewerAcquireHistory_DbSet_round_trips_a_row() { using var factory = new SVSim.UnitTests.Infrastructure.SVSimTestFactory(); long viewerId = await factory.SeedViewerAsync(); using var scope = factory.Services.CreateScope(); var ctx = scope.ServiceProvider.GetRequiredService(); ctx.ViewerAcquireHistory.Add(new SVSim.Database.Models.ViewerAcquireHistoryEntry { ViewerId = viewerId, RewardType = (int)SVSim.Database.Enums.UserGoodsType.Rupy, RewardDetailId = 0, RewardCount = 50, AcquireType = (int)GrantSource.DailyBonus, Message = "Daily Bonus", AcquireTime = new DateTime(2026, 6, 9, 12, 0, 0, DateTimeKind.Utc), }); await ctx.SaveChangesAsync(); var roundtrip = await ctx.ViewerAcquireHistory.AsNoTracking() .Where(h => h.ViewerId == viewerId).ToListAsync(); Assert.That(roundtrip, Has.Count.EqualTo(1)); Assert.That(roundtrip[0].RewardCount, Is.EqualTo(50)); Assert.That(roundtrip[0].AcquireType, Is.EqualTo((int)GrantSource.DailyBonus)); } }