package db import ( "context" "database/sql" "fmt" "log/slog" "sync/atomic" ) //nolint:gochecknoglobals // test counter var testDBCounter atomic.Int64 // NewTestDatabase creates an in-memory database for testing. func NewTestDatabase() (*Database, error) { n := testDBCounter.Add(1) dsn := fmt.Sprintf( "file:testdb%d?mode=memory"+ "&cache=shared&_pragma=foreign_keys(1)", n, ) d, err := sql.Open("sqlite", dsn) if err != nil { return nil, err } database := &Database{db: d, log: slog.Default()} err = database.runMigrations(context.Background()) if err != nil { closeErr := d.Close() if closeErr != nil { return nil, closeErr } return nil, err } return database, nil } // Close closes the underlying database connection. func (s *Database) Close() error { return s.db.Close() }