Coverage priorities 1-5: test pure functions, extract interfaces, mock-based handler tests

- Priority 1: Test NewSendEmailTask + NewSendPushTask (5 tests)
- Priority 2: Test customHTTPErrorHandler — all 15+ branches (21 tests)
- Priority 3: Extract Enqueuer interface + payload builders in worker pkg (5 tests)
- Priority 4: Extract ClassifyFile/ComputeRelPath in migrate-encrypt (6 tests)
- Priority 5: Define Handler interfaces, refactor to accept them, mock-based tests (14 tests)
- Fix .gitignore: /worker instead of worker to stop ignoring internal/worker/

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Trey T
2026-04-01 20:30:09 -05:00
parent 00fd674b56
commit bec880886b
83 changed files with 19569 additions and 730 deletions

View File

@@ -17,10 +17,10 @@ func TestIntegration_ContractorSharingFlow(t *testing.T) {
// ========== Setup Users ==========
// Create user A
userAToken := app.registerAndLogin(t, "userA", "userA@test.com", "password123")
userAToken := app.registerAndLogin(t, "userA", "userA@test.com", "Password123")
// Create user B
userBToken := app.registerAndLogin(t, "userB", "userB@test.com", "password123")
userBToken := app.registerAndLogin(t, "userB", "userB@test.com", "Password123")
// ========== User A creates residence C ==========
residenceBody := map[string]interface{}{
@@ -180,8 +180,8 @@ func TestIntegration_ContractorAccessWithoutResidenceShare(t *testing.T) {
app := setupContractorTest(t)
// Create two users
userAToken := app.registerAndLogin(t, "userA", "userA@test.com", "password123")
userBToken := app.registerAndLogin(t, "userB", "userB@test.com", "password123")
userAToken := app.registerAndLogin(t, "userA", "userA@test.com", "Password123")
userBToken := app.registerAndLogin(t, "userB", "userB@test.com", "Password123")
// User A creates a residence
residenceBody := map[string]interface{}{
@@ -228,9 +228,9 @@ func TestIntegration_ContractorUpdateAndDeleteAccess(t *testing.T) {
app := setupContractorTest(t)
// Create users
userAToken := app.registerAndLogin(t, "userA", "userA@test.com", "password123")
userBToken := app.registerAndLogin(t, "userB", "userB@test.com", "password123")
userCToken := app.registerAndLogin(t, "userC", "userC@test.com", "password123")
userAToken := app.registerAndLogin(t, "userA", "userA@test.com", "Password123")
userBToken := app.registerAndLogin(t, "userB", "userB@test.com", "Password123")
userCToken := app.registerAndLogin(t, "userC", "userC@test.com", "Password123")
// User A creates residence and shares with User B (not User C)
residenceBody := map[string]interface{}{"name": "Shared Residence"}