package live import ( "context" "testing" bizlive "kra/internal/biz/live" "github.com/glebarez/sqlite" "gorm.io/gorm" ) type catalogTestProvider struct{ db *gorm.DB } func (p catalogTestProvider) DB() *gorm.DB { return p.db } func openCatalogTestDB(t *testing.T) *gorm.DB { t.Helper() db, err := gorm.Open(sqlite.Open("file:"+t.Name()+"?mode=memory&cache=shared"), &gorm.Config{}) if err != nil { t.Fatal(err) } if err = db.AutoMigrate(&categoryPO{}, &roomPO{}); err != nil { t.Fatal(err) } if err = db.Exec(`CREATE TABLE sys_users ( id integer primary key, username text, nick_name text, header_img text, deleted_at datetime )`).Error; err != nil { t.Fatal(err) } return db } func TestCatalogRepoScansCategoryAndRoomFields(t *testing.T) { db := openCatalogTestDB(t) if err := db.Exec(`INSERT INTO sys_users(id, username, nick_name, header_img) VALUES (2, 'anchor', 'Anchor', 'avatar.png')`).Error; err != nil { t.Fatal(err) } category := categoryPO{Name: "Games", Icon: "game.png", Sort: 1, Enabled: true} if err := db.Create(&category).Error; err != nil { t.Fatal(err) } room := roomPO{Name: "Test Room", CategoryID: category.ID, CoverURL: "cover.png", Intro: "intro", Sort: 2, AnchorUserID: 2, Enabled: true} if err := db.Create(&room).Error; err != nil { t.Fatal(err) } repo := NewCatalogRepo(catalogTestProvider{db: db}) categories, total, err := repo.ListCategories(context.Background(), bizlive.CategoryFilter{}, bizlive.ListOptions{Limit: 10}) if err != nil { t.Fatal(err) } if total != 1 || len(categories) != 1 || categories[0].ID != category.ID || categories[0].Name != category.Name || !categories[0].Enabled || categories[0].RoomCount != 1 { t.Fatalf("category scan result total=%d categories=%+v", total, categories) } rooms, total, err := repo.ListRooms(context.Background(), bizlive.RoomFilter{}, bizlive.ListOptions{Limit: 10}) if err != nil { t.Fatal(err) } if total != 1 || len(rooms) != 1 || rooms[0].ID != room.ID || rooms[0].Name != room.Name || rooms[0].CategoryName != category.Name || rooms[0].AnchorName != "Anchor" || !rooms[0].Enabled { t.Fatalf("room list scan result total=%d rooms=%+v", total, rooms) } got, err := repo.GetRoom(context.Background(), room.ID) if err != nil { t.Fatal(err) } if got.ID != room.ID || got.Name != room.Name || got.AnchorUserID != 2 || got.AnchorAvatar != "avatar.png" || !got.Enabled { t.Fatalf("room get scan result=%+v", got) } }