private void onChanged() { for (Observer observer : observers.get()) { observer.onChanged(value.get()); } }
@Override public void addBalanceObserver(@NonNull Observer<Balance> observer, boolean startSSE) { balance.addObserver(observer); observer.onChanged(balance.getValue()); if (startSSE) { incrementBalanceSSECount(); } }
@Test public void test_Update_Balance() throws Exception { Balance balance = new Balance(); balanceObserverCaptor.getValue().onChanged(balance); verify(balanceView).updateBalance(0); balance.setAmount(new BigDecimal(30)); balanceObserverCaptor.getValue().onChanged(balance); verify(balanceView).updateBalance(30); }
@Test public void test_VisibleScreen_OrderHistory_Status_Completed() throws Exception { when(order.getOfferType()).thenReturn(OfferType.EARN); // doesn't really matter when(order.getOrigin()).thenReturn(Origin.MARKETPLACE); // Update status to COMPLETED when(order.getStatus()).thenReturn(Status.PENDING); orderObserverCaptor.getValue().onChanged(order); when(order.getStatus()).thenReturn(Status.COMPLETED); orderObserverCaptor.getValue().onChanged(order); InOrder inOrder = Mockito.inOrder(balanceView); balancePresenter.visibleScreen(ORDER_HISTORY); inOrder.verify(balanceView).clearSubTitle(); } }
@Test public void test_Subtitle_Pending_Earn() throws Exception { when(order.getOfferType()).thenReturn(OfferType.EARN); when(order.getOrigin()).thenReturn(Origin.MARKETPLACE); when(order.getStatus()).thenReturn(Status.PENDING); when(order.getAmount()).thenReturn(30); orderObserverCaptor.getValue().onChanged(order); verify(balanceView).updateSubTitle(30, PENDING, EARN); }
@Test public void test_VisibleScreen_Marketplace_Status_Completed() throws Exception { when(order.getOfferType()).thenReturn(OfferType.EARN); // doesn't really matter when(order.getOrigin()).thenReturn(Origin.MARKETPLACE); // Update status to COMPLETED when(order.getStatus()).thenReturn(Status.PENDING); orderObserverCaptor.getValue().onChanged(order); when(order.getStatus()).thenReturn(Status.COMPLETED); orderObserverCaptor.getValue().onChanged(order); InOrder inOrder = Mockito.inOrder(balanceView); balancePresenter.visibleScreen(MARKETPLACE); inOrder.verify(balanceView).setWelcomeSubtitle(); }
@Test public void test_Subtitle_NOT_Pending_Earn_Current_Order() throws Exception { when(order.getOfferType()).thenReturn(OfferType.EARN); when(order.getOrigin()).thenReturn(Origin.MARKETPLACE); when(order.getAmount()).thenReturn(30); // Set current order, for every new pending. when(order.getStatus()).thenReturn(Status.PENDING); orderObserverCaptor.getValue().onChanged(order); when(order.getStatus()).thenReturn(Status.COMPLETED); orderObserverCaptor.getValue().onChanged(order); verify(balanceView).updateSubTitle(30, COMPLETED, EARN); when(order.getStatus()).thenReturn(Status.FAILED); orderObserverCaptor.getValue().onChanged(order); verify(balanceView).updateSubTitle(30, FAILED, EARN); when(order.getStatus()).thenReturn(Status.DELAYED); orderObserverCaptor.getValue().onChanged(order); verify(balanceView).updateSubTitle(30, DELAYED, EARN); }
@Test public void test_Subtitle_Pending_Spend() throws Exception { when(order.getOfferType()).thenReturn(OfferType.SPEND); when(order.getOrigin()).thenReturn(Origin.MARKETPLACE); when(order.getStatus()).thenReturn(Status.PENDING); when(order.getAmount()).thenReturn(30); orderObserverCaptor.getValue().onChanged(order); verify(balanceView).updateSubTitle(30, PENDING, SPEND); }
@Test public void getStartedClicked_AccountNotCreated_ObserverOnChange_AccountCreated_NavigateToMP_AnimationEnded() { ArgumentCaptor<TimerTask> timeoutTask = ArgumentCaptor.forClass(TimerTask.class); ArgumentCaptor<Observer<Integer>> accountStateObserver = ArgumentCaptor.forClass(Observer.class); when(accountManager.isAccountCreated()).thenReturn(false); splashPresenter.getStartedClicked(); verify(timer).schedule(timeoutTask.capture(), anyLong()); verify(accountManager).addAccountStateObserver(accountStateObserver.capture()); verify(splashView).animateLoading(); when(accountManager.isAccountCreated()).thenReturn(true); accountStateObserver.getValue().onChanged(CREATION_COMPLETED); verify(accountManager).removeAccountStateObserver(accountStateObserver.getValue()); verify(timer, times(2)).purge(); verify(splashView, times(0)).navigateToEcosystemActivity(EcosystemExperience.MARKETPLACE); splashPresenter.onAnimationEnded(); verify(splashView).navigateToEcosystemActivity(EcosystemExperience.MARKETPLACE); }
@Test public void getStartedClicked_AccountNotCreated_ObserverOnChange_AccountCreated_NavigateToMP() { ArgumentCaptor<TimerTask> timeoutTask = ArgumentCaptor.forClass(TimerTask.class); ArgumentCaptor<Observer<Integer>> accountStateObserver = ArgumentCaptor.forClass(Observer.class); when(accountManager.isAccountCreated()).thenReturn(false); splashPresenter.getStartedClicked(); verify(timer).schedule(timeoutTask.capture(), anyLong()); verify(accountManager).addAccountStateObserver(accountStateObserver.capture()); verify(splashView).animateLoading(); splashPresenter.onAnimationEnded(); verify(splashView, times(0)).navigateToEcosystemActivity(EcosystemExperience.MARKETPLACE); when(accountManager.isAccountCreated()).thenReturn(true); accountStateObserver.getValue().onChanged(CREATION_COMPLETED); verify(accountManager).removeAccountStateObserver(accountStateObserver.getValue()); verify(timer, times(2)).purge(); verify(splashView).navigateToEcosystemActivity(EcosystemExperience.MARKETPLACE); }
@Test public void getStartedClicked_AccountNotCreated_Retry_ObserverOnChange_ERROR_CancelAndShowTryAgain() { ArgumentCaptor<Observer<Integer>> accountStateObserver = ArgumentCaptor.forClass(Observer.class); when(accountManager.isAccountCreated()).thenReturn(false); splashPresenter.getStartedClicked(); verify(timer).schedule(any(TimerTask.class), anyLong()); verify(accountManager).addAccountStateObserver(accountStateObserver.capture()); verify(splashView).animateLoading(); splashPresenter.onAnimationEnded(); verify(splashView, times(0)).navigateToEcosystemActivity(EcosystemExperience.MARKETPLACE); accountStateObserver.getValue().onChanged(ERROR); verify(accountManager).removeAccountStateObserver(accountStateObserver.getValue()); verify(timer, times(2)).purge(); verify(splashView).showToast(ISplashPresenter.TRY_AGAIN); verify(splashView, times(0)).navigateToEcosystemActivity(EcosystemExperience.MARKETPLACE); }
@Test public void test_Subtitle_NOT_Pending_Earn_NOT_Current_Order() throws Exception { InOrder updateSubtitleInOrder = inOrder(balanceView); // Set current order, for every new pending. when(order.getOfferType()).thenReturn(OfferType.EARN); when(order.getOrigin()).thenReturn(Origin.MARKETPLACE); when(order.getAmount()).thenReturn(30); when(order.getStatus()).thenReturn(Status.PENDING); orderObserverCaptor.getValue().onChanged(order); // Create another order Order newOrder = new Order().orderId("second"); when(order.getStatus()).thenReturn(Status.COMPLETED); orderObserverCaptor.getValue().onChanged(newOrder); when(order.getStatus()).thenReturn(Status.FAILED); orderObserverCaptor.getValue().onChanged(newOrder); when(order.getStatus()).thenReturn(Status.DELAYED); orderObserverCaptor.getValue().onChanged(newOrder); updateSubtitleInOrder.verify(balanceView).updateSubTitle(30, PENDING, EARN); updateSubtitleInOrder.verify(balanceView, never()).updateSubTitle(anyInt(), anyInt(), anyInt()); }
List<Observer<Payment>> observersList = paymentCapture.getAllValues(); for (Observer<Payment> observer : observersList) { observer.onChanged(payment);
paymentCapture.getValue().onChanged(payment);
@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()); }
paymentCapture.getValue().onChanged(payment);
List<Observer<Payment>> observersList = paymentCapture.getAllValues(); for (Observer<Payment> observer : observersList) { observer.onChanged(payment);