| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- 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)
- }
|