@Override protected GetPurchasesRequest makeContinuationRequest(@Nonnull BasePurchasesRequest request, @Nonnull String continuationToken) { return new GetPurchasesRequest((GetPurchasesRequest) request, continuationToken); } }
@Override public int getPurchases(@Nonnull final String product, @Nullable final String continuationToken, @Nonnull RequestListener<Purchases> listener) { Check.isNotEmpty(product); return runWhenConnected(new GetPurchasesRequest(product, continuationToken, mConfiguration.getPurchaseVerifier()), wrapListener(listener), mTag); }
@Override public int isPurchased(@Nonnull final String product, @Nonnull final String sku, @Nonnull final RequestListener<Boolean> listener) { Check.isNotEmpty(sku); final IsPurchasedListener isPurchasedListener = new IsPurchasedListener(sku, listener); final GetPurchasesRequest request = new GetPurchasesRequest(product, null, mConfiguration.getPurchaseVerifier()); isPurchasedListener.mRequest = request; return runWhenConnected(request, wrapListener(isPurchasedListener), mTag); }
@Override public void onSuccess(@Nonnull Purchases purchases) { final Purchase purchase = purchases.getPurchase(mSku); if (purchase != null) { mListener.onSuccess(purchase.state == Purchase.State.PURCHASED); return; } if (purchases.continuationToken == null) { mListener.onSuccess(false); return; } mRequest = new GetPurchasesRequest(mRequest, purchases.continuationToken); runWhenConnected(mRequest, mTag); }
@Override public int getAllPurchases(@Nonnull String product, @Nonnull RequestListener<Purchases> listener) { Check.isNotEmpty(product); final GetPurchasesRequest request = new GetPurchasesRequest(product, null, mConfiguration.getPurchaseVerifier()); return runWhenConnected(request, wrapListener(new GetAllPurchasesListener(request, listener)), mTag); }
@Override protected GetPurchasesRequest newRequest() { return new GetPurchasesRequest("test", null, Tests.newMockVerifier(true)); }
@Test public void testEmptyListShouldNotBeVerified() throws Exception { final PurchaseVerifier verifier = mock(PurchaseVerifier.class); final GetPurchasesRequest request = new GetPurchasesRequest("test", null, verifier); final RequestListener listener = mock(RequestListener.class); request.setListener(listener); final IInAppBillingService service = mock(IInAppBillingService.class); when(service.getPurchases(anyInt(), anyString(), anyString(), anyString())).thenReturn(newBundle(OK)); request.start(service, "test"); verify(verifier, never()).verify(anyList(), any(RequestListener.class)); verify(listener, times(1)).onSuccess(anyObject()); }
@Test public void testShouldVerifyPurchasesAsynchronously() throws Exception { final GetPurchasesRequest request = new GetPurchasesRequest("test", null, new AsyncPurchaseVerifier()); final PurchasesAwareRequestListener l = new PurchasesAwareRequestListener(); request.setListener(l); final IInAppBillingService service = mock(IInAppBillingService.class); final ArrayList<String> list = new ArrayList<String>(); list.add(PurchaseTest.newJson(0, Purchase.State.REFUNDED)); list.add(PurchaseTest.newJson(1, Purchase.State.REFUNDED)); list.add(PurchaseTest.newJson(2, Purchase.State.CANCELLED)); list.add(PurchaseTest.newJson(3, PURCHASED)); list.add(PurchaseTest.newJson(4, PURCHASED)); list.add(PurchaseTest.newJson(5, PURCHASED)); list.add(PurchaseTest.newJson(6, PURCHASED)); final Bundle bundle = newBundle(OK); bundle.putStringArrayList(Purchases.BUNDLE_DATA_LIST, list); when(service.getPurchases(anyInt(), anyString(), anyString(), anyString())).thenReturn(bundle); request.start(service, "test"); assertNotNull(l.mPurchases); assertTrue(l.mPurchases.list.size() == 4); }
@Test public void testShouldHaveDifferentCacheKeys() throws Exception { final GetPurchasesRequest oldRequest = newRequest(); final GetPurchasesRequest newRequest1 = new GetPurchasesRequest(oldRequest, "second"); final GetPurchasesRequest newRequest2 = new GetPurchasesRequest(oldRequest, "third"); assertNotEquals(oldRequest.getCacheKey(), newRequest1.getCacheKey()); assertNotEquals(newRequest1.getCacheKey(), newRequest2.getCacheKey()); }
@Test public void testShouldCreateFromOldRequest() throws Exception { final GetPurchasesRequest oldRequest = new GetPurchasesRequest("test", "first", Tests.newMockVerifier(true)); final GetPurchasesRequest newRequest = new GetPurchasesRequest(oldRequest, "second"); assertEquals("second", newRequest.getContinuationToken()); assertEquals("test", newRequest.getProduct()); assertSame(oldRequest.getListener(), newRequest.getListener()); }