60 lines
1.8 KiB
Go
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)
|
|
}
|