@Nonnull static PurchaseVerifier newMockVerifier(final boolean verified) { return mockVerifier(mock(PurchaseVerifier.class), verified); }
@Before public void setUp() throws Exception { mListener = mock(RequestListener.class); mVerifier = mock(PurchaseVerifier.class); Tests.mockVerifier(mVerifier, false); mFlow = new PurchaseFlow(Mockito.mock(IntentStarter.class), 1, mListener, mVerifier); }
@Test public void testShouldFinishSuccessfully() throws Exception { Tests.mockVerifier(mVerifier, true); mFlow.onActivityResult(1, RESULT_OK, newOkIntent()); verify(mListener, never()).onError(anyInt(), any(Exception.class)); verify(mListener).onSuccess(any(Purchase.class)); }
@Test public void testShouldNotCallListenerIfCancelled() throws Exception { Tests.mockVerifier(mVerifier, true); mFlow.cancel(); mFlow.onActivityResult(1, RESULT_OK, newOkIntent()); mFlow.onActivityResult(1, RESULT_OK, newIntent(ACCOUNT_ERROR, "{productId:'test', purchaseTime:1000}", "signature")); verify(mListener, never()).onError(anyInt(), any(Exception.class)); verify(mListener, never()).onSuccess(any(Purchase.class)); } }
@Test public void testOneShotPurchaseFlowShouldBeRemovedOnSuccess() throws Exception { final PurchaseVerifier verifier = mock(PurchaseVerifier.class); Tests.mockVerifier(verifier, true); mBilling.setPurchaseVerifier(verifier); final RequestListener l = mock(RequestListener.class); mCheckout.createOneShotPurchaseFlow(l); mCheckout.onActivityResult(ActivityCheckout.DEFAULT_REQUEST_CODE, Activity.RESULT_OK, newOkIntent()); verify(l).onSuccess(anyObject()); verifyPurchaseFlowDoesntExist(); }
@Test public void testPurchaseWithOneShotPurchaseFlow() throws Exception { final PurchaseVerifier verifier = mock(PurchaseVerifier.class); Tests.mockVerifier(verifier, true); final CountDownLatch verifierWaiter = new CountDownLatch(1); mBilling.setPurchaseVerifier(new PurchaseVerifier() {
@Test public void testShouldErrorIfVerificationFailed() throws Exception { Tests.mockVerifier(mVerifier, false); mFlow.onActivityResult(1, RESULT_OK, newIntent(OK, "{productId:'test', purchaseTime:1000}", "signature")); verifyError(ResponseCodes.WRONG_SIGNATURE, RuntimeException.class); }