From 7be196e4c3663886ca039ef8c833addacd48cb68 Mon Sep 17 00:00:00 2001 From: Kharec Date: Mon, 19 Jan 2026 16:37:01 +0100 Subject: [PATCH] test: move seed RNG to tests and add help/error cases --- cmd/goyco/commands/seed_test.go | 53 +++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/cmd/goyco/commands/seed_test.go b/cmd/goyco/commands/seed_test.go index a01e9a1..dea2ac3 100644 --- a/cmd/goyco/commands/seed_test.go +++ b/cmd/goyco/commands/seed_test.go @@ -2,8 +2,11 @@ package commands import ( "fmt" + "math/rand" "strings" + "sync" "testing" + "time" "goyco/internal/database" "goyco/internal/repositories" @@ -13,6 +16,18 @@ import ( "gorm.io/gorm" ) +var ( + seedRandSource *rand.Rand + seedRandOnce sync.Once +) + +func initSeedRand() { + seedRandOnce.Do(func() { + seed := time.Now().UnixNano() + seedRandSource = rand.New(rand.NewSource(seed)) + }) +} + func TestSeedCommand(t *testing.T) { db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{}) if err != nil { @@ -271,6 +286,22 @@ func TestSeedDatabaseFlagParsing(t *testing.T) { t.Errorf("zero votes-per-post should be valid, got error: %v", err) } }) + + t.Run("help flag returns no error", func(t *testing.T) { + err := seedDatabase(userRepo, postRepo, voteRepo, []string{"--help"}) + + if err != nil { + t.Errorf("help flag should return no error, got: %v", err) + } + }) + + t.Run("short help flag returns no error", func(t *testing.T) { + err := seedDatabase(userRepo, postRepo, voteRepo, []string{"-h"}) + + if err != nil { + t.Errorf("short help flag should return no error, got: %v", err) + } + }) } func TestSeedCommandIdempotency(t *testing.T) { @@ -531,3 +562,25 @@ func TestEnsureSeedUser(t *testing.T) { t.Errorf("Expected exactly 1 seed user, got %d", seedUserCount) } } + +func TestEnsureSeedUser_HandlesDatabaseErrors(t *testing.T) { + userRepo := testutils.NewMockUserRepository() + passwordHash := "test_password_hash" + + dbError := fmt.Errorf("database connection failed") + + userRepo.SetGetByUsernameError(dbError) + + _, err := ensureSeedUser(userRepo, passwordHash) + if err == nil { + t.Fatal("Expected error when GetByUsername returns database error") + } + + if !strings.Contains(err.Error(), "failed to check if seed user exists") { + t.Errorf("Expected error message about checking seed user, got: %v", err) + } + + if !strings.Contains(err.Error(), dbError.Error()) { + t.Errorf("Expected error to wrap original database error, got: %v", err) + } +}