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:
@@ -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{
|
||||
|
||||
Reference in New Issue
Block a user