package service 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/macode" ) func newServiceSX(t *testing.T) *Service { t.Helper() gen := macode.NewGenerator(macode.NewMemoryStore()) require.NoError(t, gen.RegisterSegment(macode.Segment{ IndustryNode: "8531", OrgNode: "6101", // 陕西 Category: macode.CategoryMicroDrama, Start: 1, End: 100, SeqWidth: 7, })) return New(chain.NewMemoryChain(), gen) } func issueSX(t *testing.T, s *Service) string { t.Helper() sub := sampleSub() r, _ := s.SubmitForReview(sub) require.NoError(t, s.ReviewCSPS(r.ReviewID, true, "rv")) iss, err := s.ApproveAndIssue(chain.RoleRegulator, r.ReviewID, "陕西IPTV运营公司") require.NoError(t, err) return iss.MACode } func TestBindFiling(t *testing.T) { s := newServiceSX(t) ma := issueSX(t, s) rec, err := s.BindFiling(ma, "(陕)网微剧审字(2026)第001号", "备案2026001") require.NoError(t, err) assert.Equal(t, "(陕)网微剧审字(2026)第001号", rec.LicenseNo) got, ok := s.QueryFiling(ma) assert.True(t, ok) assert.Equal(t, "备案2026001", got.FilingNo) } func TestNationalStats(t *testing.T) { s := newServiceSX(t) ma1 := issueSX(t, s) sub2 := sampleSub() sub2.FileHash = "fh2" sub2.MerkleRoot = "mr2" r2, _ := s.SubmitForReview(sub2) require.NoError(t, s.ReviewCSPS(r2.ReviewID, true, "rv")) _, _ = s.ApproveAndIssue(chain.RoleRegulator, r2.ReviewID, "陕西IPTV") _, _ = s.Takedown(chain.RoleRegulator, ma1, "违规") st, err := s.NationalStats() require.NoError(t, err) assert.Equal(t, 2, st.TotalContents) assert.Equal(t, 1, st.ByStatus["revoked"]) // 陕西省统计 sx := st.ByProvince["陕西"] assert.Equal(t, "6101", sx.OrgNode) assert.Equal(t, 2, sx.Total) assert.Equal(t, 1, sx.Revoked) // 类目统计 assert.Equal(t, 2, st.ByCategory["WD"]) } func TestListSegments(t *testing.T) { s := newServiceSX(t) segs := s.ListSegments() require.NotEmpty(t, segs) assert.Equal(t, "6101", segs[0].OrgNode) assert.Equal(t, uint64(100), segs[0].Capacity) } func TestDailyRegulatoryReport(t *testing.T) { s := newServiceSX(t) _ = issueSX(t, s) rep, err := s.DailyRegulatoryReport("2026-06-14") require.NoError(t, err) assert.Equal(t, 1, rep.TotalNew) assert.Equal(t, 1, rep.LevelDist["WD"]) }