@Test(expected = ExchangeException.class)
  public void shouldFailOnUnsuccessfulLimitOrder() throws IOException {
    // given
    BitMarketTradeResponse response =
        new BitMarketTradeResponse(
            false, null, new BitMarketAPILimit(3, 100, 12345000L), 502, "Invalid message hash");

    BitMarketAuthenticated bitMarketAuthenticated = mock(BitMarketAuthenticated.class);
    PowerMockito.when(
            bitMarketAuthenticated.trade(
                Mockito.eq(SPECIFICATION_API_KEY),
                Mockito.any(ParamsDigest.class),
                Mockito.any(SynchronizedValueFactory.class),
                Mockito.eq("BTCAUD"),
                Mockito.eq("sell"),
                Mockito.eq(BigDecimal.ONE),
                Mockito.eq(BigDecimal.TEN)))
        .thenReturn(response);
    Whitebox.setInternalState(tradeService, "bitMarketAuthenticated", bitMarketAuthenticated);

    // when
    tradeService.placeLimitOrder(
        new LimitOrder(
            Order.OrderType.ASK,
            BigDecimal.ONE,
            CurrencyPair.BTC_AUD,
            "12345",
            null,
            BigDecimal.TEN));

    // then
    fail(
        "BitMarketTradeService should throw ExchangeException when place limit order request was unsuccessful");
  }
  // should be changed after order type convertion fix
  @Test
  public void shouldPlaceBuyLimitOrder() throws IOException {
    // given
    BitMarketTradeResponse responseBuy =
        new BitMarketTradeResponse(
            true,
            new BitMarketTrade(
                12345,
                new BitMarketOrder(
                    12345,
                    "BTCAUD",
                    BigDecimal.ONE,
                    new BigDecimal("1.1"),
                    BigDecimal.ZERO,
                    "BUY",
                    1234567890L),
                new BitMarketBalance(createAvailable(), createBlocked())),
            new BitMarketAPILimit(3, 100, 12345000L),
            0,
            null);

    BitMarketAuthenticated bitMarketAuthenticated = mock(BitMarketAuthenticated.class);
    PowerMockito.when(
            bitMarketAuthenticated.trade(
                Mockito.eq(SPECIFICATION_API_KEY),
                Mockito.any(ParamsDigest.class),
                Mockito.any(SynchronizedValueFactory.class),
                Mockito.eq("BTCAUD"),
                Mockito.eq("buy"),
                Mockito.eq(BigDecimal.ONE),
                Mockito.eq(BigDecimal.TEN)))
        .thenReturn(responseBuy);
    Whitebox.setInternalState(tradeService, "bitMarketAuthenticated", bitMarketAuthenticated);

    // when
    String placedBuy =
        tradeService.placeLimitOrder(
            new LimitOrder(
                Order.OrderType.BID,
                BigDecimal.ONE,
                CurrencyPair.BTC_AUD,
                "12345",
                null,
                BigDecimal.TEN));

    // then
    assertThat(placedBuy).isEqualTo("12345");
  }