package org.knowm.xchange.btcmarkets.dto;
import static org.fest.assertions.api.Assertions.assertThat;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import org.knowm.xchange.btcmarkets.BTCMarketsAdapters;
import org.knowm.xchange.btcmarkets.dto.account.BTCMarketsBalance;
import org.knowm.xchange.btcmarkets.dto.marketdata.BTCMarketsOrderBook;
import org.knowm.xchange.btcmarkets.dto.marketdata.BTCMarketsTicker;
import org.knowm.xchange.btcmarkets.dto.trade.BTCMarketsOrders;
import org.knowm.xchange.btcmarkets.dto.trade.BTCMarketsTradeHistory;
import org.knowm.xchange.currency.Currency;
import org.knowm.xchange.currency.CurrencyPair;
import org.knowm.xchange.dto.Order;
import org.knowm.xchange.dto.account.Wallet;
import org.knowm.xchange.dto.marketdata.OrderBook;
import org.knowm.xchange.dto.marketdata.Ticker;
import org.knowm.xchange.dto.trade.OpenOrders;
import org.knowm.xchange.dto.trade.UserTrade;
public class BTCMarketsAdaptersTest extends BTCMarketsDtoTestSupport {
@Test
public void shouldAdaptBalances() throws IOException {
final BTCMarketsBalance[] response = parse(BTCMarketsBalance[].class);
Wallet wallet = BTCMarketsAdapters.adaptWallet(Arrays.asList(response));
assertThat(wallet.getBalances()).hasSize(3);
assertThat(wallet.getBalance(Currency.LTC).getTotal()).isEqualTo(new BigDecimal("10.00000000"));
assertThat(wallet.getBalance(Currency.LTC).getAvailable()).isEqualTo(new BigDecimal("10.00000000"));
}
@Test
public void shoudAdaptOrderBook() throws IOException {
final BTCMarketsOrderBook response = parse(BTCMarketsOrderBook.class);
final OrderBook orderBook = BTCMarketsAdapters.adaptOrderBook(response, CurrencyPair.BTC_AUD);
assertThat(orderBook.getTimeStamp().getTime()).isEqualTo(1442997827000L);
assertThat(orderBook.getAsks()).hasSize(135);
assertThat(orderBook.getAsks().get(2).getLimitPrice()).isEqualTo(new BigDecimal("329.41"));
assertThat(orderBook.getAsks().get(2).getTradableAmount()).isEqualTo(new BigDecimal("10.0"));
assertThat(orderBook.getBids()).hasSize(94);
}
@Test
public void shouldAdaptOrders() throws IOException {
final BTCMarketsOrders response = parse(BTCMarketsOrders.class);
final OpenOrders openOrders = BTCMarketsAdapters.adaptOpenOrders(response);
assertThat(openOrders.getOpenOrders()).hasSize(2);
assertThat(openOrders.getOpenOrders().get(1).getId()).isEqualTo("4345675");
assertThat(openOrders.getOpenOrders().get(1).getCurrencyPair()).isEqualTo(CurrencyPair.BTC_AUD);
assertThat(openOrders.getOpenOrders().get(1).getType()).isEqualTo(Order.OrderType.ASK);
assertThat(openOrders.getOpenOrders().get(1).getTimestamp().getTime()).isEqualTo(1378636912705L);
assertThat(openOrders.getOpenOrders().get(1).getLimitPrice()).isEqualTo("130.00000000");
assertThat(openOrders.getOpenOrders().get(1).getTradableAmount()).isEqualTo("0.10000000");
}
@Test
public void shouldAdaptTicker() throws IOException {
final BTCMarketsTicker response = parse(BTCMarketsTicker.class);
final Ticker ticker = BTCMarketsAdapters.adaptTicker(CurrencyPair.BTC_AUD, response);
assertThat(ticker.getBid()).isEqualTo("137.00000000");
assertThat(ticker.getAsk()).isEqualTo("140.00000000");
assertThat(ticker.getLast()).isEqualTo("140.00000000");
assertThat(ticker.getCurrencyPair()).isEqualTo(CurrencyPair.BTC_AUD);
assertThat(ticker.getTimestamp().getTime()).isEqualTo(1378878117000L);
}
@Test
public void shouldAdaptTradeHistory() throws IOException {
final BTCMarketsTradeHistory response = parse(BTCMarketsTradeHistory.class);
final List<UserTrade> userTrades = BTCMarketsAdapters.adaptTradeHistory(response.getTrades(), CurrencyPair.BTC_AUD).getUserTrades();
assertThat(userTrades).hasSize(3);
assertThat(userTrades.get(2).getId()).isEqualTo("45118157");
assertThat(userTrades.get(2).getTimestamp().getTime()).isEqualTo(1442994673684L);
assertThat(userTrades.get(2).getPrice()).isEqualTo("330.00000000");
assertThat(userTrades.get(2).getTradableAmount()).isEqualTo("0.00100000");
assertThat(userTrades.get(2).getType()).isEqualTo(Order.OrderType.BID);
assertThat(userTrades.get(2).getFeeAmount()).isEqualTo("0.00280499");
assertThat(userTrades.get(2).getFeeCurrency()).isEqualTo(Currency.AUD);
assertThat(userTrades.get(2).getCurrencyPair()).isEqualTo(CurrencyPair.BTC_AUD);
assertThat(userTrades.get(1).getType()).isEqualTo(Order.OrderType.ASK);
}
}