PageRenderTime 61ms CodeModel.GetById 31ms RepoModel.GetById 1ms app.codeStats 0ms

/xchange-bleutrade/src/test/java/org/knowm/xchange/bleutrade/service/BleutradeMarketDataServiceIntegration.java

http://github.com/timmolter/XChange
Java | 383 lines | 271 code | 76 blank | 36 comment | 6 complexity | 87ed695e8accd86ec475bd3dc3c19d0d MD5 | raw file
  1. package org.knowm.xchange.bleutrade.service;
  2. import static org.assertj.core.api.Assertions.assertThat;
  3. import static org.assertj.core.api.Assertions.fail;
  4. import static org.mockito.Matchers.any;
  5. import static org.mockito.Matchers.eq;
  6. import static org.mockito.Mockito.mock;
  7. import static org.mockito.Mockito.when;
  8. import java.io.IOException;
  9. import java.math.BigDecimal;
  10. import java.util.Arrays;
  11. import java.util.Collections;
  12. import java.util.Date;
  13. import java.util.List;
  14. import org.junit.Before;
  15. import org.junit.Test;
  16. import org.junit.runner.RunWith;
  17. import org.knowm.xchange.ExchangeFactory;
  18. import org.knowm.xchange.bleutrade.BleutradeAssert;
  19. import org.knowm.xchange.bleutrade.BleutradeAuthenticated;
  20. import org.knowm.xchange.bleutrade.BleutradeExchange;
  21. import org.knowm.xchange.bleutrade.dto.marketdata.BleutradeCurrenciesReturn;
  22. import org.knowm.xchange.bleutrade.dto.marketdata.BleutradeCurrency;
  23. import org.knowm.xchange.bleutrade.dto.marketdata.BleutradeMarket;
  24. import org.knowm.xchange.bleutrade.dto.marketdata.BleutradeMarketHistoryReturn;
  25. import org.knowm.xchange.bleutrade.dto.marketdata.BleutradeMarketsReturn;
  26. import org.knowm.xchange.bleutrade.dto.marketdata.BleutradeOrderBookReturn;
  27. import org.knowm.xchange.bleutrade.dto.marketdata.BleutradeTicker;
  28. import org.knowm.xchange.bleutrade.dto.marketdata.BleutradeTickerReturn;
  29. import org.knowm.xchange.bleutrade.dto.marketdata.BleutradeTrade;
  30. import org.knowm.xchange.currency.CurrencyPair;
  31. import org.knowm.xchange.dto.marketdata.OrderBook;
  32. import org.knowm.xchange.dto.marketdata.Ticker;
  33. import org.knowm.xchange.dto.marketdata.Trade;
  34. import org.knowm.xchange.dto.marketdata.Trades;
  35. import org.knowm.xchange.dto.trade.LimitOrder;
  36. import org.knowm.xchange.exceptions.ExchangeException;
  37. import org.mockito.Mock;
  38. import org.mockito.runners.MockitoJUnitRunner;
  39. import si.mazi.rescu.ClientConfig;
  40. import si.mazi.rescu.IRestProxyFactory;
  41. @RunWith(MockitoJUnitRunner.class)
  42. public class BleutradeMarketDataServiceIntegration extends BleutradeServiceTestSupport {
  43. private static final Ticker TICKER =
  44. new Ticker.Builder()
  45. .currencyPair(BLEU_BTC_CP)
  46. .last(new BigDecimal("0.00101977"))
  47. .bid(new BigDecimal("0.00100000"))
  48. .ask(new BigDecimal("0.00101977"))
  49. .high(new BigDecimal("0.00105000"))
  50. .low(new BigDecimal("0.00086000"))
  51. .vwap(new BigDecimal("0.00103455"))
  52. .volume(new BigDecimal("2450.97496015"))
  53. .timestamp(new Date(1406632770000L))
  54. .build();
  55. private BleutradeMarketDataService marketDataService;
  56. @Mock private BleutradeAuthenticated bleutrade;
  57. @Before
  58. public void setUp() {
  59. BleutradeExchange exchange =
  60. (BleutradeExchange)
  61. ExchangeFactory.INSTANCE.createExchange(BleutradeExchange.class.getCanonicalName());
  62. exchange.getExchangeSpecification().setUserName(SPECIFICATION_USERNAME);
  63. exchange.getExchangeSpecification().setApiKey(SPECIFICATION_API_KEY);
  64. exchange.getExchangeSpecification().setSecretKey(SPECIFICATION_SECRET_KEY);
  65. IRestProxyFactory restProxyFactory = mock(IRestProxyFactory.class);
  66. when(restProxyFactory.createProxy(
  67. eq(BleutradeAuthenticated.class), any(String.class), any(ClientConfig.class)))
  68. .thenReturn(bleutrade);
  69. marketDataService = new BleutradeMarketDataService(exchange, restProxyFactory);
  70. }
  71. @Test
  72. public void constructor() {
  73. assertThat(marketDataService.apiKey.equals(SPECIFICATION_API_KEY));
  74. }
  75. @Test
  76. public void shouldGetTicker() throws IOException {
  77. // given
  78. BleutradeTickerReturn tickerReturn = new BleutradeTickerReturn();
  79. tickerReturn.setSuccess(true);
  80. tickerReturn.setMessage("test message");
  81. tickerReturn.setResult(expectedBleutradeTicker());
  82. when(bleutrade.getBleutradeTicker("BLEU_BTC")).thenReturn(tickerReturn);
  83. // when
  84. Ticker ticker = marketDataService.getTicker(BLEU_BTC_CP);
  85. // then
  86. assertThat(ticker.toString()).isEqualTo(EXPECTED_BLEUTRADE_TICKER_STR);
  87. BleutradeAssert.assertEquals(ticker, TICKER);
  88. }
  89. @Test(expected = ExchangeException.class)
  90. public void shouldFailOnUnsuccesfulGetTicker() throws IOException {
  91. // given
  92. BleutradeTickerReturn tickerReturn = new BleutradeTickerReturn();
  93. tickerReturn.setSuccess(false);
  94. tickerReturn.setMessage("test message");
  95. tickerReturn.setResult(expectedBleutradeTicker());
  96. when(bleutrade.getBleutradeTicker("BLEU_BTC")).thenReturn(tickerReturn);
  97. // when
  98. marketDataService.getTicker(BLEU_BTC_CP);
  99. // then
  100. fail(
  101. "BleutradeMarketDataService should throw ExchangeException when ticker request was unsuccessful");
  102. }
  103. @Test
  104. public void shouldGetOrderBook() throws IOException {
  105. // given
  106. BleutradeOrderBookReturn orderBookReturn1 = new BleutradeOrderBookReturn();
  107. orderBookReturn1.setSuccess(true);
  108. orderBookReturn1.setMessage("test message");
  109. orderBookReturn1.setResult(
  110. createBleutradeOrderBook(expectedBleutradeLevelBuys(), expectedBleutradeLevelSells()));
  111. BleutradeOrderBookReturn orderBookReturn2 = new BleutradeOrderBookReturn();
  112. orderBookReturn2.setSuccess(true);
  113. orderBookReturn2.setMessage("");
  114. orderBookReturn2.setResult(
  115. createBleutradeOrderBook(Collections.EMPTY_LIST, Collections.EMPTY_LIST));
  116. when(bleutrade.getBleutradeOrderBook("BTC_AUD", "ALL", 30)).thenReturn(orderBookReturn1);
  117. when(bleutrade.getBleutradeOrderBook("BLEU_BTC", "ALL", 50)).thenReturn(orderBookReturn2);
  118. final LimitOrder[] expectedAsks = expectedAsks();
  119. final LimitOrder[] expectedBids = expectedBids();
  120. // when
  121. OrderBook orderBook1 = marketDataService.getOrderBook(CurrencyPair.BTC_AUD, 30);
  122. OrderBook orderBook2 = marketDataService.getOrderBook(BLEU_BTC_CP, "test parameter");
  123. // then
  124. List<LimitOrder> asks = orderBook1.getAsks();
  125. assertThat(asks).hasSize(4);
  126. for (int i = 0; i < asks.size(); i++) {
  127. BleutradeAssert.assertEquals(asks.get(i), expectedAsks[i]);
  128. }
  129. List<LimitOrder> bids = orderBook1.getBids();
  130. assertThat(bids).hasSize(2);
  131. for (int i = 0; i < bids.size(); i++) {
  132. BleutradeAssert.assertEquals(bids.get(i), expectedBids[i]);
  133. }
  134. assertThat(orderBook2.getAsks()).isEmpty();
  135. assertThat(orderBook2.getBids()).isEmpty();
  136. }
  137. @Test(expected = ExchangeException.class)
  138. public void shouldFailOnUnsuccessfulGetOrderBook() throws IOException {
  139. // given
  140. BleutradeOrderBookReturn orderBookReturn = new BleutradeOrderBookReturn();
  141. orderBookReturn.setSuccess(false);
  142. orderBookReturn.setMessage("test message");
  143. orderBookReturn.setResult(
  144. createBleutradeOrderBook(expectedBleutradeLevelBuys(), expectedBleutradeLevelSells()));
  145. when(bleutrade.getBleutradeOrderBook("BLEU_BTC", "ALL", 50)).thenReturn(orderBookReturn);
  146. // when
  147. marketDataService.getOrderBook(BLEU_BTC_CP);
  148. // then
  149. fail(
  150. "BleutradeMarketDataService should throw ExchangeException when order book request was unsuccessful");
  151. }
  152. @Test
  153. public void shouldGetTrades() throws IOException {
  154. // given
  155. final List<BleutradeTrade> expectedBleutradeTrades = expectedBleutradeTrades();
  156. BleutradeMarketHistoryReturn marketHistoryReturn1 = new BleutradeMarketHistoryReturn();
  157. marketHistoryReturn1.setSuccess(true);
  158. marketHistoryReturn1.setMessage("test message");
  159. marketHistoryReturn1.setResult(expectedBleutradeTrades);
  160. BleutradeMarketHistoryReturn marketHistoryReturn2 = new BleutradeMarketHistoryReturn();
  161. marketHistoryReturn2.setSuccess(true);
  162. marketHistoryReturn2.setMessage("");
  163. marketHistoryReturn2.setResult(Collections.EMPTY_LIST);
  164. BleutradeMarketHistoryReturn marketHistoryReturn3 = new BleutradeMarketHistoryReturn();
  165. marketHistoryReturn3.setSuccess(true);
  166. marketHistoryReturn3.setMessage("test message");
  167. marketHistoryReturn3.setResult(Arrays.asList(expectedBleutradeTrades.get(0)));
  168. BleutradeMarketHistoryReturn marketHistoryReturn4 = new BleutradeMarketHistoryReturn();
  169. marketHistoryReturn4.setSuccess(true);
  170. marketHistoryReturn4.setMessage("test message");
  171. marketHistoryReturn4.setResult(Arrays.asList(expectedBleutradeTrades.get(1)));
  172. when(bleutrade.getBleutradeMarketHistory("BTC_AUD", 30)).thenReturn(marketHistoryReturn1);
  173. when(bleutrade.getBleutradeMarketHistory("BTC_AUD", 50)).thenReturn(marketHistoryReturn2);
  174. when(bleutrade.getBleutradeMarketHistory("BTC_AUD", 1)).thenReturn(marketHistoryReturn3);
  175. when(bleutrade.getBleutradeMarketHistory("BTC_AUD", 200)).thenReturn(marketHistoryReturn4);
  176. final Trade[] expectedTrades = expectedTrades();
  177. // when
  178. Trades trades1 = marketDataService.getTrades(CurrencyPair.BTC_AUD, 30);
  179. Trades trades2 = marketDataService.getTrades(CurrencyPair.BTC_AUD, "test parameter");
  180. Trades trades3 = marketDataService.getTrades(CurrencyPair.BTC_AUD, 0);
  181. Trades trades4 = marketDataService.getTrades(CurrencyPair.BTC_AUD, 201);
  182. // then
  183. List<Trade> tradeList = trades1.getTrades();
  184. assertThat(tradeList).hasSize(2);
  185. for (int i = 0; i < tradeList.size(); i++) {
  186. BleutradeAssert.assertEquals(tradeList.get(i), expectedTrades[i]);
  187. }
  188. assertThat(trades2.getTrades()).isEmpty();
  189. assertThat(trades3.getTrades()).hasSize(1);
  190. BleutradeAssert.assertEquals(trades3.getTrades().get(0), expectedTrades[0]);
  191. assertThat(trades4.getTrades()).hasSize(1);
  192. BleutradeAssert.assertEquals(trades4.getTrades().get(0), expectedTrades[1]);
  193. }
  194. @Test(expected = ExchangeException.class)
  195. public void shouldFailOnUnsuccessfulGetTrades() throws IOException {
  196. // given
  197. BleutradeMarketHistoryReturn marketHistoryReturn = new BleutradeMarketHistoryReturn();
  198. marketHistoryReturn.setSuccess(false);
  199. marketHistoryReturn.setMessage("test message");
  200. marketHistoryReturn.setResult(expectedBleutradeTrades());
  201. when(bleutrade.getBleutradeMarketHistory("BLEU_BTC", 50)).thenReturn(marketHistoryReturn);
  202. // when
  203. marketDataService.getTrades(BLEU_BTC_CP);
  204. // then
  205. fail(
  206. "BleutradeMarketDataService should throw ExchangeException when trades request was unsuccessful");
  207. }
  208. @Test
  209. public void shouldGetTickers() throws IOException {
  210. // given
  211. final List<BleutradeTicker> expectedBleutradeTickers = expectedBleutradeTickers();
  212. final String[] expectedBleutradeTickersStr = expectedBleutradeTickersStr();
  213. BleutradeTickerReturn tickerReturn = new BleutradeTickerReturn();
  214. tickerReturn.setSuccess(true);
  215. tickerReturn.setMessage("test message");
  216. tickerReturn.setResult(expectedBleutradeTickers);
  217. when(bleutrade.getBleutradeTickers()).thenReturn(tickerReturn);
  218. // when
  219. List<BleutradeTicker> tickers = marketDataService.getBleutradeTickers();
  220. // then
  221. assertThat(tickers).hasSize(2);
  222. for (int i = 0; i < tickers.size(); i++) {
  223. BleutradeAssert.assertEquals(tickers.get(i), expectedBleutradeTickers.get(i));
  224. assertThat(tickers.get(i).toString()).isEqualTo(expectedBleutradeTickersStr[i]);
  225. }
  226. }
  227. @Test(expected = ExchangeException.class)
  228. public void shouldFailOnUnsuccesfulGetTickers() throws IOException {
  229. // given
  230. BleutradeTickerReturn tickerReturn = new BleutradeTickerReturn();
  231. tickerReturn.setSuccess(false);
  232. tickerReturn.setMessage("test message");
  233. tickerReturn.setResult(expectedBleutradeTickers());
  234. when(bleutrade.getBleutradeTickers()).thenReturn(tickerReturn);
  235. // when
  236. marketDataService.getBleutradeTickers();
  237. // then
  238. fail(
  239. "BleutradeMarketDataService should throw ExchangeException when tickers request was unsuccessful");
  240. }
  241. @Test
  242. public void shouldGetCurrencies() throws IOException {
  243. // given
  244. final List<BleutradeCurrency> expectedBleutradeCurrencies = expectedBleutradeCurrencies();
  245. final String[] expectedBleutradeCurrenciesStr = expectedBleutradeCurrenciesStr();
  246. BleutradeCurrenciesReturn currenciesReturn = new BleutradeCurrenciesReturn();
  247. currenciesReturn.setSuccess(true);
  248. currenciesReturn.setMessage("test message");
  249. currenciesReturn.setResult(expectedBleutradeCurrencies);
  250. when(bleutrade.getBleutradeCurrencies()).thenReturn(currenciesReturn);
  251. // when
  252. List<BleutradeCurrency> currencies = marketDataService.getBleutradeCurrencies();
  253. // then
  254. assertThat(currencies).hasSize(2);
  255. for (int i = 0; i < currencies.size(); i++) {
  256. BleutradeAssert.assertEquals(currencies.get(i), expectedBleutradeCurrencies.get(i));
  257. assertThat(currencies.get(i).toString()).isEqualTo(expectedBleutradeCurrenciesStr[i]);
  258. }
  259. }
  260. @Test(expected = ExchangeException.class)
  261. public void shouldFailOnUnsuccesfulGetCurrencies() throws IOException {
  262. // given
  263. BleutradeCurrenciesReturn currenciesReturn = new BleutradeCurrenciesReturn();
  264. currenciesReturn.setSuccess(false);
  265. currenciesReturn.setMessage("test message");
  266. currenciesReturn.setResult(expectedBleutradeCurrencies());
  267. when(bleutrade.getBleutradeCurrencies()).thenReturn(currenciesReturn);
  268. // when
  269. marketDataService.getBleutradeCurrencies();
  270. // then
  271. fail(
  272. "BleutradeMarketDataService should throw ExchangeException when currencies request was unsuccessful");
  273. }
  274. @Test
  275. public void shouldGetMarkets() throws IOException {
  276. // given
  277. final List<BleutradeMarket> expectedBleutradeMarkets = expectedBleutradeMarkets();
  278. final String[] expectedBleutradeMarketsStr = expectedBleutradeMarketsStr();
  279. BleutradeMarketsReturn marketsReturn = new BleutradeMarketsReturn();
  280. marketsReturn.setSuccess(true);
  281. marketsReturn.setMessage("test message");
  282. marketsReturn.setResult(expectedBleutradeMarkets);
  283. when(bleutrade.getBleutradeMarkets()).thenReturn(marketsReturn);
  284. // when
  285. List<BleutradeMarket> markets = marketDataService.getBleutradeMarkets();
  286. // then
  287. assertThat(markets).hasSize(2);
  288. for (int i = 0; i < markets.size(); i++) {
  289. BleutradeAssert.assertEquals(markets.get(i), expectedBleutradeMarkets.get(i));
  290. assertThat(markets.get(i).toString()).isEqualTo(expectedBleutradeMarketsStr[i]);
  291. }
  292. }
  293. @Test(expected = ExchangeException.class)
  294. public void shouldFailOnUnsuccesfulGetMarkets() throws IOException {
  295. // given
  296. BleutradeMarketsReturn marketsReturn = new BleutradeMarketsReturn();
  297. marketsReturn.setSuccess(false);
  298. marketsReturn.setMessage("test message");
  299. marketsReturn.setResult(expectedBleutradeMarkets());
  300. when(bleutrade.getBleutradeMarkets()).thenReturn(marketsReturn);
  301. // when
  302. marketDataService.getBleutradeMarkets();
  303. // then
  304. fail(
  305. "BleutradeMarketDataService should throw ExchangeException when markets request was unsuccessful");
  306. }
  307. }