80 lines
3.5 KiB
C#
80 lines
3.5 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using SVSim.Database;
|
|
using SVSim.Database.Enums;
|
|
using SVSim.UnitTests.Infrastructure;
|
|
|
|
namespace SVSim.UnitTests.Importers;
|
|
|
|
public class PackSeedingPipelineTests
|
|
{
|
|
[Test]
|
|
public async Task SeedGlobals_loads_pack_catalog_from_fixture()
|
|
{
|
|
using var factory = new SVSimTestFactory();
|
|
await factory.SeedGlobalsAsync(); // uses test-fixture seed overlay copied into the test output dir (see SVSim.UnitTests.csproj)
|
|
|
|
using var scope = factory.Services.CreateScope();
|
|
var db = scope.ServiceProvider.GetRequiredService<SVSimDbContext>();
|
|
var packs = await db.Packs.OrderBy(p => p.Id).ToListAsync();
|
|
|
|
Assert.That(packs.Count, Is.GreaterThanOrEqualTo(3), "fixture has at least 3 packs");
|
|
var p10001 = packs.Single(p => p.Id == 10001);
|
|
Assert.That(p10001.PackCategory, Is.EqualTo(PackCategory.None));
|
|
Assert.That(p10001.BasePackId, Is.EqualTo(10001));
|
|
Assert.That(p10001.SleeveId, Is.EqualTo(3000011));
|
|
Assert.That(p10001.GachaPointConfig, Is.Not.Null);
|
|
Assert.That(p10001.GachaPointConfig!.ExchangeablePoint, Is.EqualTo(400));
|
|
}
|
|
|
|
[Test]
|
|
public async Task SeedGlobals_persists_child_gachas_with_correct_types_and_costs()
|
|
{
|
|
using var factory = new SVSimTestFactory();
|
|
await factory.SeedGlobalsAsync();
|
|
|
|
using var scope = factory.Services.CreateScope();
|
|
var db = scope.ServiceProvider.GetRequiredService<SVSimDbContext>();
|
|
var pack = await db.Packs.AsNoTracking()
|
|
.FirstAsync(p => p.Id == 10001);
|
|
var children = pack.ChildGachas.OrderBy(c => c.GachaId).ToList();
|
|
|
|
Assert.That(children.Count, Is.EqualTo(3));
|
|
Assert.That(children.Select(c => c.TypeDetail),
|
|
Is.EqualTo(new[] { CardPackType.CrystalMulti, CardPackType.Daily, CardPackType.RupyMulti }));
|
|
Assert.That(children.Select(c => c.Cost), Is.EqualTo(new[] { 100, 50, 100 }));
|
|
Assert.That(children.Single(c => c.TypeDetail == CardPackType.Daily).IsDailySingle, Is.True);
|
|
}
|
|
|
|
[Test]
|
|
public async Task SeedGlobals_is_idempotent_on_rerun()
|
|
{
|
|
using var factory = new SVSimTestFactory();
|
|
await factory.SeedGlobalsAsync();
|
|
await factory.SeedGlobalsAsync(); // second run must not duplicate or stack child gachas
|
|
|
|
using var scope = factory.Services.CreateScope();
|
|
var db = scope.ServiceProvider.GetRequiredService<SVSimDbContext>();
|
|
var pack = await db.Packs.AsNoTracking().FirstAsync(p => p.Id == 10001);
|
|
Assert.That(pack.ChildGachas.Count, Is.EqualTo(3),
|
|
"child_gacha_info is owned — rerun must replace, not stack.");
|
|
}
|
|
|
|
[Test]
|
|
public async Task SeedGlobals_preserves_daily_free_gacha_count_on_free_child()
|
|
{
|
|
using var factory = new SVSimTestFactory();
|
|
await factory.SeedGlobalsAsync();
|
|
|
|
using var scope = factory.Services.CreateScope();
|
|
var db = scope.ServiceProvider.GetRequiredService<SVSimDbContext>();
|
|
var pack = await db.Packs.AsNoTracking().FirstAsync(p => p.Id == 80032);
|
|
var freeChild = pack.ChildGachas.Single(c => c.TypeDetail == CardPackType.FreePacks);
|
|
|
|
Assert.That(freeChild.DailyFreeGachaCount, Is.EqualTo(1));
|
|
Assert.That(freeChild.PurchaseLimitCount, Is.EqualTo(1));
|
|
Assert.That(freeChild.FreeGachaCampaignId, Is.EqualTo(49));
|
|
Assert.That(freeChild.CampaignName, Is.EqualTo("New Season Release Bonus"));
|
|
}
|
|
}
|