feat(viewer): add ViewerClassData.IsRandomLeaderSkin column

Adds the bool column (defaults false) to the [Owned] ViewerClassData
entity and a two-test persistence suite that verifies round-trip and
default-value behaviour via SQLite/EnsureCreated.
This commit is contained in:
gamer147
2026-06-09 17:24:32 -04:00
parent b50d69d3a5
commit 2f4420bf15
2 changed files with 62 additions and 1 deletions

View File

@@ -0,0 +1,54 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using SVSim.Database;
using SVSim.UnitTests.Infrastructure;
namespace SVSim.UnitTests.Persistence;
public class ViewerClassDataPersistenceTests
{
[Test]
public async Task ViewerClassData_round_trips_is_random_leader_skin()
{
using var factory = new SVSimTestFactory();
long viewerId = await factory.SeedViewerAsync();
using (var seedScope = factory.Services.CreateScope())
{
var ctx = seedScope.ServiceProvider.GetRequiredService<SVSimDbContext>();
var viewer = await ctx.Viewers
.Include(v => v.Classes)
.FirstAsync(v => v.Id == viewerId);
Assert.That(viewer.Classes, Is.Not.Empty, "fresh viewer should have seeded ViewerClassData rows");
viewer.Classes[0].IsRandomLeaderSkin = true;
await ctx.SaveChangesAsync();
}
using var verifyScope = factory.Services.CreateScope();
var ctx2 = verifyScope.ServiceProvider.GetRequiredService<SVSimDbContext>();
var viewer2 = await ctx2.Viewers
.Include(v => v.Classes)
.AsNoTracking()
.FirstAsync(v => v.Id == viewerId);
Assert.That(viewer2.Classes[0].IsRandomLeaderSkin, Is.True, "flag should round-trip through SaveChanges");
// Other classes still default to false.
Assert.That(viewer2.Classes.Skip(1).All(c => !c.IsRandomLeaderSkin), Is.True);
}
[Test]
public async Task ViewerClassData_defaults_is_random_leader_skin_to_false()
{
using var factory = new SVSimTestFactory();
long viewerId = await factory.SeedViewerAsync();
using var scope = factory.Services.CreateScope();
var ctx = scope.ServiceProvider.GetRequiredService<SVSimDbContext>();
var viewer = await ctx.Viewers
.Include(v => v.Classes)
.AsNoTracking()
.FirstAsync(v => v.Id == viewerId);
Assert.That(viewer.Classes.All(c => !c.IsRandomLeaderSkin), Is.True);
}
}