mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-14 07:26:47 +00:00
* gateio: risk update and tests (cherry-pick) * Update exchanges/gateio/risk.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update exchanges/gateio/risk.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * ai: nits * Update exchanges/gateio/gateio_types.go Co-authored-by: Gareth Kirwan <gbjkirwan@gmail.com> * gk: nits * Update exchanges/gateio/risk.go Co-authored-by: Gareth Kirwan <gbjkirwan@gmail.com> * gk: paging mr pedantic * Update exchanges/gateio/risk.go Co-authored-by: Adrian Gallagher <adrian.gallagher@thrasher.io> * linter: fix * crank: nits --------- Co-authored-by: Ryan O'Hara-Reid <ryan.oharareid@thrasher.io> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Gareth Kirwan <gbjkirwan@gmail.com> Co-authored-by: Adrian Gallagher <adrian.gallagher@thrasher.io>
179 lines
6.6 KiB
Go
179 lines
6.6 KiB
Go
package gateio
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/thrasher-corp/gocryptotrader/currency"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/sharedtestvalues"
|
|
testexch "github.com/thrasher-corp/gocryptotrader/internal/testing/exchange"
|
|
)
|
|
|
|
func TestGetUnifiedUserRiskUnitDetails(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
sharedtestvalues.SkipTestIfCredentialsUnset(t, e)
|
|
|
|
got, err := e.GetUnifiedUserRiskUnitDetails(t.Context())
|
|
require.NoError(t, err)
|
|
assert.NotEmpty(t, got)
|
|
}
|
|
|
|
func TestGetFuturesRiskTable(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
_, err := e.GetFuturesRiskTable(t.Context(), currency.EMPTYCODE, "")
|
|
require.ErrorIs(t, err, currency.ErrCurrencyCodeEmpty)
|
|
|
|
_, err = e.GetFuturesRiskTable(t.Context(), currency.USDT, "")
|
|
require.ErrorIs(t, err, errTableIDEmpty)
|
|
|
|
// mock HTTP response due to dynamically generated table IDs, which can only be retrieved via authenticated endpoint
|
|
e := new(Exchange)
|
|
require.NoError(t, testexch.Setup(e))
|
|
require.NoError(t, testexch.MockHTTPInstance(e, "/"))
|
|
|
|
got, err := e.GetFuturesRiskTable(t.Context(), currency.USDT, "BTC_USDT_202507040223")
|
|
require.NoError(t, err)
|
|
assert.NotEmpty(t, got)
|
|
}
|
|
|
|
func TestGetFuturesRiskLimitTiers(t *testing.T) {
|
|
t.Parallel()
|
|
_, err := e.GetFuturesRiskLimitTiers(t.Context(), currency.EMPTYCODE, currency.EMPTYPAIR, 0, 0)
|
|
require.ErrorIs(t, err, currency.ErrCurrencyCodeEmpty)
|
|
|
|
_, err = e.GetFuturesRiskLimitTiers(t.Context(), currency.USDT, currency.NewBTCUSDT(), 10, 10)
|
|
require.ErrorIs(t, err, errPagingNotAllowed)
|
|
|
|
_, err = e.GetFuturesRiskLimitTiers(t.Context(), currency.USDT, currency.NewBTCUSDT(), 0, 10)
|
|
require.ErrorIs(t, err, errPagingNotAllowed)
|
|
|
|
got, err := e.GetFuturesRiskLimitTiers(t.Context(), currency.USDT, currency.EMPTYPAIR, 10, 10)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, got)
|
|
|
|
testexch.UpdatePairsOnce(t, e)
|
|
avail, err := e.GetAvailablePairs(asset.USDTMarginedFutures)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, avail)
|
|
|
|
got, err = e.GetFuturesRiskLimitTiers(t.Context(), currency.USDT, avail[0], 0, 0)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, got)
|
|
}
|
|
|
|
func TestGetDeliveryRiskLimitTiers(t *testing.T) {
|
|
t.Parallel()
|
|
_, err := e.GetDeliveryRiskLimitTiers(t.Context(), currency.EMPTYCODE, currency.EMPTYPAIR, 0, 0)
|
|
require.ErrorIs(t, err, currency.ErrCurrencyCodeEmpty)
|
|
|
|
_, err = e.GetDeliveryRiskLimitTiers(t.Context(), currency.USDT, currency.NewBTCUSDT(), 10, 10)
|
|
require.ErrorIs(t, err, errPagingNotAllowed)
|
|
|
|
_, err = e.GetDeliveryRiskLimitTiers(t.Context(), currency.USDT, currency.NewBTCUSDT(), 0, 10)
|
|
require.ErrorIs(t, err, errPagingNotAllowed)
|
|
|
|
got, err := e.GetDeliveryRiskLimitTiers(t.Context(), currency.USDT, currency.EMPTYPAIR, 10, 10)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, got)
|
|
|
|
testexch.UpdatePairsOnce(t, e)
|
|
avail, err := e.GetAvailablePairs(asset.DeliveryFutures)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, avail)
|
|
|
|
got, err = e.GetDeliveryRiskLimitTiers(t.Context(), currency.USDT, avail[0], 0, 0)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, got)
|
|
}
|
|
|
|
func TestDeliveryUpdatePositionRiskLimit(t *testing.T) {
|
|
t.Parallel()
|
|
_, err := e.DeliveryUpdatePositionRiskLimit(t.Context(), currency.EMPTYCODE, currency.EMPTYPAIR, 0)
|
|
require.ErrorIs(t, err, currency.ErrCurrencyCodeEmpty)
|
|
|
|
_, err = e.DeliveryUpdatePositionRiskLimit(t.Context(), currency.USDT, currency.EMPTYPAIR, 0)
|
|
require.ErrorIs(t, err, currency.ErrCurrencyPairEmpty)
|
|
|
|
_, err = e.DeliveryUpdatePositionRiskLimit(t.Context(), currency.USDT, currency.NewBTCUSD(), 0)
|
|
require.ErrorIs(t, err, errInvalidRiskLimit)
|
|
|
|
sharedtestvalues.SkipTestIfCredentialsUnset(t, e, canManipulateRealOrders)
|
|
|
|
testexch.UpdatePairsOnce(t, e)
|
|
avail, err := e.GetAvailablePairs(asset.DeliveryFutures)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, avail)
|
|
|
|
tiers, err := e.GetDeliveryRiskLimitTiers(t.Context(), currency.USDT, avail[0], 0, 0)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, tiers)
|
|
|
|
lowestTierRiskLimit := float64(tiers[0].RiskLimit)
|
|
got, err := e.DeliveryUpdatePositionRiskLimit(request.WithVerbose(t.Context()), currency.USDT, avail[0], lowestTierRiskLimit)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, got)
|
|
}
|
|
|
|
func TestFuturesUpdatePositionRiskLimit(t *testing.T) {
|
|
t.Parallel()
|
|
_, err := e.FuturesUpdatePositionRiskLimit(t.Context(), currency.EMPTYCODE, currency.EMPTYPAIR, 0)
|
|
require.ErrorIs(t, err, currency.ErrCurrencyCodeEmpty)
|
|
|
|
_, err = e.FuturesUpdatePositionRiskLimit(t.Context(), currency.USDT, currency.EMPTYPAIR, 0)
|
|
require.ErrorIs(t, err, currency.ErrCurrencyPairEmpty)
|
|
|
|
_, err = e.FuturesUpdatePositionRiskLimit(t.Context(), currency.USDT, currency.NewBTCUSD(), 0)
|
|
require.ErrorIs(t, err, errInvalidRiskLimit)
|
|
|
|
sharedtestvalues.SkipTestIfCredentialsUnset(t, e, canManipulateRealOrders)
|
|
|
|
testexch.UpdatePairsOnce(t, e)
|
|
avail, err := e.GetAvailablePairs(asset.USDTMarginedFutures)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, avail)
|
|
|
|
tiers, err := e.GetFuturesRiskLimitTiers(t.Context(), currency.USDT, avail[0], 0, 0)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, tiers)
|
|
|
|
lowestTierRiskLimit := float64(tiers[0].RiskLimit)
|
|
got, err := e.FuturesUpdatePositionRiskLimit(request.WithVerbose(t.Context()), currency.USDT, avail[0], lowestTierRiskLimit)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, got)
|
|
assert.Equal(t, lowestTierRiskLimit, got.RiskLimit.Float64())
|
|
}
|
|
|
|
func TestFuturesUpdatePositionRiskLimitDualMode(t *testing.T) {
|
|
t.Parallel()
|
|
_, err := e.FuturesUpdatePositionRiskLimitDualMode(t.Context(), currency.EMPTYCODE, currency.EMPTYPAIR, 0)
|
|
require.ErrorIs(t, err, currency.ErrCurrencyCodeEmpty)
|
|
|
|
_, err = e.FuturesUpdatePositionRiskLimitDualMode(t.Context(), currency.USDT, currency.EMPTYPAIR, 0)
|
|
require.ErrorIs(t, err, currency.ErrCurrencyPairEmpty)
|
|
|
|
_, err = e.FuturesUpdatePositionRiskLimitDualMode(t.Context(), currency.USDT, currency.NewBTCUSD(), 0)
|
|
require.ErrorIs(t, err, errInvalidRiskLimit)
|
|
|
|
sharedtestvalues.SkipTestIfCredentialsUnset(t, e, canManipulateRealOrders)
|
|
|
|
testexch.UpdatePairsOnce(t, e)
|
|
avail, err := e.GetAvailablePairs(asset.USDTMarginedFutures)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, avail)
|
|
|
|
tiers, err := e.GetFuturesRiskLimitTiers(t.Context(), currency.USDT, avail[0], 0, 0)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, tiers)
|
|
|
|
lowestTierRiskLimit := float64(tiers[0].RiskLimit)
|
|
got, err := e.FuturesUpdatePositionRiskLimitDualMode(t.Context(), currency.USDT, avail[0], lowestTierRiskLimit)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, got)
|
|
assert.Equal(t, lowestTierRiskLimit, got.RiskLimit.Float64())
|
|
}
|