From 0d690c3d91e79d0a555973235295d1e6f083d9a6 Mon Sep 17 00:00:00 2001 From: edwin Date: Tue, 5 Mar 2024 15:59:04 +0800 Subject: [PATCH] pkg/exchange: add tests for query markets --- .../v2/testdata/get_symbols_request.json | 58 +++++++++++++ .../testdata/get_symbols_request_error.json | 6 ++ pkg/exchange/bitget/exchange_test.go | 87 +++++++++++++++++++ 3 files changed, 151 insertions(+) create mode 100644 pkg/exchange/bitget/bitgetapi/v2/testdata/get_symbols_request.json create mode 100644 pkg/exchange/bitget/bitgetapi/v2/testdata/get_symbols_request_error.json create mode 100644 pkg/exchange/bitget/exchange_test.go diff --git a/pkg/exchange/bitget/bitgetapi/v2/testdata/get_symbols_request.json b/pkg/exchange/bitget/bitgetapi/v2/testdata/get_symbols_request.json new file mode 100644 index 000000000..6c781f930 --- /dev/null +++ b/pkg/exchange/bitget/bitgetapi/v2/testdata/get_symbols_request.json @@ -0,0 +1,58 @@ +{ + "code":"00000", + "msg":"success", + "requestTime":1709620645267, + "data":[ + { + "symbol":"ETHUSDT", + "baseCoin":"ETH", + "quoteCoin":"USDT", + "minTradeAmount":"0", + "maxTradeAmount":"10000000000", + "takerFeeRate":"0.002", + "makerFeeRate":"0.002", + "pricePrecision":"2", + "quantityPrecision":"4", + "quotePrecision":"6", + "status":"online", + "minTradeUSDT":"5", + "buyLimitPriceRatio":"0.05", + "sellLimitPriceRatio":"0.05", + "areaSymbol":"no" + }, + { + "symbol":"BTCUSDT", + "baseCoin":"BTC", + "quoteCoin":"USDT", + "minTradeAmount":"0", + "maxTradeAmount":"10000000000", + "takerFeeRate":"0.002", + "makerFeeRate":"0.002", + "pricePrecision":"2", + "quantityPrecision":"6", + "quotePrecision":"6", + "status":"gray", + "minTradeUSDT":"5", + "buyLimitPriceRatio":"0.05", + "sellLimitPriceRatio":"0.05", + "areaSymbol":"no" + }, + { + "symbol":"SPONGEUSDT", + "baseCoin":"SPONGE", + "quoteCoin":"USDT", + "minTradeAmount":"0", + "maxTradeAmount":"10000000000", + "takerFeeRate":"0.001", + "makerFeeRate":"0.001", + "pricePrecision":"8", + "quantityPrecision":"0", + "quotePrecision":"8", + "status":"offline", + "minTradeUSDT":"5", + "buyLimitPriceRatio":"0.1", + "sellLimitPriceRatio":"0.1", + "areaSymbol":"no" + } + ] +} diff --git a/pkg/exchange/bitget/bitgetapi/v2/testdata/get_symbols_request_error.json b/pkg/exchange/bitget/bitgetapi/v2/testdata/get_symbols_request_error.json new file mode 100644 index 000000000..6bb3bd14f --- /dev/null +++ b/pkg/exchange/bitget/bitgetapi/v2/testdata/get_symbols_request_error.json @@ -0,0 +1,6 @@ +{ + "code":"40018", + "msg":"Invalid IP", + "requestTime":1709620645267, + "data":[] +} diff --git a/pkg/exchange/bitget/exchange_test.go b/pkg/exchange/bitget/exchange_test.go new file mode 100644 index 000000000..78aa79898 --- /dev/null +++ b/pkg/exchange/bitget/exchange_test.go @@ -0,0 +1,87 @@ +package bitget + +import ( + "context" + "math" + "net/http" + "os" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/c9s/bbgo/pkg/fixedpoint" + "github.com/c9s/bbgo/pkg/testing/httptesting" + "github.com/c9s/bbgo/pkg/types" +) + +func TestExchange_QueryMarkets(t *testing.T) { + ex := New("key", "secret", "passphrase") + + t.Run("succeeds", func(t *testing.T) { + transport := &httptesting.MockTransport{} + ex.client.HttpClient.Transport = transport + + f, err := os.ReadFile("bitgetapi/v2/testdata/get_symbols_request.json") + assert.NoError(t, err) + + transport.GET("/api/v2/spot/public/symbols", func(req *http.Request) (*http.Response, error) { + return httptesting.BuildResponseString(http.StatusOK, string(f)), nil + }) + + mkts, err := ex.QueryMarkets(context.Background()) + assert.NoError(t, err) + + expMkts := types.MarketMap{ + "ETHUSDT": types.Market{ + Exchange: types.ExchangeBitget, + Symbol: "ETHUSDT", + LocalSymbol: "ETHUSDT", + PricePrecision: 2, + VolumePrecision: 4, + QuoteCurrency: "USDT", + BaseCurrency: "ETH", + MinNotional: fixedpoint.NewFromInt(5), + MinAmount: fixedpoint.NewFromInt(5), + MinQuantity: fixedpoint.NewFromInt(0), + MaxQuantity: fixedpoint.NewFromInt(10000000000), + StepSize: fixedpoint.NewFromFloat(1.0 / math.Pow10(4)), + TickSize: fixedpoint.NewFromFloat(1.0 / math.Pow10(2)), + MinPrice: fixedpoint.Zero, + MaxPrice: fixedpoint.Zero, + }, + "BTCUSDT": types.Market{ + Exchange: types.ExchangeBitget, + Symbol: "BTCUSDT", + LocalSymbol: "BTCUSDT", + PricePrecision: 2, + VolumePrecision: 6, + QuoteCurrency: "USDT", + BaseCurrency: "BTC", + MinNotional: fixedpoint.NewFromInt(5), + MinAmount: fixedpoint.NewFromInt(5), + MinQuantity: fixedpoint.NewFromInt(0), + MaxQuantity: fixedpoint.NewFromInt(10000000000), + StepSize: fixedpoint.NewFromFloat(1.0 / math.Pow10(6)), + TickSize: fixedpoint.NewFromFloat(1.0 / math.Pow10(2)), + MinPrice: fixedpoint.Zero, + MaxPrice: fixedpoint.Zero, + }, + } + assert.Equal(t, expMkts, mkts) + }) + + t.Run("error", func(t *testing.T) { + transport := &httptesting.MockTransport{} + ex.client.HttpClient.Transport = transport + + f, err := os.ReadFile("bitgetapi/v2/testdata/get_symbols_request_error.json") + assert.NoError(t, err) + + transport.GET("/api/v2/spot/public/symbols", func(req *http.Request) (*http.Response, error) { + return httptesting.BuildResponseString(http.StatusBadRequest, string(f)), nil + }) + + _, err = ex.QueryMarkets(context.Background()) + assert.ErrorContains(t, err, "Invalid IP") + }) +}