SetupTestDB creates a fresh PostgreSQL 16 container and returns a gorm.DB. The container is cleaned up via DeferCleanup when the test completes.
()
| 19 | // SetupTestDB creates a fresh PostgreSQL 16 container and returns a gorm.DB. |
| 20 | // The container is cleaned up via DeferCleanup when the test completes. |
| 21 | func SetupTestDB() *gorm.DB { |
| 22 | if runtime.GOOS == "darwin" { |
| 23 | Skip("testcontainers requires Docker, not available on macOS CI") |
| 24 | } |
| 25 | ctx := context.Background() |
| 26 | pgC, err := tcpostgres.Run(ctx, "postgres:16", |
| 27 | tcpostgres.WithDatabase("testdb"), |
| 28 | tcpostgres.WithUsername("test"), |
| 29 | tcpostgres.WithPassword("test"), |
| 30 | testcontainers.WithWaitStrategyAndDeadline(60*time.Second, |
| 31 | wait.ForLog("database system is ready to accept connections").WithOccurrence(2)), |
| 32 | ) |
| 33 | Expect(err).ToNot(HaveOccurred()) |
| 34 | DeferCleanup(func() { pgC.Terminate(context.Background()) }) |
| 35 | connStr, err := pgC.ConnectionString(ctx, "sslmode=disable") |
| 36 | Expect(err).ToNot(HaveOccurred()) |
| 37 | db, err := gorm.Open(postgres.Open(connStr), &gorm.Config{ |
| 38 | Logger: logger.Default.LogMode(logger.Silent), |
| 39 | }) |
| 40 | Expect(err).ToNot(HaveOccurred()) |
| 41 | return db |
| 42 | } |
no test coverage detected