Adds the ViewerAcquireHistoryEntry model (8 fields: Id, ViewerId, RewardType, RewardDetailId, RewardCount, AcquireType, Message, AcquireTime), registers DbSet<ViewerAcquireHistoryEntry> on SVSimDbContext, configures model (PK, FK cascade to Viewer, MaxLength 64 on Message, composite index on ViewerId/AcquireTime/Id), and adds a DbSet round-trip integration test. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
70 lines
2.7 KiB
C#
70 lines
2.7 KiB
C#
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<GrantSource>())
|
|
{
|
|
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<SVSim.Database.SVSimDbContext>();
|
|
|
|
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));
|
|
}
|
|
}
|