mirror of
https://gitee.com/wanwujie/sub2api
synced 2026-05-04 21:20:51 +08:00
87 lines
2.1 KiB
Go
87 lines
2.1 KiB
Go
package service
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/Wei-Shaw/sub2api/internal/pkg/pagination"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestMergeBalanceHistoryCodesIncludesAffiliateTransfersByDefault(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
now := time.Date(2026, 5, 3, 12, 0, 0, 0, time.UTC)
|
|
older := now.Add(-2 * time.Hour)
|
|
newer := now.Add(time.Hour)
|
|
|
|
usedBy := int64(10)
|
|
redeemCodes := []RedeemCode{
|
|
{
|
|
ID: 1,
|
|
Type: RedeemTypeBalance,
|
|
Value: 8,
|
|
Status: StatusUsed,
|
|
UsedBy: &usedBy,
|
|
UsedAt: &now,
|
|
CreatedAt: now,
|
|
},
|
|
{
|
|
ID: 2,
|
|
Type: RedeemTypeConcurrency,
|
|
Value: 1,
|
|
Status: StatusUsed,
|
|
UsedBy: &usedBy,
|
|
UsedAt: &older,
|
|
CreatedAt: older,
|
|
},
|
|
}
|
|
affiliateCodes := []RedeemCode{
|
|
{
|
|
ID: -20,
|
|
Type: RedeemTypeAffiliateBalance,
|
|
Value: 3.5,
|
|
Status: StatusUsed,
|
|
UsedBy: &usedBy,
|
|
UsedAt: &newer,
|
|
CreatedAt: newer,
|
|
},
|
|
}
|
|
|
|
got := mergeBalanceHistoryCodes(redeemCodes, affiliateCodes, pagination.PaginationParams{
|
|
Page: 1,
|
|
PageSize: 2,
|
|
})
|
|
|
|
require.Len(t, got, 2)
|
|
require.Equal(t, RedeemTypeAffiliateBalance, got[0].Type)
|
|
require.Equal(t, RedeemTypeBalance, got[1].Type)
|
|
}
|
|
|
|
func TestMergeBalanceHistoryCodesPaginatesAfterCombiningSources(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
base := time.Date(2026, 5, 3, 12, 0, 0, 0, time.UTC)
|
|
usedBy := int64(10)
|
|
at := func(hours int) *time.Time {
|
|
v := base.Add(time.Duration(hours) * time.Hour)
|
|
return &v
|
|
}
|
|
|
|
got := mergeBalanceHistoryCodes(
|
|
[]RedeemCode{
|
|
{ID: 1, Type: RedeemTypeBalance, UsedBy: &usedBy, UsedAt: at(4), CreatedAt: *at(4)},
|
|
{ID: 2, Type: RedeemTypeConcurrency, UsedBy: &usedBy, UsedAt: at(2), CreatedAt: *at(2)},
|
|
},
|
|
[]RedeemCode{
|
|
{ID: -3, Type: RedeemTypeAffiliateBalance, UsedBy: &usedBy, UsedAt: at(3), CreatedAt: *at(3)},
|
|
{ID: -4, Type: RedeemTypeAffiliateBalance, UsedBy: &usedBy, UsedAt: at(1), CreatedAt: *at(1)},
|
|
},
|
|
pagination.PaginationParams{Page: 2, PageSize: 2},
|
|
)
|
|
|
|
require.Len(t, got, 2)
|
|
require.Equal(t, RedeemTypeConcurrency, got[0].Type)
|
|
require.Equal(t, int64(-4), got[1].ID)
|
|
}
|