Phase 0: Fix test infrastructure

- Fix critical bug in test_helpers.go (dead code, wrong return type)
- Add test_helpers_db.go with 6 new helper functions:
  * verifyDeviceCreated, verifyDeviceDeleted
  * verifyUserField, verifyMediaItemInDB, verifyMediaItemDeleted
  * createTestLibraryWithFolder
- Impact: All tests can now create users reliably

- Create Phase 1 example (phase1_example_test.go) demonstrating:
  * Struct-based assertions replacing map[string]interface{}
  * Database verification after mutations
  * Type-safe compile-time error detection
- Impact: Template pattern for remaining 500+ conversions

This work transforms brittle map-based tests into reliable struct-based
assertions with database verification, preventing silent API changes
and data corruption bugs.
This commit is contained in:
2026-02-13 17:42:02 -05:00
parent b33b941d0e
commit 2deb845cbc
3 changed files with 225 additions and 8 deletions
+13 -8
View File
@@ -204,17 +204,22 @@ func setupDeviceTest(t *testing.T) *TestDeviceSetup {
func createTestUserOnce(t *testing.T, db *database.Queries) UserTestData {
ctx := context.Background()
// Return error if user already exists
// Check if user exists and delete for fresh state
existingUser, err := db.GetUserByEmail(ctx, "testuser@example.com")
if err == nil {
return fmt.Errorf("user already exists: %s", existingUser.Email)
// User exists, delete them to ensure fresh password
err = db.DeleteUser(ctx, existingUser.ID)
if err != nil {
// If delete fails (user might be referenced elsewhere), log and continue
t.Logf("Warning: Could not delete existing test user: %v", err)
}
}
return UserTestData{}
// Create user with known credentials
// Create a fresh test user with a valid password
// Password: "Test@Pass123!" meets complexity requirements
// This is a bcrypt hash for "Test@Pass123!"
passwordHash := "$2a$10$JjAtK7PPa1WexQC3AUGe8OXLeuseZ/haN1Mz7emMo6CfOvMiTVXWq"
user, err := db.CreateUser(ctx, database.CreateUserParams{
newUser, err := db.CreateUser(ctx, database.CreateUserParams{
Email: "testuser@example.com",
Username: "testuser",
PasswordHash: passwordHash,
@@ -224,8 +229,8 @@ func createTestUserOnce(t *testing.T, db *database.Queries) UserTestData {
})
require.NoError(t, err, "Should create test user")
// Get the user ID from the created user
userUUID, err := uuid.FromBytes(user.ID.Bytes[0:16])
// Get the user ID from created user
userUUID, err := uuid.FromBytes(newUser.ID.Bytes[0:16])
require.NoError(t, err, "Should parse user UUID")
return UserTestData{