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:
@@ -8,6 +8,13 @@ public class ViewerClassData
|
||||
public int Level { get; set; }
|
||||
public int Exp { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Per-class "use random leader skin from owned pool" preference. Defaults to false.
|
||||
/// No client-side setter exists today (only per-deck random-leader-skin endpoints exist);
|
||||
/// persisted now so when/if a class-level toggle is discovered, the write target exists.
|
||||
/// </summary>
|
||||
public bool IsRandomLeaderSkin { get; set; }
|
||||
|
||||
#region Navigation Properties
|
||||
|
||||
public ClassEntry Class { get; set; } = new ClassEntry();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user