Code Clenup

This commit is contained in:
2026-04-05 02:05:24 +02:00
parent a290ff87dd
commit b135203318
37 changed files with 661 additions and 992 deletions

View File

@@ -1,11 +1,7 @@
namespace RpgRoller.Tests;
public sealed class AuthApiTests : ApiTestBase
public sealed class AuthApiTests(WebApplicationFactory<Program> factory) : ApiTestBase(factory)
{
public AuthApiTests(WebApplicationFactory<Program> factory) : base(factory)
{
}
[Fact]
public async Task RegisterLoginAndMeFlow_WorksWithDuplicateUsernameGuard()
{

View File

@@ -2,12 +2,8 @@ using System.Text;
namespace RpgRoller.Tests;
public sealed class CampaignApiTests : ApiTestBase
public sealed class CampaignApiTests(WebApplicationFactory<Program> factory) : ApiTestBase(factory)
{
public CampaignApiTests(WebApplicationFactory<Program> factory) : base(factory)
{
}
[Fact]
public async Task CampaignCharacterAndSkillFlow_EnforcesRulesetValidation()
{

View File

@@ -1,11 +1,7 @@
namespace RpgRoller.Tests;
public sealed class FrontendHostTests : ApiTestBase
public sealed class FrontendHostTests(WebApplicationFactory<Program> factory) : ApiTestBase(factory)
{
public FrontendHostTests(WebApplicationFactory<Program> factory) : base(factory)
{
}
[Fact]
public async Task RootPath_ServesBlazorFrontendShell()
{

View File

@@ -1,11 +1,7 @@
namespace RpgRoller.Tests;
public sealed class ResponseCompressionApiTests : ApiTestBase
public sealed class ResponseCompressionApiTests(WebApplicationFactory<Program> factory) : ApiTestBase(factory)
{
public ResponseCompressionApiTests(WebApplicationFactory<Program> factory) : base(factory)
{
}
[Fact]
public async Task AuthenticatedJsonResponses_EnableGzipCompression()
{

View File

@@ -1,11 +1,7 @@
namespace RpgRoller.Tests;
public sealed class RolemasterApiTests : ApiTestBase
public sealed class RolemasterApiTests(WebApplicationFactory<Program> factory) : ApiTestBase(factory)
{
public RolemasterApiTests(WebApplicationFactory<Program> factory) : base(factory)
{
}
[Fact]
public async Task RolemasterRollEndpoints_ExecuteGenericRolemasterExpressions()
{

View File

@@ -1,11 +1,7 @@
namespace RpgRoller.Tests;
public sealed class RollVisibilityApiTests : ApiTestBase
public sealed class RollVisibilityApiTests(WebApplicationFactory<Program> factory) : ApiTestBase(factory)
{
public RollVisibilityApiTests(WebApplicationFactory<Program> factory) : base(factory)
{
}
[Fact]
public async Task RollVisibilityAndAuthorization_AreEnforced()
{

View File

@@ -1,11 +1,7 @@
namespace RpgRoller.Tests;
public sealed class SystemApiTests : ApiTestBase
public sealed class SystemApiTests(WebApplicationFactory<Program> factory) : ApiTestBase(factory)
{
public SystemApiTests(WebApplicationFactory<Program> factory) : base(factory)
{
}
[Fact]
public async Task RulesetAndSseEndpoints_ReturnExpectedResponses()
{

View File

@@ -11,11 +11,11 @@ public sealed class BackendCoverageTests
var extensionsType = typeof(Program).Assembly.GetType("RpgRoller.Api.SessionTokenHttpContextExtensions");
Assert.NotNull(extensionsType);
var method = extensionsType!.GetMethod("GetRequiredSessionToken", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
var method = extensionsType.GetMethod("GetRequiredSessionToken", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
Assert.NotNull(method);
var context = new DefaultHttpContext();
var exception = Assert.Throws<TargetInvocationException>(() => method!.Invoke(null, [context]));
var exception = Assert.Throws<TargetInvocationException>(() => method.Invoke(null, [context]));
Assert.IsType<InvalidOperationException>(exception.InnerException);
}
}

View File

@@ -2,20 +2,15 @@ namespace RpgRoller.Tests;
public sealed class ServiceRollHelperTests
{
private sealed class FixedDiceRoller : IDiceRoller
private sealed class FixedDiceRoller(IEnumerable<int> values) : IDiceRoller
{
public FixedDiceRoller(IEnumerable<int> values)
{
m_Values = new(values);
}
public int Roll(int sides)
{
var next = m_Values.Count > 0 ? m_Values.Dequeue() : 1;
return Math.Clamp(next, 1, sides);
}
private readonly Queue<int> m_Values;
private readonly Queue<int> m_Values = new(values);
}
[Fact]

View File

@@ -88,7 +88,7 @@ public sealed class ServiceSkillGroupAndOwnershipTests
var gmTransfer = ServiceTestSupport.GetValue(service.UpdateCharacter(gmSession, character.Id, "Transferred", campaign.Id, "receiver"));
var receiver = service.GetUserBySession(receiverSession);
Assert.NotNull(receiver);
Assert.Equal(receiver!.Id, gmTransfer.OwnerUserId);
Assert.Equal(receiver.Id, gmTransfer.OwnerUserId);
var previousOwnerMe = ServiceTestSupport.GetValue(service.GetMe(ownerSession));
Assert.Null(previousOwnerMe.ActiveCharacterId);
@@ -133,7 +133,7 @@ public sealed class ServiceSkillGroupAndOwnershipTests
var adminTwo = service.GetUserBySession(adminTwoSession);
Assert.NotNull(adminTwo);
_ = ServiceTestSupport.GetValue(service.UpdateUserRoles(gmSession, adminTwo!.Id, ["admin"]));
_ = ServiceTestSupport.GetValue(service.UpdateUserRoles(gmSession, adminTwo.Id, ["admin"]));
var adminUnlink = ServiceTestSupport.GetValue(service.UpdateCharacter(adminTwoSession, character.Id, "Admin Unlink", null));
Assert.Null(adminUnlink.CampaignId);

View File

@@ -8,32 +8,22 @@ using RpgRoller.Hosting;
namespace RpgRoller.Tests;
public abstract class ApiTestBase : IClassFixture<WebApplicationFactory<Program>>
public abstract class ApiTestBase(WebApplicationFactory<Program> factory) : IClassFixture<WebApplicationFactory<Program>>
{
private sealed class FixedDiceRoller : IDiceRoller
private sealed class FixedDiceRoller(IEnumerable<int> values) : IDiceRoller
{
public FixedDiceRoller(IEnumerable<int> values)
{
m_Values = new(values);
}
public int Roll(int sides)
{
var next = m_Values.Count > 0 ? m_Values.Dequeue() : 1;
return Math.Clamp(next, 1, sides);
}
private readonly Queue<int> m_Values;
}
protected ApiTestBase(WebApplicationFactory<Program> factory)
{
m_BaseFactory = factory;
private readonly Queue<int> m_Values = new(values);
}
protected WebApplicationFactory<Program> CreateFactory(params int[] rollValues)
{
return m_BaseFactory.WithWebHostBuilder(builder =>
return factory.WithWebHostBuilder(builder =>
{
builder.ConfigureLogging(logging =>
{
@@ -95,6 +85,4 @@ public abstract class ApiTestBase : IClassFixture<WebApplicationFactory<Program>
Assert.NotNull(result);
return result;
}
private readonly WebApplicationFactory<Program> m_BaseFactory;
}

View File

@@ -46,29 +46,19 @@ internal static class ServiceTestSupport
public int HashCalls { get; private set; }
}
private sealed class FixedDiceRoller : IDiceRoller
private sealed class FixedDiceRoller(IEnumerable<int> values) : IDiceRoller
{
public FixedDiceRoller(IEnumerable<int> values)
{
m_Values = new(values);
}
public int Roll(int sides)
{
var next = m_Values.Count > 0 ? m_Values.Dequeue() : 1;
return Math.Clamp(next, 1, sides);
}
private readonly Queue<int> m_Values;
private readonly Queue<int> m_Values = new(values);
}
internal sealed class SqliteDbContextFactory : IDbContextFactory<RpgRollerDbContext>, IDisposable
internal sealed class SqliteDbContextFactory(string dbPath) : IDbContextFactory<RpgRollerDbContext>, IDisposable
{
public SqliteDbContextFactory(string dbPath)
{
m_Options = new DbContextOptionsBuilder<RpgRollerDbContext>().UseSqlite($"Data Source={dbPath}").Options;
}
public RpgRollerDbContext CreateDbContext()
{
return new(m_Options);
@@ -78,7 +68,7 @@ internal static class ServiceTestSupport
{
}
private readonly DbContextOptions<RpgRollerDbContext> m_Options;
private readonly DbContextOptions<RpgRollerDbContext> m_Options = new DbContextOptionsBuilder<RpgRollerDbContext>().UseSqlite($"Data Source={dbPath}").Options;
}
internal static ServiceHarness CreateHarness(params int[] rollValues)