test: fix race condition

Carlos Alexandro Becker created

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

Change summary

internal/db/connect.go | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)

Detailed changes

internal/db/connect.go 🔗

@@ -6,10 +6,13 @@ import (
 	"fmt"
 	"log/slog"
 	"path/filepath"
+	"sync"
 
 	"github.com/pressly/goose/v3"
 )
 
+var gooseSetup sync.Once
+
 // Connect opens a SQLite database connection and runs migrations.
 func Connect(ctx context.Context, dataDir string) (*sql.DB, error) {
 	if dataDir == "" {
@@ -27,11 +30,16 @@ func Connect(ctx context.Context, dataDir string) (*sql.DB, error) {
 		return nil, fmt.Errorf("failed to connect to database: %w", err)
 	}
 
-	goose.SetBaseFS(FS)
-
-	if err := goose.SetDialect("sqlite3"); err != nil {
-		slog.Error("Failed to set dialect", "error", err)
-		return nil, fmt.Errorf("failed to set dialect: %w", err)
+	var gooseErr error
+	gooseSetup.Do(func() {
+		goose.SetBaseFS(FS)
+		if err := goose.SetDialect("sqlite3"); err != nil {
+			slog.Error("Failed to set dialect", "error", err)
+			gooseErr = fmt.Errorf("failed to set dialect: %w", err)
+		}
+	})
+	if gooseErr != nil {
+		return nil, gooseErr
 	}
 
 	if err := goose.Up(db, "migrations"); err != nil {