feat(phase2): 数据回传聚合与可信分账(F09/F18)
- internal/playback: 播放事件存储/MA码维度聚合/分账结算(CP60/平台34/服务费6) - service: ReportPlayback(链上状态门禁)/PlaybackSummary/ComputeSettlement - api: /data/playback, /data/playback-summary, /settlement/compute - 分账取余兜底无丢分; 未知/已下架MA码回传被拒 - 13项新测试通过; 端到端验证: 回传3条→聚合40元→分账24/13.6/2.4
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user