Some checks failed
Build docker and publish / build (20.15.1) (push) Has been cancelled
83 lines
2.6 KiB
Go
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)
|
|
})
|
|
}
|