pkg/exchange: add tests for query tickers

This commit is contained in:
edwin 2024-03-05 17:00:09 +08:00
parent 8814323fc6
commit 76b077d8de
4 changed files with 217 additions and 1 deletions

View File

@ -0,0 +1,25 @@
{
"code":"00000",
"msg":"success",
"requestTime":1709626632870,
"data":[
{
"open":"64654.54",
"symbol":"BTCUSDT",
"high24h":"68686.93",
"low24h":"64583.42",
"lastPr":"66554.03",
"quoteVolume":"1963568540.741927",
"baseVolume":"29439.351448",
"usdtVolume":"1963568540.74192678",
"ts":"1709626631127",
"bidPr":"66554",
"askPr":"66554.07",
"bidSz":"0.000237",
"askSz":"0.08228",
"openUtc":"68245.32",
"changeUtc24h":"-0.02478",
"change24h":"0.00153"
}
]
}

View File

@ -0,0 +1,43 @@
{
"code":"00000",
"msg":"success",
"requestTime":1709626632870,
"data":[
{
"open":"64654.54",
"symbol":"BTCUSDT",
"high24h":"68686.93",
"low24h":"64583.42",
"lastPr":"66554.03",
"quoteVolume":"1963568540.741927",
"baseVolume":"29439.351448",
"usdtVolume":"1963568540.74192678",
"ts":"1709626631127",
"bidPr":"66554",
"askPr":"66554.07",
"bidSz":"0.000237",
"askSz":"0.08228",
"openUtc":"68245.32",
"changeUtc24h":"-0.02478",
"change24h":"0.00153"
},
{
"open":"3506.6",
"symbol":"ETHUSDT",
"high24h":"3740",
"low24h":"3461.17",
"lastPr":"3686.95",
"quoteVolume":"873897317.8273",
"baseVolume":"243220.866",
"usdtVolume":"873897317.827294",
"ts":"1709626631726",
"bidPr":"3686.94",
"askPr":"3686.98",
"bidSz":"1.0046",
"askSz":"1.0015",
"openUtc":"3627.67",
"changeUtc24h":"0.01634",
"change24h":"0.03572"
}
]
}

View File

@ -74,7 +74,7 @@ func TestExchange_QueryMarkets(t *testing.T) {
transport := &httptesting.MockTransport{}
ex.client.HttpClient.Transport = transport
f, err := os.ReadFile("bitgetapi/v2/testdata/get_symbols_request_error.json")
f, err := os.ReadFile("bitgetapi/v2/testdata/request_error.json")
assert.NoError(t, err)
transport.GET("/api/v2/spot/public/symbols", func(req *http.Request) (*http.Response, error) {
@ -85,3 +85,151 @@ func TestExchange_QueryMarkets(t *testing.T) {
assert.ErrorContains(t, err, "Invalid IP")
})
}
func TestExchange_QueryTicker(t *testing.T) {
var (
assert = assert.New(t)
ex = New("key", "secret", "passphrase")
url = "/api/v2/spot/market/tickers"
)
t.Run("succeeds", func(t *testing.T) {
transport := &httptesting.MockTransport{}
ex.client.HttpClient.Transport = transport
f, err := os.ReadFile("bitgetapi/v2/testdata/get_ticker_request.json")
assert.NoError(err)
transport.GET(url, func(req *http.Request) (*http.Response, error) {
return httptesting.BuildResponseString(http.StatusOK, string(f)), nil
})
tickers, err := ex.QueryTicker(context.Background(), "BTCUSDT")
assert.NoError(err)
expTicker := &types.Ticker{
Time: types.NewMillisecondTimestampFromInt(1709626631127).Time(),
Volume: fixedpoint.MustNewFromString("29439.351448"),
Last: fixedpoint.MustNewFromString("66554.03"),
Open: fixedpoint.MustNewFromString("64654.54"),
High: fixedpoint.MustNewFromString("68686.93"),
Low: fixedpoint.MustNewFromString("64583.42"),
Buy: fixedpoint.MustNewFromString("66554"),
Sell: fixedpoint.MustNewFromString("66554.07"),
}
assert.Equal(expTicker, tickers)
})
t.Run("unexpected length", func(t *testing.T) {
transport := &httptesting.MockTransport{}
ex.client.HttpClient.Transport = transport
f, err := os.ReadFile("bitgetapi/v2/testdata/get_tickers_request.json")
assert.NoError(err)
transport.GET(url, func(req *http.Request) (*http.Response, error) {
return httptesting.BuildResponseString(http.StatusOK, string(f)), nil
})
_, err = ex.QueryTicker(context.Background(), "BTCUSDT")
assert.ErrorContains(err, "unexpected length of query")
})
t.Run("error", func(t *testing.T) {
transport := &httptesting.MockTransport{}
ex.client.HttpClient.Transport = transport
f, err := os.ReadFile("bitgetapi/v2/testdata/request_error.json")
assert.NoError(err)
transport.GET(url, func(req *http.Request) (*http.Response, error) {
return httptesting.BuildResponseString(http.StatusBadRequest, string(f)), nil
})
_, err = ex.QueryTicker(context.Background(), "BTCUSDT")
assert.ErrorContains(err, "Invalid IP")
})
}
func TestExchange_QueryTickers(t *testing.T) {
var (
assert = assert.New(t)
ex = New("key", "secret", "passphrase")
url = "/api/v2/spot/market/tickers"
expBtcSymbol = "BTCUSDT"
expBtcTicker = types.Ticker{
Time: types.NewMillisecondTimestampFromInt(1709626631127).Time(),
Volume: fixedpoint.MustNewFromString("29439.351448"),
Last: fixedpoint.MustNewFromString("66554.03"),
Open: fixedpoint.MustNewFromString("64654.54"),
High: fixedpoint.MustNewFromString("68686.93"),
Low: fixedpoint.MustNewFromString("64583.42"),
Buy: fixedpoint.MustNewFromString("66554"),
Sell: fixedpoint.MustNewFromString("66554.07"),
}
)
t.Run("succeeds", func(t *testing.T) {
transport := &httptesting.MockTransport{}
ex.client.HttpClient.Transport = transport
f, err := os.ReadFile("bitgetapi/v2/testdata/get_tickers_request.json")
assert.NoError(err)
transport.GET(url, func(req *http.Request) (*http.Response, error) {
return httptesting.BuildResponseString(http.StatusOK, string(f)), nil
})
tickers, err := ex.QueryTickers(context.Background())
assert.NoError(err)
expTickers := map[string]types.Ticker{
expBtcSymbol: expBtcTicker,
"ETHUSDT": {
Time: types.NewMillisecondTimestampFromInt(1709626631726).Time(),
Volume: fixedpoint.MustNewFromString("243220.866"),
Last: fixedpoint.MustNewFromString("3686.95"),
Open: fixedpoint.MustNewFromString("3506.6"),
High: fixedpoint.MustNewFromString("3740"),
Low: fixedpoint.MustNewFromString("3461.17"),
Buy: fixedpoint.MustNewFromString("3686.94"),
Sell: fixedpoint.MustNewFromString("3686.98"),
},
}
assert.Equal(expTickers, tickers)
})
t.Run("succeeds for query one markets", func(t *testing.T) {
transport := &httptesting.MockTransport{}
ex.client.HttpClient.Transport = transport
f, err := os.ReadFile("bitgetapi/v2/testdata/get_ticker_request.json")
assert.NoError(err)
transport.GET(url, func(req *http.Request) (*http.Response, error) {
assert.Contains(req.URL.Query(), "symbol")
assert.Equal(req.URL.Query()["symbol"], []string{expBtcSymbol})
return httptesting.BuildResponseString(http.StatusOK, string(f)), nil
})
tickers, err := ex.QueryTickers(context.Background(), expBtcSymbol)
assert.NoError(err)
expTickers := map[string]types.Ticker{
expBtcSymbol: expBtcTicker,
}
assert.Equal(expTickers, tickers)
})
t.Run("error", func(t *testing.T) {
transport := &httptesting.MockTransport{}
ex.client.HttpClient.Transport = transport
f, err := os.ReadFile("bitgetapi/v2/testdata/request_error.json")
assert.NoError(err)
transport.GET(url, func(req *http.Request) (*http.Response, error) {
return httptesting.BuildResponseString(http.StatusBadRequest, string(f)), nil
})
_, err = ex.QueryTicker(context.Background(), expBtcSymbol)
assert.ErrorContains(err, "Invalid IP")
})
}