This commit is contained in:
gamer147
2026-05-25 12:03:47 -04:00
parent d067f8a64a
commit 558e8288eb
44 changed files with 6512 additions and 3 deletions

View File

@@ -0,0 +1,62 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using SVSim.Database;
using SVSim.Database.Repositories.Globals;
using SVSim.UnitTests.Infrastructure;
namespace SVSim.UnitTests.Repositories;
public class PuzzleCatalogRepositoryTests
{
[Test]
public async Task GetAllGroupsWithPuzzles_returns_25_groups_each_with_puzzles()
{
using var factory = new SVSimTestFactory();
await factory.SeedGlobalsAsync();
var repo = factory.Services.GetRequiredService<IPuzzleCatalogRepository>();
var groups = await repo.GetAllGroupsWithPuzzles();
Assert.That(groups, Has.Count.EqualTo(25));
Assert.That(groups.All(g => g.Puzzles.Count > 0), Is.True,
"every group must have its Puzzles navigation populated");
var g301 = groups.Single(g => g.Id == 301);
Assert.That(g301.Puzzles.Select(p => p.Id).OrderBy(x => x), Is.EqualTo(new[] { 37, 38, 39 }));
}
[Test]
public async Task GetGroupWithPuzzles_returns_one_group_or_null()
{
using var factory = new SVSimTestFactory();
await factory.SeedGlobalsAsync();
var repo = factory.Services.GetRequiredService<IPuzzleCatalogRepository>();
var g = await repo.GetGroupWithPuzzles(301);
Assert.That(g, Is.Not.Null);
Assert.That(g!.Puzzles, Has.Count.EqualTo(3));
var missing = await repo.GetGroupWithPuzzles(99999);
Assert.That(missing, Is.Null);
}
[Test]
public async Task GetAllMissionsOrdered_returns_19_missions_in_correct_order()
{
using var factory = new SVSimTestFactory();
await factory.SeedGlobalsAsync();
var repo = factory.Services.GetRequiredService<IPuzzleCatalogRepository>();
var missions = await repo.GetAllMissionsOrdered();
Assert.That(missions, Has.Count.EqualTo(19));
// Captured order: by OrderId asc, then CampaignCommenceTime desc.
var pairs = missions.Select(m => (m.OrderId, m.CampaignCommenceTime)).ToList();
for (int i = 1; i < pairs.Count; i++)
{
var prev = pairs[i - 1]; var cur = pairs[i];
Assert.That(prev.OrderId, Is.LessThanOrEqualTo(cur.OrderId));
if (prev.OrderId == cur.OrderId)
Assert.That(prev.CampaignCommenceTime, Is.GreaterThanOrEqualTo(cur.CampaignCommenceTime));
}
}
}

View File

@@ -0,0 +1,50 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using SVSim.Database;
using SVSim.Database.Repositories.Viewer;
using SVSim.UnitTests.Infrastructure;
namespace SVSim.UnitTests.Repositories;
public class PuzzleClearRepositoryTests
{
[Test]
public async Task UpsertClear_inserts_then_updates_idempotently()
{
using var factory = new SVSimTestFactory();
long viewerId = await factory.SeedViewerAsync();
var repo = factory.Services.GetRequiredService<IPuzzleClearRepository>();
var clearsBefore = await repo.GetClearedPuzzleIds(viewerId);
Assert.That(clearsBefore, Is.Empty);
await repo.UpsertClearAsync(viewerId, puzzleId: 37, retryCount: 2);
await repo.UpsertClearAsync(viewerId, puzzleId: 37, retryCount: 0); // better clear; BestRetryCount should drop to 0
await repo.UpsertClearAsync(viewerId, puzzleId: 38, retryCount: 1);
var ids = await repo.GetClearedPuzzleIds(viewerId);
Assert.That(ids, Is.EquivalentTo(new[] { 37, 38 }));
var ctx = factory.Services.GetRequiredService<SVSimDbContext>();
var row37 = await ctx.ViewerPuzzleClears.FirstAsync(c => c.ViewerId == viewerId && c.PuzzleId == 37);
Assert.That(row37.BestRetryCount, Is.EqualTo(0), "BestRetryCount is min across all wins");
}
[Test]
public async Task GetClearedPuzzleIdsByGroup_groups_by_FK()
{
using var factory = new SVSimTestFactory();
await factory.SeedGlobalsAsync(); // need Puzzles table populated for GroupId FKs
long viewerId = await factory.SeedViewerAsync();
var repo = factory.Services.GetRequiredService<IPuzzleClearRepository>();
await repo.UpsertClearAsync(viewerId, 37, 0); // group 301
await repo.UpsertClearAsync(viewerId, 38, 0); // group 301
await repo.UpsertClearAsync(viewerId, 64, 0); // group 306
var byGroup = await repo.GetClearedPuzzleIdsByGroup(viewerId);
Assert.That(byGroup[301], Is.EquivalentTo(new[] { 37, 38 }));
Assert.That(byGroup[306], Is.EquivalentTo(new[] { 64 }));
Assert.That(byGroup.Keys, Does.Not.Contain(999));
}
}