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) } }