Skip to content

Commit f4ba38a

Browse files
authored
added tests for KuCoin (#852)
1 parent 19e4db4 commit f4ba38a

File tree

1 file changed

+181
-0
lines changed

1 file changed

+181
-0
lines changed
Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Threading.Tasks;
5+
using ExchangeSharp;
6+
using FluentAssertions;
7+
using Microsoft.VisualStudio.TestTools.UnitTesting;
8+
9+
namespace ExchangeSharpTests
10+
{
11+
[TestClass]
12+
public sealed class ExchangeKuCoinAPITests
13+
{
14+
private static async Task<ExchangeKuCoinAPI> CreateKuCoinAPI(string response = null)
15+
{
16+
var requestMaker = new MockAPIRequestMaker();
17+
if (response != null)
18+
{
19+
requestMaker.GlobalResponse = response;
20+
}
21+
22+
var api = (await ExchangeAPI.GetExchangeAPIAsync(ExchangeName.KuCoin) as ExchangeKuCoinAPI)!;
23+
api.RequestMaker = requestMaker;
24+
return api;
25+
}
26+
27+
[TestMethod]
28+
public async Task ShouldParseGetTickerResult()
29+
{
30+
var json = @"{
31+
""code"": ""200000"",
32+
""data"": {
33+
""sequence"": ""1545820038784"",
34+
""price"": ""0.07"",
35+
""size"": ""0.001"",
36+
""bestBid"": ""0.069"",
37+
""bestBidSize"": ""0.017"",
38+
""bestAsk"": ""0.07"",
39+
""bestAskSize"": ""0.002""
40+
}
41+
}";
42+
var api = await CreateKuCoinAPI(json);
43+
44+
var ticker = await api.GetTickerAsync("BTC-USDT");
45+
46+
ticker.MarketSymbol.Should().Be("BTC-USDT");
47+
ticker.Ask.Should().Be(0.07m);
48+
ticker.Bid.Should().Be(0.069m);
49+
ticker.Last.Should().Be(0.07m);
50+
ticker.Volume.Should().NotBeNull();
51+
}
52+
53+
[TestMethod]
54+
public async Task ShouldGetOrderBook()
55+
{
56+
var json = @"{
57+
""code"": ""200000"",
58+
""data"": {
59+
""sequence"": ""3262786978"",
60+
""asks"": [
61+
[""0.07"", ""0.002""]
62+
],
63+
""bids"": [
64+
[""0.069"", ""0.017""]
65+
]
66+
}
67+
}";
68+
var api = await CreateKuCoinAPI(json);
69+
70+
var orderBook = await api.GetOrderBookAsync("BTC-USDT");
71+
72+
orderBook.MarketSymbol.Should().Be("BTC-USDT");
73+
orderBook.Asks.First().Value.Price.Should().Be(0.07m);
74+
orderBook.Asks.First().Value.Amount.Should().Be(0.002m);
75+
orderBook.Bids.First().Value.Price.Should().Be(0.069m);
76+
orderBook.Bids.First().Value.Amount.Should().Be(0.017m);
77+
}
78+
79+
[TestMethod]
80+
public async Task ShouldGetRecentTrades()
81+
{
82+
var json = @"{
83+
""code"": ""200000"",
84+
""data"": [
85+
{
86+
""sequence"": ""1545896668571"",
87+
""price"": ""0.07"",
88+
""size"": ""0.004"",
89+
""side"": ""sell"",
90+
""time"": 1545896668571
91+
}
92+
]
93+
}";
94+
var api = await CreateKuCoinAPI(json);
95+
96+
var trades = (await api.GetRecentTradesAsync("BTC-USDT")).ToArray();
97+
98+
trades.Should().HaveCount(1);
99+
trades[0].Price.Should().Be(0.07m);
100+
trades[0].Amount.Should().Be(0.004m);
101+
trades[0].IsBuy.Should().BeFalse();
102+
}
103+
104+
[TestMethod]
105+
public async Task ShouldGetCandles()
106+
{
107+
var json = @"{
108+
""code"": ""200000"",
109+
""data"": [
110+
[
111+
""1545904980"",
112+
""0.058"",
113+
""0.048"",
114+
""0.059"",
115+
""0.049"",
116+
""0.018"",
117+
""0.000945""
118+
]
119+
]
120+
}";
121+
var api = await CreateKuCoinAPI(json);
122+
123+
var candles = (await api.GetCandlesAsync("BTC-USDT", 60, CryptoUtility.UtcNow.Subtract(TimeSpan.FromDays(1)), CryptoUtility.UtcNow)).ToArray();
124+
125+
candles.Should().HaveCount(1);
126+
candles[0].OpenPrice.Should().Be(0.058m);
127+
candles[0].HighPrice.Should().Be(0.059m);
128+
candles[0].LowPrice.Should().Be(0.049m);
129+
candles[0].ClosePrice.Should().Be(0.048m);
130+
candles[0].BaseCurrencyVolume.Should().Be(0.018m);
131+
candles[0].QuoteCurrencyVolume.Should().Be(0.000945m);
132+
}
133+
134+
[TestMethod]
135+
public async Task ShouldGetMarketSymbolsMetadata()
136+
{
137+
var json = @"{
138+
""code"": ""200000"",
139+
""data"": [
140+
{
141+
""symbol"": ""BTC-USDT"",
142+
""name"": ""BTC-USDT"",
143+
""baseCurrency"": ""BTC"",
144+
""quoteCurrency"": ""USDT"",
145+
""feeCurrency"": ""USDT"",
146+
""market"": ""USDS"",
147+
""baseMinSize"": ""0.00001"",
148+
""quoteMinSize"": ""0.1"",
149+
""baseMaxSize"": ""10000000000"",
150+
""quoteMaxSize"": ""99999999"",
151+
""baseIncrement"": ""0.00000001"",
152+
""quoteIncrement"": ""0.000001"",
153+
""priceIncrement"": ""0.1"",
154+
""priceLimitRate"": ""0.1"",
155+
""minFunds"": ""0.1"",
156+
""isMarginEnabled"": true,
157+
""enableTrading"": true,
158+
""st"": false,
159+
""callauctionIsEnabled"": false,
160+
""callauctionPriceFloor"": null,
161+
""callauctionPriceCeiling"": null,
162+
""callauctionFirstStageStartTime"": null,
163+
""callauctionSecondStageStartTime"": null,
164+
""callauctionThirdStageStartTime"": null,
165+
""tradingStartTime"": null
166+
}
167+
]
168+
}";
169+
var api = await CreateKuCoinAPI(json);
170+
171+
var marketSymbolsMetadata = (await api.GetMarketSymbolsMetadataAsync()).ToArray();
172+
173+
marketSymbolsMetadata.Should().HaveCount(1);
174+
marketSymbolsMetadata[0].MarketSymbol.Should().Be("BTC-USDT");
175+
marketSymbolsMetadata[0].BaseCurrency.Should().Be("BTC");
176+
marketSymbolsMetadata[0].QuoteCurrency.Should().Be("USDT");
177+
marketSymbolsMetadata[0].IsActive.Should().BeTrue();
178+
marketSymbolsMetadata[0].IsDelistingCandidate.Should().BeFalse();
179+
}
180+
}
181+
}

0 commit comments

Comments
 (0)