Forgot unversioned xd
This commit is contained in:
74
SVSim.UnitTests/Repositories/ViewerRepositoryTests.cs
Normal file
74
SVSim.UnitTests/Repositories/ViewerRepositoryTests.cs
Normal file
@@ -0,0 +1,74 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using SVSim.Database;
|
||||
using SVSim.Database.Enums;
|
||||
using SVSim.Database.Models;
|
||||
using SVSim.Database.Repositories.Viewer;
|
||||
using SVSim.UnitTests.Infrastructure;
|
||||
|
||||
namespace SVSim.UnitTests.Repositories;
|
||||
|
||||
/// <summary>
|
||||
/// Direct tests against <see cref="ViewerRepository"/>. The owned-type lookup in
|
||||
/// <see cref="ViewerRepository.GetViewerBySocialConnection"/> previously used
|
||||
/// <c>_dbContext.Set<SocialAccountConnection>()</c> which EF couldn't translate (owned
|
||||
/// types aren't queryable as a root). This test would have caught the regression.
|
||||
/// </summary>
|
||||
public class ViewerRepositoryTests
|
||||
{
|
||||
[Test]
|
||||
public async Task GetViewerBySocialConnection_returns_viewer_when_steam_id_matches()
|
||||
{
|
||||
using var factory = new SVSimTestFactory();
|
||||
const ulong steamId = 76_561_198_111_222_333UL;
|
||||
|
||||
long expectedViewerId = await factory.SeedViewerAsync(steamId: steamId, displayName: "Owner");
|
||||
|
||||
using var scope = factory.Services.CreateScope();
|
||||
var repo = scope.ServiceProvider.GetRequiredService<IViewerRepository>();
|
||||
|
||||
Viewer? found = await repo.GetViewerBySocialConnection(SocialAccountType.Steam, steamId);
|
||||
|
||||
Assert.That(found, Is.Not.Null, "Expected to find the seeded viewer by Steam social connection.");
|
||||
Assert.That(found!.Id, Is.EqualTo(expectedViewerId));
|
||||
Assert.That(found.DisplayName, Is.EqualTo("Owner"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetViewerBySocialConnection_returns_null_when_steam_id_does_not_match()
|
||||
{
|
||||
using var factory = new SVSimTestFactory();
|
||||
await factory.SeedViewerAsync(steamId: 76_561_198_111_222_333UL);
|
||||
|
||||
using var scope = factory.Services.CreateScope();
|
||||
var repo = scope.ServiceProvider.GetRequiredService<IViewerRepository>();
|
||||
|
||||
Viewer? found = await repo.GetViewerBySocialConnection(SocialAccountType.Steam, 76_561_198_999_999_999UL);
|
||||
|
||||
Assert.That(found, Is.Null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task RegisterViewer_grants_default_leader_skins_to_classes()
|
||||
{
|
||||
// Guards the just-fixed nav-graph NRE — RegisterViewer iterates ClassEntry.LeaderSkins
|
||||
// and needs the .Include to populate them. If the include is lost, this throws inside
|
||||
// SeedViewerAsync rather than reaching the assertion.
|
||||
using var factory = new SVSimTestFactory();
|
||||
long viewerId = await factory.SeedViewerAsync();
|
||||
|
||||
using var scope = factory.Services.CreateScope();
|
||||
var db = scope.ServiceProvider.GetRequiredService<SVSimDbContext>();
|
||||
|
||||
Viewer viewer = await db.Viewers
|
||||
.Include(v => v.Classes).ThenInclude(c => c.LeaderSkin)
|
||||
.Include(v => v.LeaderSkins)
|
||||
.FirstAsync(v => v.Id == viewerId);
|
||||
|
||||
Assert.That(viewer.Classes, Is.Not.Empty, "RegisterViewer should populate Classes from seed data.");
|
||||
Assert.That(viewer.Classes.Select(c => c.LeaderSkin).All(s => s is not null), Is.True,
|
||||
"Every class should have a LeaderSkin assigned (placeholder or real).");
|
||||
Assert.That(viewer.LeaderSkins, Is.Not.Empty,
|
||||
"Viewer should own at least one leader skin from class defaults.");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user