From fd1194f830442464c313f0c7d9edd944e0136c19 Mon Sep 17 00:00:00 2001 From: John O'Keefe Date: Sun, 15 Feb 2026 00:29:20 -0500 Subject: [PATCH] test(sync): fix integration tests - use config for db, fix helper IDs, correct route paths --- cmd/server/tests/sync_integration_test.go | 34 +++++++++++++---------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/cmd/server/tests/sync_integration_test.go b/cmd/server/tests/sync_integration_test.go index 6654244..1350284 100644 --- a/cmd/server/tests/sync_integration_test.go +++ b/cmd/server/tests/sync_integration_test.go @@ -1,6 +1,7 @@ package main import ( + "bookhoard/internal/config" "bookhoard/internal/database" "context" "net/http" @@ -19,7 +20,9 @@ import ( func setupSyncTestDB(t *testing.T) *database.Queries { ctx := context.Background() - dbURL := "postgresql://postgres@db:5432/bookhoard?sslmode=disable" + cfg := config.LoadConfig() + cfg.DatabaseHost = "db" + dbURL := cfg.DatabaseURL() dbConfig, err := pgxpool.ParseConfig(dbURL) require.NoError(t, err, "Failed to parse database URL") dbConfig.MaxConns = 1 @@ -43,11 +46,9 @@ func setupSyncTestDB(t *testing.T) *database.Queries { func createSyncTestUser(t *testing.T, db *database.Queries) pgtype.UUID { ctx := context.Background() - userID := uuid.New() - hashedPassword := "$2a$10$rKvZHX3lIJ6CpH1lOukQ/xU8j5cH8mYHYP5YGfXllq5hG8y0Ou" - _, err := db.CreateUser(ctx, database.CreateUserParams{ + user, err := db.CreateUser(ctx, database.CreateUserParams{ Email: "test-sync@example.com", Username: "testsyncuser", PasswordHash: hashedPassword, @@ -57,14 +58,14 @@ func createSyncTestUser(t *testing.T, db *database.Queries) pgtype.UUID { }) require.NoError(t, err) - return pgtype.UUID{Bytes: [16]byte(userID), Valid: true} + return user.ID } func createSyncTestDevice(t *testing.T, db *database.Queries, userID pgtype.UUID) pgtype.UUID { ctx := context.Background() deviceID := uuid.New() - _, err := db.CreateDevice(ctx, database.CreateDeviceParams{ + device, err := db.CreateDevice(ctx, database.CreateDeviceParams{ UserID: userID, DeviceName: "Test Sync Device", DeviceType: "koreader", @@ -77,14 +78,13 @@ func createSyncTestDevice(t *testing.T, db *database.Queries, userID pgtype.UUID }) require.NoError(t, err) - return pgtype.UUID{Bytes: [16]byte(deviceID), Valid: true} + return device.ID } func createSyncTestMedia(t *testing.T, db *database.Queries, libraryID pgtype.UUID) pgtype.UUID { ctx := context.Background() - mediaID := uuid.New() - _, err := db.CreateMediaItem(ctx, database.CreateMediaItemParams{ + media, err := db.CreateMediaItem(ctx, database.CreateMediaItemParams{ LibraryID: libraryID, Title: "Sync Test Book", Author: pgtype.Text{String: "Test Author", Valid: true}, @@ -94,7 +94,7 @@ func createSyncTestMedia(t *testing.T, db *database.Queries, libraryID pgtype.UU }) require.NoError(t, err) - return pgtype.UUID{Bytes: [16]byte(mediaID), Valid: true} + return media.ID } func createSyncTestLibrary(t *testing.T, db *database.Queries, userID pgtype.UUID) pgtype.UUID { @@ -176,16 +176,19 @@ func TestSyncQueueProcessor(t *testing.T) { SyncType: "progress", SyncData: []byte(`{"percentage": 50}`), Priority: pgtype.Int4{Int32: 5, Valid: true}, + MaxAttempts: pgtype.Int4{Int32: 3, Valid: true}, + Status: pgtype.Text{String: "pending", Valid: true}, }) require.NoError(t, err) // Verify queue item was created items, err := db.ListPendingSyncQueueItems(ctx, database.ListPendingSyncQueueItemsParams{ - Limit: int32(10), + DeviceID: deviceID, + Limit: int32(10), }) require.NoError(t, err) assert.Equal(t, 1, len(items), "Should have one queue item") - assert.Equal(t, "pending", items[0].Status) + assert.Equal(t, "pending", items[0].Status.String) } // TestSyncConflictDetection tests conflict detection @@ -216,12 +219,15 @@ func TestSyncConflictDetection(t *testing.T) { SyncType: "progress", SyncData: []byte(`{"percentage": 75}`), Priority: pgtype.Int4{Int32: 5, Valid: true}, + MaxAttempts: pgtype.Int4{Int32: 3, Valid: true}, + Status: pgtype.Text{String: "pending", Valid: true}, }) require.NoError(t, err) // Verify both exist (conflict detection would happen during processing) items, err := db.ListPendingSyncQueueItems(ctx, database.ListPendingSyncQueueItemsParams{ - Limit: int32(10), + DeviceID: deviceID, + Limit: int32(10), }) require.NoError(t, err) assert.Equal(t, 1, len(items), "Should have one queue item") @@ -251,7 +257,7 @@ func TestSyncEndpoint(t *testing.T) { device := setup.CreateDevice(t, "Test Sync Device", "koreader", "sync-test-123") // Test sync endpoint with device token - req := httptest.NewRequest("POST", "/api/koreader/sync", nil) + req := httptest.NewRequest("POST", "/api/sync/koreader/progress", nil) req.Header.Set("Authorization", "Bearer "+device.AuthToken) req.Header.Set("Content-Type", "application/json") rec := httptest.NewRecorder()