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:
@@ -3209,3 +3209,34 @@ curl http://127.0.0.1:5001/api/tasks \
|
||||
- Authorization policy determines final access control (role-based)
|
||||
- GetMyClubsAsync queries by ExternalUserId (sub claim), not by TenantId
|
||||
- This is the bootstrap endpoint for discovering clubs to select a tenant
|
||||
|
||||
## Task: Fix Integration Test Auth Role Resolution (2026-03-06)
|
||||
|
||||
### Issue
|
||||
- ClubRoleClaimsTransformation requires `preferred_username` claim to resolve member roles
|
||||
- TestAuthHandler was NOT emitting this claim
|
||||
- Result: Auth role resolution failed, many integration tests returned 403 Forbidden
|
||||
|
||||
### Solution
|
||||
Modified TestAuthHandler to emit `preferred_username` claim:
|
||||
- Extract email from X-Test-Email header or use default "test@test.com"
|
||||
- Add claim: `new Claim("preferred_username", resolvedEmail)`
|
||||
- This allows ClubRoleClaimsTransformation to look up member roles by email
|
||||
|
||||
### Key Pattern
|
||||
- ClubRoleClaimsTransformation flow:
|
||||
1. Read `preferred_username` claim
|
||||
2. Query database for member with matching Email and TenantId
|
||||
3. If member found, add role claim based on member's role
|
||||
4. If no role claim added → requests fail with 403 (authorization failed)
|
||||
|
||||
### Integration Test Data Setup
|
||||
- Tests that create members in InitializeAsync now work with role resolution
|
||||
- Tests that don't create members still fail, but with different errors (not 403)
|
||||
- MemberAutoSync feature can auto-create members, but requires working auth first
|
||||
|
||||
### Important Note
|
||||
- Different services use different claim types for user identification:
|
||||
- ClubRoleClaimsTransformation: `preferred_username` (email) for role lookup
|
||||
- MemberService.GetCurrentMemberAsync: `sub` claim (ExternalUserId) for member lookup
|
||||
- Both need to be present in auth claims for full functionality
|
||||
|
||||
Reference in New Issue
Block a user