hi-server/internal/logic/common/subscribeModeRoute_test.go
shanshanzhong 4752f844ef
Some checks failed
Build docker and publish / build (20.15.1) (push) Has been cancelled
各种配置项修复,优化到后台管理端配置
2026-03-04 17:58:40 -08:00

83 lines
2.6 KiB
Go

package common
import (
"context"
"errors"
"testing"
"github.com/perfect-panel/server/internal/model/user"
"github.com/stretchr/testify/require"
)
func TestResolvePurchaseRoute(t *testing.T) {
ctx := context.Background()
t.Run("single mode disabled", func(t *testing.T) {
called := false
decision, err := ResolvePurchaseRoute(ctx, false, 1, 100, func(ctx context.Context, userID int64) (*user.Subscribe, error) {
called = true
return nil, nil
})
require.NoError(t, err)
require.NotNil(t, decision)
require.Equal(t, PurchaseRouteNewPurchase, decision.Route)
require.Equal(t, int64(100), decision.ResolvedSubscribeID)
require.False(t, called)
})
t.Run("single mode but empty user", func(t *testing.T) {
decision, err := ResolvePurchaseRoute(ctx, true, 0, 100, nil)
require.NoError(t, err)
require.NotNil(t, decision)
require.Equal(t, PurchaseRouteNewPurchase, decision.Route)
require.Equal(t, int64(100), decision.ResolvedSubscribeID)
})
t.Run("single mode no anchor", func(t *testing.T) {
decision, err := ResolvePurchaseRoute(ctx, true, 1, 100, func(ctx context.Context, userID int64) (*user.Subscribe, error) {
return nil, nil
})
require.NoError(t, err)
require.NotNil(t, decision)
require.Equal(t, PurchaseRouteNewPurchase, decision.Route)
require.Equal(t, int64(100), decision.ResolvedSubscribeID)
})
t.Run("single mode routed to renewal", func(t *testing.T) {
decision, err := ResolvePurchaseRoute(ctx, true, 1, 100, func(ctx context.Context, userID int64) (*user.Subscribe, error) {
return &user.Subscribe{
Id: 11,
SubscribeId: 100,
OrderId: 7,
Token: "token",
}, nil
})
require.NoError(t, err)
require.NotNil(t, decision)
require.Equal(t, PurchaseRoutePurchaseToRenewal, decision.Route)
require.Equal(t, int64(100), decision.ResolvedSubscribeID)
require.NotNil(t, decision.Anchor)
require.Equal(t, int64(11), decision.Anchor.Id)
})
t.Run("single mode plan mismatch", func(t *testing.T) {
decision, err := ResolvePurchaseRoute(ctx, true, 1, 100, func(ctx context.Context, userID int64) (*user.Subscribe, error) {
return &user.Subscribe{
Id: 11,
SubscribeId: 200,
}, nil
})
require.ErrorIs(t, err, ErrSingleModePlanMismatch)
require.Nil(t, decision)
})
t.Run("single mode anchor query error", func(t *testing.T) {
queryErr := errors.New("query failed")
decision, err := ResolvePurchaseRoute(ctx, true, 1, 100, func(ctx context.Context, userID int64) (*user.Subscribe, error) {
return nil, queryErr
})
require.ErrorIs(t, err, queryErr)
require.Nil(t, decision)
})
}