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) } } func TestCatalogRepoFiltersRoomsByCategoryEnabled(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) } enabledCategory := categoryPO{Name: "Games", Enabled: true} disabledCategory := categoryPO{Name: "Hidden", Enabled: false} if err := db.Create(&enabledCategory).Error; err != nil { t.Fatal(err) } if err := db.Create(&disabledCategory).Error; err != nil { t.Fatal(err) } if err := db.Model(&disabledCategory).Update("enabled", false).Error; err != nil { t.Fatal(err) } for _, room := range []*roomPO{ {Name: "Visible", CategoryID: enabledCategory.ID, CoverURL: "visible.png", AnchorUserID: 2, Enabled: true}, {Name: "Hidden", CategoryID: disabledCategory.ID, CoverURL: "hidden.png", AnchorUserID: 2, Enabled: true}, } { if err := db.Create(room).Error; err != nil { t.Fatal(err) } } repo := NewCatalogRepo(catalogTestProvider{db: db}) enabled := true rooms, total, err := repo.ListRooms(context.Background(), bizlive.RoomFilter{CategoryEnabled: &enabled}, bizlive.ListOptions{Limit: 10}) if err != nil { t.Fatal(err) } if total != 1 || len(rooms) != 1 || rooms[0].Name != "Visible" { t.Fatalf("enabled-category rooms total=%d rooms=%+v", total, rooms) } }