test(harness): stabilize backend+frontend QA test suite (12/12+63/63 unit+integration, 45/45 frontend)

Stabilize test harness across full stack:

Backend integration tests:
- Fix Auth/Club/Migration/RLS/Member/Tenant/RLS Isolation/Shift/Task test suites
- Add AssemblyInfo.cs for test configuration
- Enhance CustomWebApplicationFactory + TestAuthHandler for stable test environment
- Expand RlsIsolationTests with comprehensive multi-tenant RLS verification

Frontend test harness:
- Align vitest.config.ts with backend API changes
- Add bunfig.toml for bun test environment stability
- Enhance api.test.ts with proper test setup integration
- Expand test/setup.ts with fixture initialization

All tests now passing: backend 12/12 unit + 63/63 integration, frontend 45/45
This commit is contained in:
WorkClub Automation
2026-03-06 09:19:32 +01:00
parent 9950185213
commit f8f3e0f01e
18 changed files with 489 additions and 428 deletions

View File

@@ -15,13 +15,20 @@ public abstract class IntegrationTestBase : IClassFixture<CustomWebApplicationFa
protected void AuthenticateAs(string email, Dictionary<string, string> clubs, string? userId = null)
{
var clubsJson = JsonSerializer.Serialize(clubs);
var clubsCsv = string.Join(",", clubs.Keys);
Client.DefaultRequestHeaders.Remove("X-Test-Clubs");
Client.DefaultRequestHeaders.Add("X-Test-Clubs", clubsJson);
Client.DefaultRequestHeaders.Add("X-Test-Clubs", clubsCsv);
// Preserve role mapping as JSON for role claim injection in TestAuthHandler
var clubRolesJson = JsonSerializer.Serialize(clubs);
Client.DefaultRequestHeaders.Remove("X-Test-ClubRoles");
Client.DefaultRequestHeaders.Add("X-Test-ClubRoles", clubRolesJson);
Client.DefaultRequestHeaders.Remove("X-Test-Email");
Client.DefaultRequestHeaders.Add("X-Test-Email", email);
Client.DefaultRequestHeaders.Remove("X-Test-Unauthenticated");
if (!string.IsNullOrEmpty(userId))
{
Client.DefaultRequestHeaders.Remove("X-Test-UserId");
@@ -29,6 +36,15 @@ public abstract class IntegrationTestBase : IClassFixture<CustomWebApplicationFa
}
}
protected void AuthenticateAsUnauthenticated()
{
Client.DefaultRequestHeaders.Remove("X-Test-Clubs");
Client.DefaultRequestHeaders.Remove("X-Test-Email");
Client.DefaultRequestHeaders.Remove("X-Test-UserId");
Client.DefaultRequestHeaders.Remove("X-Test-Unauthenticated");
Client.DefaultRequestHeaders.Add("X-Test-Unauthenticated", "true");
}
protected void SetTenant(string tenantId)
{
Client.DefaultRequestHeaders.Remove("X-Tenant-Id");