Files
arbeitszeitmessung/Backend/models/db_test.go
Tom Tröger 327e47840b
All checks were successful
GoLang Tests / Run Go Tests (push) Successful in 2m46s
Arbeitszeitmessung Deploy / Build Go Image and Upload (push) Successful in 2m58s
Fixed tests and git actions (#30)
Reviewed-on: #30
Co-authored-by: Tom Tröger <t.troeger.02@gmail.com>
Co-committed-by: Tom Tröger <t.troeger.02@gmail.com>
2025-09-04 10:16:42 +02:00

72 lines
1.6 KiB
Go

package models_test
import (
"arbeitszeitmessung/helper"
"arbeitszeitmessung/models"
"database/sql"
"fmt"
"log"
"testing"
"github.com/golang-migrate/migrate/v4"
"github.com/golang-migrate/migrate/v4/database/postgres"
_ "github.com/golang-migrate/migrate/v4/database/postgres"
_ "github.com/golang-migrate/migrate/v4/source/file"
_ "github.com/lib/pq"
)
type DBFixture struct {
Database models.IDatabase
TX *sql.Tx
}
func SetupDBFixture(t *testing.T) *DBFixture {
t.Helper()
dbHost := helper.GetEnv("POSTGRES_HOST", "localhost")
dbPort := helper.GetEnv("POSTGRES_PORT", "5433")
dbName := helper.GetEnv("POSTGRES_DB", "arbeitszeitmessung")
dbUser := helper.GetEnv("POSTGRES_USER", "postgres")
dbPassword := helper.GetEnv("POSTGRES_PASSWORD", "password")
connStr := fmt.Sprintf("postgres://%s:%s@%s:%s/%s?sslmode=disable&TimeZone=Europe/Berlin", dbUser, dbPassword, dbHost, dbPort, dbName)
db, err := sql.Open("postgres", connStr)
if err != nil {
t.Fatalf("failed to connect to database: %v", err)
}
defer db.Close()
err = MigrateDB(db, "file://../../migrations")
if err != nil && err != migrate.ErrNoChange {
t.Fatalf("Failed to migrate database: %v", err)
}
tx, err := db.Begin()
if err != nil {
t.Fatalf("Failed to start transaction: %v", err)
}
t.Cleanup(func() {
tx.Rollback()
db.Close()
})
return &DBFixture{
Database: tx,
TX: tx,
}
}
func MigrateDB(db *sql.DB, fileUrl string) error {
driver, err := postgres.WithInstance(db, &postgres.Config{})
if err != nil {
log.Fatalln("Error starting migration", err)
}
m, err := migrate.NewWithDatabaseInstance(
fileUrl,
"postgres", driver)
return m.Up()
}