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/model" ) func TestReportPlaybackAndSettle(t *testing.T) { s := newService(t) maCode, _, _ := issueOne(t, s) // 运营商回传播放/购买事件 acc, rej := s.ReportPlayback([]model.PlaybackEvent{ {MACode: maCode, PlatformID: "CT-SX", EventType: model.EventPlay}, {MACode: maCode, PlatformID: "CT-SX", EventType: model.EventPurchase, RevenueCent: 1500}, {MACode: maCode, PlatformID: "CM-SX", EventType: model.EventPurchase, RevenueCent: 2500}, }) assert.Equal(t, 3, acc) assert.Equal(t, 0, rej) // 聚合可信播放数据 sum := s.PlaybackSummary(maCode) assert.Equal(t, int64(4000), sum.TotalRevenue) assert.Equal(t, int64(1), sum.TotalPlays) // 分账:CP60/平台34/服务费6 st, err := s.ComputeSettlement(maCode, "2026-06") require.NoError(t, err) assert.Equal(t, int64(4000), st.TotalRevenue) assert.Equal(t, int64(2400), st.CPShare) assert.Equal(t, int64(1360), st.PlatformShare) assert.Equal(t, int64(240), st.HubFee) assert.Equal(t, st.TotalRevenue, st.CPShare+st.PlatformShare+st.HubFee) } func TestReportPlayback_RejectsUnknownOrRevoked(t *testing.T) { s := newService(t) maCode, _, _ := issueOne(t, s) // 未知 MA 码被拒 acc, rej := s.ReportPlayback([]model.PlaybackEvent{ {MACode: "MA.156.8531.6101/WD/不存在", PlatformID: "P", EventType: model.EventPlay}, }) assert.Equal(t, 0, acc) assert.Equal(t, 1, rej) // 下架后回传被拒(数据归属不可信) _, err := s.Takedown(chain.RoleRegulator, maCode, "违规") require.NoError(t, err) acc, rej = s.ReportPlayback([]model.PlaybackEvent{ {MACode: maCode, PlatformID: "P", EventType: model.EventPlay}, }) assert.Equal(t, 0, acc) assert.Equal(t, 1, rej) }