Migrate TaskService + ResidenceService to ctx-aware repos
Backend CI / Test (push) Has been cancelled
Backend CI / Contract Tests (push) Has been cancelled
Backend CI / Build (push) Has been cancelled
Backend CI / Lint (push) Has been cancelled
Backend CI / Secret Scanning (push) Has been cancelled

Every public method on TaskService and ResidenceService now takes
ctx context.Context as the first arg and routes its repo calls through
.WithContext(ctx). With otelgorm registered, this means every API
endpoint backed by these two services produces a flame graph in Jaeger
where the SQL spans nest under the parent HTTP request span — instead
of appearing as orphaned queries.

Endpoints now fully traced (HTTP → service → SQL):
- GET    /api/tasks/                       (already shipped)
- GET    /api/tasks/by-residence/:id/      (already shipped)
- GET    /api/tasks/:id/
- POST   /api/tasks/
- POST   /api/tasks/bulk/
- PUT    /api/tasks/:id/
- DELETE /api/tasks/:id/
- POST   /api/tasks/:id/in-progress/
- POST   /api/tasks/:id/cancel/
- POST   /api/tasks/:id/uncancel/
- POST   /api/tasks/:id/archive/
- POST   /api/tasks/:id/unarchive/
- POST   /api/tasks/:id/complete/
- POST   /api/tasks/:id/quick-complete/
- GET    /api/tasks/completions/* (CRUD)
- GET    /api/static_data/ (categories, priorities, frequencies)
- GET    /api/residences/
- GET    /api/residences/my/
- GET    /api/residences/summary/
- GET    /api/residences/:id/
- POST   /api/residences/
- PUT    /api/residences/:id/
- DELETE /api/residences/:id/
- Share-code + member management endpoints
- GET    /api/residences/:id/report/

Mechanical work: ~50 method signatures, ~80 handler call sites,
~25 test call sites updated. Internal sendTaskCompletedNotification
helper also takes ctx so background notification SQL nests correctly.

The remaining services (ContractorService, DocumentService,
AuthService, NotificationService, SubscriptionService) follow the same
pattern; they continue to emit untraced SQL until migrated.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Trey t
2026-04-25 16:04:01 -05:00
parent 3f5bf21e09
commit 65a9aae4e5
9 changed files with 382 additions and 378 deletions
+53 -52
View File
@@ -1,6 +1,7 @@
package services
import (
"context"
"fmt"
"net/http"
"testing"
@@ -44,7 +45,7 @@ func TestResidenceService_CreateResidence(t *testing.T) {
PostalCode: "78701",
}
resp, err := service.CreateResidence(req, user.ID)
resp, err := service.CreateResidence(context.Background(), req, user.ID)
require.NoError(t, err)
assert.NotNil(t, resp)
assert.Equal(t, "Test House", resp.Data.Name)
@@ -82,7 +83,7 @@ func TestResidenceService_CreateResidence_WithOptionalFields(t *testing.T) {
IsPrimary: &isPrimary,
}
resp, err := service.CreateResidence(req, user.ID)
resp, err := service.CreateResidence(context.Background(), req, user.ID)
require.NoError(t, err)
assert.Equal(t, "Canada", resp.Data.Country)
assert.Equal(t, 3, *resp.Data.Bedrooms)
@@ -102,7 +103,7 @@ func TestResidenceService_GetResidence(t *testing.T) {
user := testutil.CreateTestUser(t, db, "owner", "owner@test.com", "password")
residence := testutil.CreateTestResidence(t, db, user.ID, "Test House")
resp, err := service.GetResidence(residence.ID, user.ID, time.Now())
resp, err := service.GetResidence(context.Background(), residence.ID, user.ID, time.Now())
require.NoError(t, err)
assert.Equal(t, residence.ID, resp.ID)
assert.Equal(t, "Test House", resp.Name)
@@ -119,7 +120,7 @@ func TestResidenceService_GetResidence_AccessDenied(t *testing.T) {
otherUser := testutil.CreateTestUser(t, db, "other", "other@test.com", "password")
residence := testutil.CreateTestResidence(t, db, owner.ID, "Test House")
_, err := service.GetResidence(residence.ID, otherUser.ID, time.Now())
_, err := service.GetResidence(context.Background(), residence.ID, otherUser.ID, time.Now())
testutil.AssertAppError(t, err, http.StatusForbidden, "error.residence_access_denied")
}
@@ -132,7 +133,7 @@ func TestResidenceService_GetResidence_NotFound(t *testing.T) {
user := testutil.CreateTestUser(t, db, "user", "user@test.com", "password")
_, err := service.GetResidence(9999, user.ID, time.Now())
_, err := service.GetResidence(context.Background(), 9999, user.ID, time.Now())
assert.Error(t, err)
}
@@ -147,7 +148,7 @@ func TestResidenceService_ListResidences(t *testing.T) {
testutil.CreateTestResidence(t, db, user.ID, "House 1")
testutil.CreateTestResidence(t, db, user.ID, "House 2")
resp, err := service.ListResidences(user.ID)
resp, err := service.ListResidences(context.Background(), user.ID)
require.NoError(t, err)
assert.Len(t, resp, 2)
}
@@ -169,7 +170,7 @@ func TestResidenceService_UpdateResidence(t *testing.T) {
City: &newCity,
}
resp, err := service.UpdateResidence(residence.ID, user.ID, req)
resp, err := service.UpdateResidence(context.Background(), residence.ID, user.ID, req)
require.NoError(t, err)
assert.Equal(t, "Updated Name", resp.Data.Name)
assert.Equal(t, "Dallas", resp.Data.City)
@@ -192,7 +193,7 @@ func TestResidenceService_UpdateResidence_NotOwner(t *testing.T) {
newName := "Updated"
req := &requests.UpdateResidenceRequest{Name: &newName}
_, err := service.UpdateResidence(residence.ID, sharedUser.ID, req)
_, err := service.UpdateResidence(context.Background(), residence.ID, sharedUser.ID, req)
testutil.AssertAppError(t, err, http.StatusForbidden, "error.not_residence_owner")
}
@@ -206,11 +207,11 @@ func TestResidenceService_DeleteResidence(t *testing.T) {
user := testutil.CreateTestUser(t, db, "owner", "owner@test.com", "password")
residence := testutil.CreateTestResidence(t, db, user.ID, "Test House")
_, err := service.DeleteResidence(residence.ID, user.ID)
_, err := service.DeleteResidence(context.Background(), residence.ID, user.ID)
require.NoError(t, err)
// Should not be found
_, err = service.GetResidence(residence.ID, user.ID, time.Now())
_, err = service.GetResidence(context.Background(), residence.ID, user.ID, time.Now())
assert.Error(t, err)
}
@@ -226,7 +227,7 @@ func TestResidenceService_DeleteResidence_NotOwner(t *testing.T) {
residence := testutil.CreateTestResidence(t, db, owner.ID, "Test House")
residenceRepo.AddUser(residence.ID, sharedUser.ID)
_, err := service.DeleteResidence(residence.ID, sharedUser.ID)
_, err := service.DeleteResidence(context.Background(), residence.ID, sharedUser.ID)
testutil.AssertAppError(t, err, http.StatusForbidden, "error.not_residence_owner")
}
@@ -240,7 +241,7 @@ func TestResidenceService_GenerateShareCode(t *testing.T) {
user := testutil.CreateTestUser(t, db, "owner", "owner@test.com", "password")
residence := testutil.CreateTestResidence(t, db, user.ID, "Test House")
resp, err := service.GenerateShareCode(residence.ID, user.ID, 24)
resp, err := service.GenerateShareCode(context.Background(), residence.ID, user.ID, 24)
require.NoError(t, err)
assert.NotEmpty(t, resp.ShareCode.Code)
assert.Len(t, resp.ShareCode.Code, 6)
@@ -258,11 +259,11 @@ func TestResidenceService_JoinWithCode(t *testing.T) {
residence := testutil.CreateTestResidence(t, db, owner.ID, "Test House")
// Generate share code
shareResp, err := service.GenerateShareCode(residence.ID, owner.ID, 24)
shareResp, err := service.GenerateShareCode(context.Background(), residence.ID, owner.ID, 24)
require.NoError(t, err)
// Join with code
joinResp, err := service.JoinWithCode(shareResp.ShareCode.Code, newUser.ID)
joinResp, err := service.JoinWithCode(context.Background(), shareResp.ShareCode.Code, newUser.ID)
require.NoError(t, err)
assert.Equal(t, residence.ID, joinResp.Residence.ID)
@@ -281,10 +282,10 @@ func TestResidenceService_JoinWithCode_AlreadyMember(t *testing.T) {
owner := testutil.CreateTestUser(t, db, "owner", "owner@test.com", "password")
residence := testutil.CreateTestResidence(t, db, owner.ID, "Test House")
shareResp, _ := service.GenerateShareCode(residence.ID, owner.ID, 24)
shareResp, _ := service.GenerateShareCode(context.Background(), residence.ID, owner.ID, 24)
// Owner tries to join their own residence
_, err := service.JoinWithCode(shareResp.ShareCode.Code, owner.ID)
_, err := service.JoinWithCode(context.Background(), shareResp.ShareCode.Code, owner.ID)
testutil.AssertAppError(t, err, http.StatusConflict, "error.user_already_member")
}
@@ -300,7 +301,7 @@ func TestResidenceService_GetResidenceUsers(t *testing.T) {
residence := testutil.CreateTestResidence(t, db, owner.ID, "Test House")
residenceRepo.AddUser(residence.ID, user1.ID)
users, err := service.GetResidenceUsers(residence.ID, owner.ID)
users, err := service.GetResidenceUsers(context.Background(), residence.ID, owner.ID)
require.NoError(t, err)
assert.Len(t, users, 2) // owner + shared user
}
@@ -317,7 +318,7 @@ func TestResidenceService_RemoveUser(t *testing.T) {
residence := testutil.CreateTestResidence(t, db, owner.ID, "Test House")
residenceRepo.AddUser(residence.ID, sharedUser.ID)
err := service.RemoveUser(residence.ID, sharedUser.ID, owner.ID)
err := service.RemoveUser(context.Background(), residence.ID, sharedUser.ID, owner.ID)
require.NoError(t, err)
hasAccess, _ := residenceRepo.HasAccess(residence.ID, sharedUser.ID)
@@ -334,7 +335,7 @@ func TestResidenceService_RemoveUser_CannotRemoveOwner(t *testing.T) {
owner := testutil.CreateTestUser(t, db, "owner", "owner@test.com", "password")
residence := testutil.CreateTestResidence(t, db, owner.ID, "Test House")
err := service.RemoveUser(residence.ID, owner.ID, owner.ID)
err := service.RemoveUser(context.Background(), residence.ID, owner.ID, owner.ID)
testutil.AssertAppError(t, err, http.StatusBadRequest, "error.cannot_remove_owner")
}
@@ -389,7 +390,7 @@ func TestCreateResidence_FreeTier_EnforcesLimit(t *testing.T) {
StateProvince: "TX",
PostalCode: "78701",
}
resp, err := service.CreateResidence(req, owner.ID)
resp, err := service.CreateResidence(context.Background(), req, owner.ID)
require.NoError(t, err)
assert.Equal(t, "First House", resp.Data.Name)
@@ -401,7 +402,7 @@ func TestCreateResidence_FreeTier_EnforcesLimit(t *testing.T) {
StateProvince: "TX",
PostalCode: "78702",
}
_, err = service.CreateResidence(req2, owner.ID)
_, err = service.CreateResidence(context.Background(), req2, owner.ID)
testutil.AssertAppError(t, err, http.StatusForbidden, "error.properties_limit_exceeded")
}
@@ -446,7 +447,7 @@ func TestCreateResidence_ProTier_AllowsMore(t *testing.T) {
StateProvince: "TX",
PostalCode: "78701",
}
resp, err := service.CreateResidence(req, owner.ID)
resp, err := service.CreateResidence(context.Background(), req, owner.ID)
require.NoError(t, err, "Pro user should be able to create residence %d", i)
assert.Equal(t, fmt.Sprintf("House %d", i), resp.Data.Name)
}
@@ -470,7 +471,7 @@ func TestResidenceService_GetMyResidences(t *testing.T) {
testutil.CreateTestResidence(t, db, user.ID, "House 1")
testutil.CreateTestResidence(t, db, user.ID, "House 2")
resp, err := service.GetMyResidences(user.ID, time.Now())
resp, err := service.GetMyResidences(context.Background(), user.ID, time.Now())
require.NoError(t, err)
assert.Len(t, resp.Residences, 2)
}
@@ -484,7 +485,7 @@ func TestResidenceService_GetMyResidences_NoResidences(t *testing.T) {
user := testutil.CreateTestUser(t, db, "loner", "loner@test.com", "Password123")
resp, err := service.GetMyResidences(user.ID, time.Now())
resp, err := service.GetMyResidences(context.Background(), user.ID, time.Now())
require.NoError(t, err)
assert.Empty(t, resp.Residences)
}
@@ -502,7 +503,7 @@ func TestResidenceService_GetSummary(t *testing.T) {
testutil.CreateTestResidence(t, db, user.ID, "House 1")
testutil.CreateTestResidence(t, db, user.ID, "House 2")
resp, err := service.GetSummary(user.ID, time.Now())
resp, err := service.GetSummary(context.Background(), user.ID, time.Now())
require.NoError(t, err)
assert.Equal(t, 2, resp.TotalResidences)
}
@@ -516,7 +517,7 @@ func TestResidenceService_GetSummary_NoResidences(t *testing.T) {
user := testutil.CreateTestUser(t, db, "loner", "loner@test.com", "Password123")
resp, err := service.GetSummary(user.ID, time.Now())
resp, err := service.GetSummary(context.Background(), user.ID, time.Now())
require.NoError(t, err)
assert.Equal(t, 0, resp.TotalResidences)
}
@@ -533,7 +534,7 @@ func TestResidenceService_GetShareCode_NoActiveCode(t *testing.T) {
user := testutil.CreateTestUser(t, db, "owner", "owner@test.com", "Password123")
residence := testutil.CreateTestResidence(t, db, user.ID, "Test House")
resp, err := service.GetShareCode(residence.ID, user.ID)
resp, err := service.GetShareCode(context.Background(), residence.ID, user.ID)
require.NoError(t, err)
assert.Nil(t, resp) // No active code
}
@@ -549,7 +550,7 @@ func TestResidenceService_GetShareCode_AccessDenied(t *testing.T) {
other := testutil.CreateTestUser(t, db, "other", "other@test.com", "Password123")
residence := testutil.CreateTestResidence(t, db, owner.ID, "Test House")
_, err := service.GetShareCode(residence.ID, other.ID)
_, err := service.GetShareCode(context.Background(), residence.ID, other.ID)
testutil.AssertAppError(t, err, http.StatusForbidden, "error.residence_access_denied")
}
@@ -567,7 +568,7 @@ func TestResidenceService_GenerateShareCode_NotOwner(t *testing.T) {
residence := testutil.CreateTestResidence(t, db, owner.ID, "Test House")
residenceRepo.AddUser(residence.ID, shared.ID)
_, err := service.GenerateShareCode(residence.ID, shared.ID, 24)
_, err := service.GenerateShareCode(context.Background(), residence.ID, shared.ID, 24)
testutil.AssertAppError(t, err, http.StatusForbidden, "error.not_residence_owner")
}
@@ -582,7 +583,7 @@ func TestResidenceService_GenerateShareCode_DefaultExpiry(t *testing.T) {
residence := testutil.CreateTestResidence(t, db, user.ID, "Test House")
// Pass 0 hours — should default to 24
resp, err := service.GenerateShareCode(residence.ID, user.ID, 0)
resp, err := service.GenerateShareCode(context.Background(), residence.ID, user.ID, 0)
require.NoError(t, err)
assert.NotEmpty(t, resp.ShareCode.Code)
}
@@ -599,7 +600,7 @@ func TestResidenceService_GenerateSharePackage(t *testing.T) {
user := testutil.CreateTestUser(t, db, "owner", "owner@test.com", "Password123")
residence := testutil.CreateTestResidence(t, db, user.ID, "Test House")
resp, err := service.GenerateSharePackage(residence.ID, user.ID, 48)
resp, err := service.GenerateSharePackage(context.Background(), residence.ID, user.ID, 48)
require.NoError(t, err)
assert.NotEmpty(t, resp.ShareCode)
assert.Equal(t, "Test House", resp.ResidenceName)
@@ -618,7 +619,7 @@ func TestResidenceService_GenerateSharePackage_NotOwner(t *testing.T) {
residence := testutil.CreateTestResidence(t, db, owner.ID, "Test House")
residenceRepo.AddUser(residence.ID, shared.ID)
_, err := service.GenerateSharePackage(residence.ID, shared.ID, 24)
_, err := service.GenerateSharePackage(context.Background(), residence.ID, shared.ID, 24)
testutil.AssertAppError(t, err, http.StatusForbidden, "error.not_residence_owner")
}
@@ -633,7 +634,7 @@ func TestResidenceService_JoinWithCode_InvalidCode(t *testing.T) {
user := testutil.CreateTestUser(t, db, "user", "user@test.com", "Password123")
_, err := service.JoinWithCode("BADCODE", user.ID)
_, err := service.JoinWithCode(context.Background(), "BADCODE", user.ID)
testutil.AssertAppError(t, err, http.StatusNotFound, "error.share_code_invalid")
}
@@ -653,7 +654,7 @@ func TestResidenceService_RemoveUser_NotOwner(t *testing.T) {
residenceRepo.AddUser(residence.ID, shared.ID)
// shared user tries to remove other — should fail because shared is not owner
err := service.RemoveUser(residence.ID, other.ID, shared.ID)
err := service.RemoveUser(context.Background(), residence.ID, other.ID, shared.ID)
testutil.AssertAppError(t, err, http.StatusForbidden, "error.not_residence_owner")
}
@@ -670,7 +671,7 @@ func TestResidenceService_GetResidenceUsers_AccessDenied(t *testing.T) {
other := testutil.CreateTestUser(t, db, "other", "other@test.com", "Password123")
residence := testutil.CreateTestResidence(t, db, owner.ID, "Test House")
_, err := service.GetResidenceUsers(residence.ID, other.ID)
_, err := service.GetResidenceUsers(context.Background(), residence.ID, other.ID)
testutil.AssertAppError(t, err, http.StatusForbidden, "error.residence_access_denied")
}
@@ -684,7 +685,7 @@ func TestResidenceService_GetResidenceTypes(t *testing.T) {
cfg := &config.Config{}
service := NewResidenceService(residenceRepo, userRepo, cfg)
resp, err := service.GetResidenceTypes()
resp, err := service.GetResidenceTypes(context.Background())
require.NoError(t, err)
// SeedLookupData creates 4 residence types
assert.Len(t, resp, 4)
@@ -711,7 +712,7 @@ func TestResidenceService_UpdateResidence_HomeProfileFields(t *testing.T) {
HeatingType: &heatingType,
}
resp, err := service.UpdateResidence(residence.ID, user.ID, req)
resp, err := service.UpdateResidence(context.Background(), residence.ID, user.ID, req)
require.NoError(t, err)
assert.True(t, resp.Data.HasPool)
assert.True(t, resp.Data.HasGarage)
@@ -740,7 +741,7 @@ func TestResidenceService_CreateResidence_HomeProfileFields(t *testing.T) {
HasSeptic: &hasSeptic,
}
resp, err := service.CreateResidence(req, user.ID)
resp, err := service.CreateResidence(context.Background(), req, user.ID)
require.NoError(t, err)
assert.True(t, resp.Data.HasPool)
assert.True(t, resp.Data.HasSeptic)
@@ -760,7 +761,7 @@ func TestResidenceService_GetResidence_SharedUser(t *testing.T) {
residence := testutil.CreateTestResidence(t, db, owner.ID, "Test House")
residenceRepo.AddUser(residence.ID, shared.ID)
resp, err := service.GetResidence(residence.ID, shared.ID, time.Now())
resp, err := service.GetResidence(context.Background(), residence.ID, shared.ID, time.Now())
require.NoError(t, err)
assert.Equal(t, "Test House", resp.Name)
}
@@ -780,7 +781,7 @@ func TestResidenceService_GetMyResidences_WithTaskRepo(t *testing.T) {
testutil.CreateTestResidence(t, db, user.ID, "House 1")
testutil.CreateTestResidence(t, db, user.ID, "House 2")
resp, err := service.GetMyResidences(user.ID, time.Now())
resp, err := service.GetMyResidences(context.Background(), user.ID, time.Now())
require.NoError(t, err)
assert.Len(t, resp.Residences, 2)
}
@@ -799,7 +800,7 @@ func TestResidenceService_GetResidence_WithTaskRepo(t *testing.T) {
user := testutil.CreateTestUser(t, db, "owner", "owner@test.com", "Password123")
residence := testutil.CreateTestResidence(t, db, user.ID, "Test House")
resp, err := service.GetResidence(residence.ID, user.ID, time.Now())
resp, err := service.GetResidence(context.Background(), residence.ID, user.ID, time.Now())
require.NoError(t, err)
assert.Equal(t, "Test House", resp.Name)
}
@@ -816,7 +817,7 @@ func TestResidenceService_GenerateShareCode_NegativeExpiry(t *testing.T) {
user := testutil.CreateTestUser(t, db, "owner", "owner@test.com", "Password123")
residence := testutil.CreateTestResidence(t, db, user.ID, "Test House")
resp, err := service.GenerateShareCode(residence.ID, user.ID, -5)
resp, err := service.GenerateShareCode(context.Background(), residence.ID, user.ID, -5)
require.NoError(t, err)
assert.NotEmpty(t, resp.ShareCode.Code)
}
@@ -834,7 +835,7 @@ func TestResidenceService_GenerateSharePackage_DefaultExpiry(t *testing.T) {
residence := testutil.CreateTestResidence(t, db, user.ID, "Test House")
// Pass 0 hours — should default to 24
resp, err := service.GenerateSharePackage(residence.ID, user.ID, 0)
resp, err := service.GenerateSharePackage(context.Background(), residence.ID, user.ID, 0)
require.NoError(t, err)
assert.NotEmpty(t, resp.ShareCode)
assert.Equal(t, "Test House", resp.ResidenceName)
@@ -856,7 +857,7 @@ func TestResidenceService_RemoveUser_OwnerViaResidenceOwnerID(t *testing.T) {
// Try removing the owner (by residence.OwnerID) — even though requestingUserID != userIDToRemove
// The second check (userIDToRemove == residence.OwnerID) should catch this
err := service.RemoveUser(residence.ID, owner.ID, owner.ID)
err := service.RemoveUser(context.Background(), residence.ID, owner.ID, owner.ID)
testutil.AssertAppError(t, err, http.StatusBadRequest, "error.cannot_remove_owner")
}
@@ -877,7 +878,7 @@ func TestResidenceService_GenerateTasksReport(t *testing.T) {
testutil.CreateTestTask(t, db, residence.ID, user.ID, "Task 1")
testutil.CreateTestTask(t, db, residence.ID, user.ID, "Task 2")
report, err := service.GenerateTasksReport(residence.ID, user.ID)
report, err := service.GenerateTasksReport(context.Background(), residence.ID, user.ID)
require.NoError(t, err)
assert.Equal(t, residence.ID, report.ResidenceID)
assert.Equal(t, "Test House", report.ResidenceName)
@@ -895,7 +896,7 @@ func TestResidenceService_GenerateTasksReport_AccessDenied(t *testing.T) {
other := testutil.CreateTestUser(t, db, "other", "other@test.com", "Password123")
residence := testutil.CreateTestResidence(t, db, owner.ID, "Test House")
_, err := service.GenerateTasksReport(residence.ID, other.ID)
_, err := service.GenerateTasksReport(context.Background(), residence.ID, other.ID)
testutil.AssertAppError(t, err, http.StatusForbidden, "error.residence_access_denied")
}
@@ -909,7 +910,7 @@ func TestResidenceService_GenerateTasksReport_NotFound(t *testing.T) {
user := testutil.CreateTestUser(t, db, "owner", "owner@test.com", "Password123")
// Non-existent residence — user has no access
_, err := service.GenerateTasksReport(9999, user.ID)
_, err := service.GenerateTasksReport(context.Background(), 9999, user.ID)
assert.Error(t, err)
}
@@ -926,11 +927,11 @@ func TestResidenceService_GetShareCode_WithActiveCode(t *testing.T) {
residence := testutil.CreateTestResidence(t, db, user.ID, "Test House")
// Generate a share code first
_, err := service.GenerateShareCode(residence.ID, user.ID, 24)
_, err := service.GenerateShareCode(context.Background(), residence.ID, user.ID, 24)
require.NoError(t, err)
// Now get the active code
resp, err := service.GetShareCode(residence.ID, user.ID)
resp, err := service.GetShareCode(context.Background(), residence.ID, user.ID)
require.NoError(t, err)
assert.NotNil(t, resp)
assert.NotEmpty(t, resp.Code)
@@ -970,7 +971,7 @@ func TestResidenceService_CreateResidence_AllBooleanFields(t *testing.T) {
HasAttic: &hasAttic,
}
resp, err := service.CreateResidence(req, user.ID)
resp, err := service.CreateResidence(context.Background(), req, user.ID)
require.NoError(t, err)
assert.True(t, resp.Data.HasPool)
assert.True(t, resp.Data.HasSprinklerSystem)
@@ -1047,7 +1048,7 @@ func TestResidenceService_UpdateResidence_AllOptionalFields(t *testing.T) {
LandscapingType: &landscapingType,
}
resp, err := service.UpdateResidence(residence.ID, user.ID, req)
resp, err := service.UpdateResidence(context.Background(), residence.ID, user.ID, req)
require.NoError(t, err)
assert.Equal(t, "456 New St", resp.Data.StreetAddress)
assert.Equal(t, "CA", resp.Data.StateProvince)
@@ -1067,7 +1068,7 @@ func TestResidenceService_ListResidences_NoResidences(t *testing.T) {
user := testutil.CreateTestUser(t, db, "loner", "loner@test.com", "Password123")
resp, err := service.ListResidences(user.ID)
resp, err := service.ListResidences(context.Background(), user.ID)
require.NoError(t, err)
assert.Empty(t, resp)
}