@Override public void run() { callback.onFailure(e); } });
private void getOrder(int pollingIndex) { try { if (pollingIndex < DELAY_SECONDS.length) { Order order = remote.getOrderSync(orderID); if (order == null || order.getStatus() == Status.PENDING) { if(order != null && pollingIndex == DELAYED_ATTEMPTED_NUMBER){ callback.onResponse(order.status(Status.DELAYED)); } sleep(DELAY_SECONDS[pollingIndex] * SEC_IN_MILLI); getOrder(++pollingIndex); } else { callback.onResponse(order); } } else { callback.onFailure(ErrorUtil.createOrderTimeoutException()); } } catch (final InterruptedException e) { callback.onFailure(toApiException(e)); } }
@Test public void isFirstSpendOrder_True() throws InterruptedException { final CountDownLatch countDownLatch = new CountDownLatch(1); ArgumentCaptor<Callback<Boolean, Void>> isFirstSpendCallback = ArgumentCaptor.forClass(Callback.class); orderRepository.isFirstSpendOrder(new KinCallback<Boolean>() { @Override public void onResponse(Boolean response) { countDownLatch.countDown(); assertEquals(true, response); } @Override public void onFailure(KinEcosystemException exception) { } }); verify(local).isFirstSpendOrder(isFirstSpendCallback.capture()); isFirstSpendCallback.getValue().onResponse(true); countDownLatch.await(500, TimeUnit.MICROSECONDS); }
@Test public void cancelOrder_Failed() throws Exception { KinCallback<Void> cancelOrderCallback = mock(KinCallback.class); ArgumentCaptor<Callback<Void, ApiException>> cancelOrderCapture = ArgumentCaptor.forClass(Callback.class); // Create Order orderRepository.createOrder(order.getOfferId(), openOrderCallback); verify(remote).createOrder(anyString(), createOrderCapture.capture()); createOrderCapture.getValue().onResponse(openOrder); assertEquals(openOrder, orderRepository.getOpenOrder().getValue()); // Cancel Order orderRepository.cancelOrder(offerID, orderID, cancelOrderCallback); verify(remote).cancelOrder(anyString(), cancelOrderCapture.capture()); cancelOrderCapture.getValue().onFailure(getApiException()); verify(cancelOrderCallback).onFailure(any(KinEcosystemException.class)); verify(cancelOrderCallback, never()).onResponse(null); }
@Test public void createOrder_Succeed() { orderRepository.createOrder(offerID, openOrderCallback); verify(remote).createOrder(anyString(), createOrderCapture.capture()); createOrderCapture.getValue().onResponse(openOrder); assertEquals(openOrder, orderRepository.getOpenOrder().getValue()); verify(openOrderCallback).onResponse(openOrder); verify(openOrderCallback, never()).onFailure(any(KinEcosystemException.class)); }
@Override public void run() { callback.onFailure(e); } });
@Test public void submitOrder_Failed() throws Exception { KinCallback<Order> orderCallback = mock(KinCallback.class); ArgumentCaptor<Callback<Order, ApiException>> submitOrderCapture = ArgumentCaptor.forClass(Callback.class); // Create Order orderRepository.createOrder(order.getOfferId(), openOrderCallback); verify(remote).createOrder(anyString(), createOrderCapture.capture()); createOrderCapture.getValue().onResponse(openOrder); assertEquals(openOrder, orderRepository.getOpenOrder().getValue()); // Submit Order orderRepository.submitOrder(order.getOfferId(), "", order.getOrderId(), orderCallback); verify(remote).submitOrder(anyString(), anyString(), submitOrderCapture.capture()); submitOrderCapture.getValue().onFailure(getApiException()); verify(orderCallback).onFailure(any(KinEcosystemException.class)); verify(orderCallback, never()).onResponse(any(Order.class)); assertEquals(Status.FAILED, orderRepository.getOrderWatcher().getValue().getStatus()); assertNull(orderRepository.getOpenOrder().getValue()); }
@Test public void getOffers_Succeed_SavedToCachedList() { KinCallback<OfferList> offerListCallback = mock(KinCallback.class); ArgumentCaptor<Callback<OfferList, ApiException>> getOfferCapture = ArgumentCaptor.forClass(Callback.class); OfferList offerList = getOfferList(); offerRepository.getOffers(offerListCallback); verify(remote).getOffers(getOfferCapture.capture()); getOfferCapture.getValue().onResponse(offerList); assertEquals(1, offerRepository.getCachedOfferList().getOffers().size()); verify(offerListCallback).onResponse(offerList); }
@Override public void run() { callback.onFailure(e); } });
@Test public void getAllOrderHistory_Succeed() { KinCallback<OrderList> orderHistoryCallback = mock(KinCallback.class); ArgumentCaptor<Callback<OrderList, ApiException>> orderHistoryCaptor = ArgumentCaptor.forClass(Callback.class); orderRepository.getAllOrderHistory(orderHistoryCallback); verify(remote).getAllOrderHistory(orderHistoryCaptor.capture()); orderHistoryCaptor.getValue().onResponse(new OrderList().addOrder(order)); OrderList orderList = orderRepository.getAllCachedOrderHistory(); assertNotNull(orderList); verify(orderHistoryCallback).onResponse(orderList); }
@Override public void run() { callback.onFailure(e); } });
@Test public void cancelOrder_Succeed() throws Exception { KinCallback<Void> cancelOrderCallback = mock(KinCallback.class); ArgumentCaptor<Callback<Void, ApiException>> cancelOrderCapture = ArgumentCaptor.forClass(Callback.class); // Create Order orderRepository.createOrder(order.getOfferId(), openOrderCallback); verify(remote).createOrder(anyString(), createOrderCapture.capture()); createOrderCapture.getValue().onResponse(openOrder); assertEquals(openOrder, orderRepository.getOpenOrder().getValue()); // Cancel Order orderRepository.cancelOrder(offerID, orderID, cancelOrderCallback); verify(remote).cancelOrder(anyString(), cancelOrderCapture.capture()); cancelOrderCapture.getValue().onResponse(null); assertNull(orderRepository.getOpenOrder().getValue()); }
@Override public void run() { callback.onFailure(e); } });
@Test public void submitOrder_Succeed_SpendOrder_StatusFailed() throws Exception { KinCallback<Order> orderCallback = mock(KinCallback.class); ArgumentCaptor<Callback<Order, ApiException>> submitOrderCapture = ArgumentCaptor.forClass(Callback.class); ArgumentCaptor<Observer<Payment>> paymentCapture = ArgumentCaptor.forClass(Observer.class); ArgumentCaptor<Callback<Order, ApiException>> getOrderCapture = ArgumentCaptor.forClass(Callback.class); when(order.getOfferType()).thenReturn(OfferType.SPEND); // Create Order orderRepository.createOrder(order.getOfferId(), openOrderCallback); verify(remote).createOrder(anyString(), createOrderCapture.capture()); createOrderCapture.getValue().onResponse(openOrder); assertEquals(openOrder, orderRepository.getOpenOrder().getValue()); // Submit Order orderRepository.submitOrder(order.getOfferId(), "", order.getOrderId(), orderCallback); verify(remote).submitOrder(anyString(), anyString(), submitOrderCapture.capture()); verify(blockchainSource).addPaymentObservable(paymentCapture.capture()); when(order.getStatus()).thenReturn(Status.PENDING); submitOrderCapture.getValue().onResponse(order); verify(orderCallback).onResponse(order); assertEquals(order, orderRepository.getOrderWatcher().getValue()); when(payment.getAmount()).thenReturn(new BigDecimal(-20)); when(payment.getType()).thenReturn(SPEND); paymentCapture.getValue().onChanged(payment); verify(eventLogger, never()).send(any(EarnOrderPaymentConfirmed.class)); verify(remote).getOrder(anyString(), getOrderCapture.capture()); when(order.getStatus()).thenReturn(Status.FAILED); getOrderCapture.getValue().onResponse(order); assertNull(orderRepository.getOpenOrder().getValue()); assertEquals(order, orderRepository.getOrderWatcher().getValue()); }
@Override public void run() { callback.onFailure(e); } });
createOrderCapture.getValue().onResponse(openOrder); assertEquals(openOrder, orderRepository.getOpenOrder().getValue()); submitOrderCapture.getValue().onResponse(order); verify(orderCallback).onResponse(order); assertEquals(order, orderRepository.getOrderWatcher().getValue()); getOrderCapture.getValue().onResponse(order); assertNull(orderRepository.getOpenOrder().getValue()); assertEquals(order, orderRepository.getOrderWatcher().getValue());
@Override public void run() { callback.onFailure(e); } });
createOrderCapture.getValue().onResponse(openOrder); assertEquals(openOrder, orderRepository.getOpenOrder().getValue()); submitOrderCapture.getValue().onResponse(order); verify(orderCallback).onResponse(order); assertEquals(order, orderRepository.getOrderWatcher().getValue()); getOrderCapture.getValue().onResponse(order); assertNull(orderRepository.getOpenOrder().getValue()); assertEquals(order, orderRepository.getOrderWatcher().getValue());
@Override public void run() { callback.onFailure(e); } });
List<Callback<Order, ApiException>> getOrderCallbackList = getOrderCapture.getAllValues(); for (Callback<Order, ApiException> callback : getOrderCallbackList) { callback.onResponse(confirmedOrder);