Neues Testprojekt SlipItIn.Server.Tests erstellt und in die Solution eingebunden. Unit- und Integrationstests für AuthController, DbSeeder, GameHub und GameService implementiert. TestDbHelper für InMemory-DbContexts und Testdaten hinzugefügt. Tests prüfen Erfolgs- und Fehlerfälle inkl. Validierungen, Fehlerbehandlung und DB-Zustände.
57 lines
2.3 KiB
C#
57 lines
2.3 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using SlipItIn.Server.Data;
|
|
using SlipItIn.Shared.Models;
|
|
|
|
namespace SlipItIn.Server.Tests;
|
|
|
|
/// <summary>
|
|
/// Hilfsmethoden zum Erstellen isolierter InMemory-DbContexts und Testdaten.
|
|
/// </summary>
|
|
public static class TestDbHelper
|
|
{
|
|
public static IDbContextFactory<SlipItInDbContext> CreateFactory()
|
|
{
|
|
var options = new DbContextOptionsBuilder<SlipItInDbContext>()
|
|
.UseInMemoryDatabase(Guid.NewGuid().ToString())
|
|
.Options;
|
|
return new TestDbContextFactory(options);
|
|
}
|
|
|
|
public static User SeedUser(SlipItInDbContext db, string username = "user", string email = "user@test.local", bool isActive = true)
|
|
{
|
|
var user = new User { Username = username, Email = email, PasswordHash = "hash", IsActive = isActive };
|
|
db.Users.Add(user);
|
|
db.SaveChanges();
|
|
return user;
|
|
}
|
|
|
|
public static List<Phrase> SeedPhrases(SlipItInDbContext db, int count, bool isActive = true)
|
|
{
|
|
var creator = SeedUser(db, "creator-" + Guid.NewGuid().ToString("N")[..8], Guid.NewGuid().ToString("N")[..8] + "@t.local");
|
|
var phrases = Enumerable.Range(1, count)
|
|
.Select(i => new Phrase { Text = $"Phrase {i}", CreatorId = creator.Id, IsActive = isActive })
|
|
.ToList();
|
|
db.Phrases.AddRange(phrases);
|
|
db.SaveChanges();
|
|
return phrases;
|
|
}
|
|
|
|
/// <summary>Erstellt ein Spiel inkl. Host-Spieler über den echten GameService-Pfad (direkt in DB).</summary>
|
|
public static (Game game, Player hostPlayer) SeedGame(SlipItInDbContext db, User host, GameStatus status = GameStatus.Lobby)
|
|
{
|
|
var game = new Game { LobbyCode = Guid.NewGuid().ToString("N")[..6].ToUpper(), HostId = host.Id, Status = status };
|
|
var hostPlayer = new Player { UserId = host.Id, Game = game };
|
|
game.Players.Add(hostPlayer);
|
|
db.Games.Add(game);
|
|
db.SaveChanges();
|
|
return (game, hostPlayer);
|
|
}
|
|
|
|
private class TestDbContextFactory(DbContextOptions<SlipItInDbContext> options) : IDbContextFactory<SlipItInDbContext>
|
|
{
|
|
public SlipItInDbContext CreateDbContext() => new(options);
|
|
public Task<SlipItInDbContext> CreateDbContextAsync(CancellationToken cancellationToken = default)
|
|
=> Task.FromResult(new SlipItInDbContext(options));
|
|
}
|
|
}
|