Files
MAcode/tcs-iptv/internal/service/settlement_test.go
T

60 lines
1.8 KiB
Go

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)
ccCode, _, _ := issueOne(t, s)
// 运营商回传播放/购买事件
acc, rej := s.ReportPlayback([]model.PlaybackEvent{
{CCCode: ccCode, PlatformID: "CT-SX", EventType: model.EventPlay},
{CCCode: ccCode, PlatformID: "CT-SX", EventType: model.EventPurchase, RevenueCent: 1500},
{CCCode: ccCode, PlatformID: "CM-SX", EventType: model.EventPurchase, RevenueCent: 2500},
})
assert.Equal(t, 3, acc)
assert.Equal(t, 0, rej)
// 聚合可信播放数据
sum := s.PlaybackSummary(ccCode)
assert.Equal(t, int64(4000), sum.TotalRevenue)
assert.Equal(t, int64(1), sum.TotalPlays)
// 分账:CP60/平台34/服务费6
st, err := s.ComputeSettlement(ccCode, "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)
ccCode, _, _ := issueOne(t, s)
// 未知 MA 码被拒
acc, rej := s.ReportPlayback([]model.PlaybackEvent{
{CCCode: "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, ccCode, "违规")
require.NoError(t, err)
acc, rej = s.ReportPlayback([]model.PlaybackEvent{
{CCCode: ccCode, PlatformID: "P", EventType: model.EventPlay},
})
assert.Equal(t, 0, acc)
assert.Equal(t, 1, rej)
}