package db import ( "database/sql" "me-fit/utils" "reflect" "testing" "time" "github.com/google/uuid" ) func setupDb(t *testing.T) *sql.DB { db, err := sql.Open("sqlite3", ":memory:") if err != nil { t.Fatalf("Error opening database: %v", err) } utils.MustRunMigrations(db, "../") return db } func TestGetUser(t *testing.T) { t.Parallel() t.Run("should return UserNotFound", func(t *testing.T) { t.Parallel() db := setupDb(t) defer db.Close() underTest := DbAuthSqlite{db: db} _, err := underTest.GetUser("someNonExistentEmail") if err != ErrUserNotFound { t.Errorf("Expected UserNotFound, got %v", err) } }) t.Run("should find user in database", func(t *testing.T) { t.Parallel() db := setupDb(t) defer db.Close() underTest := DbAuthSqlite{db: db} verifiedAt := time.Date(2020, 1, 5, 13, 0, 0, 0, time.UTC) createAt := time.Date(2020, 1, 5, 12, 0, 0, 0, time.UTC) user := NewUser(uuid.New(), "some@email.de", true, verifiedAt, false, []byte("somePass"), []byte("someSalt"), createAt) _, err := db.Exec(` INSERT INTO user (user_uuid, email, email_verified, email_verified_at, is_admin, password, salt, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?) `, user.Id, user.Email, user.EmailVerified, user.EmailVerifiedAt, user.IsAdmin, user.Password, user.Salt, user.CreateAt) if err != nil { t.Fatalf("Error inserting user: %v", err) } actual, err := underTest.GetUser(user.Email) if err != nil { t.Fatalf("Error getting user: %v", err) } if !reflect.DeepEqual(user, actual) { t.Errorf("Expected %v, got %v", user, actual) } }) }