package catalog import ( "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/tcs-iptv/tcs/internal/chain" "github.com/tcs-iptv/tcs/internal/model" ) func TestCatalog_QueryByMA(t *testing.T) { c := chain.NewMemoryChain() cat := New(c) // 发码 _, err := c.IssueMA(chain.RoleRegulator, chain.IssueRequest{ MACode: "MA.156.8531.6101/WD/20260000001", ContentTwinID: "ctid-cat-001", FileHash: "fh-cat-001", MerkleRoot: "mr-cat-001", Content: model.Content{Title: "目录库测试剧", EpisodeCount: 2, MAType: "WD", Issuer: "测试局"}, }) require.NoError(t, err) // 按 MA 码查询 res, err := cat.QueryByMA("MA.156.8531.6101/WD/20260000001") require.NoError(t, err) assert.True(t, res.Found) assert.Equal(t, "目录库测试剧", res.Content.Title) } func TestCatalog_QueryByHash(t *testing.T) { c := chain.NewMemoryChain() cat := New(c) _, err := c.IssueMA(chain.RoleRegulator, chain.IssueRequest{ MACode: "MA.156.8531.6101/WD/20260000002", ContentTwinID: "ctid-cat-002", FileHash: "fh-cat-002", MerkleRoot: "mr-cat-002", Content: model.Content{Title: "Hash查询测试", MAType: "WD", Issuer: "测试局"}, }) require.NoError(t, err) // 按 Hash 查询 res, err := cat.QueryByHash("fh-cat-002") require.NoError(t, err) assert.True(t, res.Found) assert.Equal(t, "MA.156.8531.6101/WD/20260000002", res.Content.MACode) // 不存在的 Hash _, err = cat.QueryByHash("nonexistent") assert.Error(t, err) } func TestCatalog_QueryByProvincialCode(t *testing.T) { c := chain.NewMemoryChain() cat := New(c) _, err := c.IssueMA(chain.RoleRegulator, chain.IssueRequest{ MACode: "MA.156.8531.6101/WD/20260000003", ContentTwinID: "ctid-cat-003", FileHash: "fh-cat-003", MerkleRoot: "mr-cat-003", Content: model.Content{Title: "省级编码查询测试", MAType: "WD", Issuer: "测试局"}, }) require.NoError(t, err) // 注册 CP 映射 _, err = c.RegisterMapping(chain.RoleCP, model.Mapping{ ContentTwinID: "ctid-cat-003", Party: model.PartyCP, PartyID: "PROV-CAT-001", PartyName: "测试CP", }) require.NoError(t, err) // 按省级编码查询 res, err := cat.QueryByProvincialCode("PROV-CAT-001") require.NoError(t, err) assert.True(t, res.Found) assert.Equal(t, "MA.156.8531.6101/WD/20260000003", res.Content.MACode) } func TestCatalog_QueryByLibraryFileID(t *testing.T) { c := chain.NewMemoryChain() cat := New(c) _, err := c.IssueMA(chain.RoleRegulator, chain.IssueRequest{ MACode: "MA.156.8531.6101/WD/20260000004", ContentTwinID: "ctid-cat-004", FileHash: "fh-cat-004", MerkleRoot: "mr-cat-004", Content: model.Content{Title: "片库ID查询测试", MAType: "WD", Issuer: "测试局"}, }) require.NoError(t, err) // 注册媒资库映射 _, err = c.RegisterMapping(chain.RoleReviewer, model.Mapping{ ContentTwinID: "ctid-cat-004", Party: model.PartyReviewer, PartyID: "LIB-CAT-001", PartyName: "测试媒资库", }) require.NoError(t, err) // 按片库文件 ID 查询 res, err := cat.QueryByLibraryFileID("LIB-CAT-001") require.NoError(t, err) assert.True(t, res.Found) assert.Equal(t, "MA.156.8531.6101/WD/20260000004", res.Content.MACode) }