Files
kra-new/internal/data/business/schema_test.go
T

50 lines
1.3 KiB
Go

package business
import (
"path/filepath"
"testing"
"github.com/glebarez/sqlite"
"gorm.io/gorm"
"kra/internal/biz/business"
)
func TestBusinessTablesAvailabilityIsFreshAndPropagatesFailures(t *testing.T) {
db, err := gorm.Open(sqlite.Open(filepath.Join(t.TempDir(), "schema.db")), &gorm.Config{})
if err != nil {
t.Fatal(err)
}
pool, err := db.DB()
if err != nil {
t.Fatal(err)
}
t.Cleanup(func() { _ = pool.Close() })
check := func(want bool, names ...string) {
t.Helper()
got, err := businessTablesAvailable(db, names...)
if err != nil || got != want {
t.Fatalf("tables %v: got %v, %v; want %v", names, got, err, want)
}
}
check(true)
check(false, "first", "second")
for _, table := range []string{"first", "second"} {
if err := db.Exec("CREATE TABLE " + table + " (id INTEGER)").Error; err != nil {
t.Fatal(err)
}
}
check(true, "first", "second", "first")
check(false, "first", "missing")
check(false, "first') OR 1=1 --")
if err := db.Exec("DROP TABLE second").Error; err != nil {
t.Fatal(err)
}
check(false, "first", "second")
if err := pool.Close(); err != nil {
t.Fatal(err)
}
if available, err := businessTablesAvailable(db, "first"); available || err != business.ErrStorage {
t.Fatalf("connection error must not become a missing-table result: %v, %v", available, err)
}
}