package database_test import ( "context" "testing" "go.uber.org/fx/fxtest" "sneak.berlin/go/webhooker/internal/config" "sneak.berlin/go/webhooker/internal/database" "sneak.berlin/go/webhooker/internal/globals" "sneak.berlin/go/webhooker/internal/logger" ) func setupTestDB( t *testing.T, ) (*database.Database, *fxtest.Lifecycle) { t.Helper() lc := fxtest.NewLifecycle(t) g := &globals.Globals{ Appname: "webhooker-test", Version: "test", } l, err := logger.New( lc, logger.LoggerParams{Globals: g}, ) if err != nil { t.Fatalf("Failed to create logger: %v", err) } c := &config.Config{ DataDir: t.TempDir(), Environment: "dev", } db, err := database.New(lc, database.DatabaseParams{ Config: c, Logger: l, }) if err != nil { t.Fatalf("Failed to create database: %v", err) } return db, lc } func TestDatabaseConnection(t *testing.T) { t.Parallel() db, lc := setupTestDB(t) ctx := context.Background() err := lc.Start(ctx) if err != nil { t.Fatalf("Failed to connect to database: %v", err) } defer func() { stopErr := lc.Stop(ctx) if stopErr != nil { t.Errorf( "Failed to stop lifecycle: %v", stopErr, ) } }() if db.DB() == nil { t.Error("Expected non-nil database connection") } var result int err = db.DB().Raw("SELECT 1").Scan(&result).Error if err != nil { t.Fatalf("Failed to execute test query: %v", err) } if result != 1 { t.Errorf( "Expected query result to be 1, got %d", result, ) } }