Customer customer = Customer.retrieve(userStripeId, requestOptions); if (customer.getSubscriptions() == null) { return ImmutableList.of();
customer = Customer.retrieve(userStripeId, requestOptions); if (customer.getDeleted() == Boolean.TRUE) { customer = Customer.create(customerParams, requestOptions); return Customer.retrieve(userStripeId, requestOptions).getSubscriptions().getData().stream().map(subs -> new UserSubscription( subs.getPlan().getId(),
/** * Retrieve a customer. */ public static Customer retrieve(String id) throws StripeException { return retrieve(id, (RequestOptions) null); }
/** * Retrieve a customer. */ public static Customer retrieve(String id, RequestOptions options) throws StripeException { return retrieve(id, null, options); }
private Customer getCustomerFixture() throws StripeException { final Customer customer = Customer.retrieve(CUSTOMER_ID); resetNetworkSpy(); return customer; }
@Test public void testRetrieve() throws StripeException { final Customer customer = Customer.retrieve(CUSTOMER_ID); assertNotNull(customer); verifyRequest( ApiResource.RequestMethod.GET, String.format("/v1/customers/%s", CUSTOMER_ID) ); }
@Override public void deleteCreditCard(CreditCard creditCard) throws IOException { try { Customer customer = Customer.retrieve(creditCard.getProviderUniqueId(), options); if(customer.getDeleted() == null || !customer.getDeleted()) { DeletedCustomer deletedCustomer = customer.delete(options); } } catch(StripeException e) { ConvertedError converted = convertError(e); // TODO: Throw ErrorCodeException to provide more details throw new LocalizedIOException(e, accessor, "MerchantServicesProvider.deleteCreditCard.notSuccessful"); } } }
@Test public void testUpdate() throws IOException, StripeException { final Customer customer = Customer.retrieve(CUSTOMER_ID); final Card card = getCardFixture(customer); final Map<String, Object> metadata = new HashMap<>(); metadata.put("key", "value"); final Map<String, Object> params = new HashMap<>(); params.put("metadata", metadata); final Card updatedCard = card.update(params); assertNotNull(updatedCard); verifyRequest( ApiResource.RequestMethod.POST, String.format("/v1/customers/%s/sources/%s", customer.getId(), card.getId()), params ); }
@Test public void testVerify() throws IOException, StripeException { final Customer customer = Customer.retrieve(CUSTOMER_ID); final BankAccount bankAccount = getBankAccountFixture(customer); final List<Integer> values = new ArrayList<>(); values.add(32); values.add(45); final Map<String, Object> params = new HashMap<>(); params.put("amounts", values); final BankAccount verifiedBankAccount = (BankAccount) bankAccount.verify(params); assertNotNull(verifiedBankAccount); verifyRequest( ApiResource.RequestMethod.POST, String.format("/v1/customers/%s/sources/%s/verify", customer.getId(), bankAccount.getId()), params ); } }
@Override public void updateCreditCard(CreditCard creditCard) throws IOException { // Update the Customer Map<String,Object> updateCustomerParams = new HashMap<String,Object>(); addCustomerParams(creditCard, true, updateCustomerParams); // Update the default Card Map<String,Object> updateCardParams = new HashMap<String,Object>(); addCardParams(creditCard, true, updateCardParams); try { Customer customer = Customer.retrieve(creditCard.getProviderUniqueId(), options); customer.update(updateCustomerParams, options); CustomerCardCollection cards = customer.getCards(); Card defaultCard = cards.retrieve(customer.getDefaultCard(), options); defaultCard.update(updateCardParams, options); } catch(StripeException e) { ConvertedError converted = convertError(e); // TODO: Throw ErrorCodeException to provide more details throw new LocalizedIOException(e, accessor, "MerchantServicesProvider.updateCreditCardNumberAndExpiration.notSuccessful"); } }
@Override public void updateCreditCardExpiration( CreditCard creditCard, byte expirationMonth, short expirationYear ) throws IOException { // Update the default Card Map<String,Object> updateParams = new HashMap<String,Object>(); addParam(true, updateParams, "exp_month", expirationMonth); addParam(true, updateParams, "exp_year", expirationYear); try { Customer customer = Customer.retrieve(creditCard.getProviderUniqueId(), options); CustomerCardCollection cards = customer.getCards(); Card defaultCard = cards.retrieve(customer.getDefaultCard(), options); defaultCard.update(updateParams, options); } catch(StripeException e) { ConvertedError converted = convertError(e); // TODO: Throw ErrorCodeException to provide more details throw new LocalizedIOException(e, accessor, "MerchantServicesProvider.updateCreditCardExpiration.notSuccessful"); } }
@Test public void testCreate() throws IOException, StripeException { final Customer customer = Customer.retrieve(CUSTOMER_ID); final Map<String, Object> params = new HashMap<>(); params.put("source", "btok_123"); // stripe-mock does not always return a Bank Account so we have to mock stubRequest( ApiResource.RequestMethod.POST, String.format("/v1/customers/%s/sources", customer.getId()), params, BankAccount.class, getResourceAsString("/api_fixtures/bank_account.json") ); final BankAccount bankAccount = (BankAccount) customer.getSources().create(params); assertNotNull(bankAccount); verifyRequest( ApiResource.RequestMethod.POST, String.format("/v1/customers/%s/sources", customer.getId()), params ); }
@Test public void testCreate() throws IOException, StripeException { final Customer customer = Customer.retrieve(CUSTOMER_ID); final Map<String, Object> params = new HashMap<>(); params.put("source", "btok_123"); // stripe-mock returns a BankAccount instance instead of a Card stubRequest( ApiResource.RequestMethod.POST, String.format("/v1/customers/%s/sources", customer.getId()), params, Card.class, getResourceAsString("/api_fixtures/card.json") ); final Card card = (Card) customer.getSources().create(params); assertNotNull(card); verifyRequest( ApiResource.RequestMethod.POST, String.format("/v1/customers/%s/sources", customer.getId()), params ); }
@Test public void testUpdate() throws IOException, StripeException { final Customer customer = Customer.retrieve(CUSTOMER_ID); final BankAccount bankAccount = getBankAccountFixture(customer); final Map<String, Object> metadata = new HashMap<>(); metadata.put("key", "value"); final Map<String, Object> params = new HashMap<>(); params.put("metadata", metadata); // stripe-mock returns a Card instance instead of a BankAccount stubRequest( ApiResource.RequestMethod.POST, String.format("/v1/customers/%s/sources/%s", customer.getId(), bankAccount.getId()), params, BankAccount.class, getResourceAsString("/api_fixtures/bank_account.json") ); final BankAccount updatedBankAccount = bankAccount.update(params); assertNotNull(updatedBankAccount); verifyRequest( ApiResource.RequestMethod.POST, String.format("/v1/customers/%s/sources/%s", customer.getId(), bankAccount.getId()), params ); }
@Test public void testList() throws IOException, StripeException { final Customer customer = Customer.retrieve(CUSTOMER_ID); final Map<String, Object> params = new HashMap<>(); params.put("object", "card"); params.put("limit", 1); // stripe-mock doesn't handle this, so we stub the request final Card stubbedCard = getCardFixture(customer); final ExternalAccountCollection stubbedCollection = new ExternalAccountCollection(); final List<ExternalAccount> stubbedData = new ArrayList<>(); stubbedData.add(stubbedCard); stubbedCollection.setData(stubbedData); stubRequest( ApiResource.RequestMethod.GET, String.format("/v1/customers/%s/sources", customer.getId()), params, ExternalAccountCollection.class, stubbedCollection.toJson() ); final ExternalAccountCollection externalAccounts = customer.getSources().list(params); assertNotNull(externalAccounts); assertEquals(1, externalAccounts.getData().size()); verifyRequest( ApiResource.RequestMethod.GET, String.format("/v1/customers/%s/sources", customer.getId()) ); final Card card = (Card) externalAccounts.getData().get(0); assertNotNull(card); }
@Test public void testRetrieve() throws IOException, StripeException { final Customer customer = Customer.retrieve(CUSTOMER_ID); // stripe-mock does not always return a Bank Account so we have to mock stubRequest( ApiResource.RequestMethod.GET, String.format("/v1/customers/%s/sources/%s", customer.getId(), BANK_ACCOUNT_ID), null, BankAccount.class, getResourceAsString("/api_fixtures/bank_account.json") ); final BankAccount bankAccount = (BankAccount) customer.getSources().retrieve(BANK_ACCOUNT_ID); assertNotNull(bankAccount); verifyRequest( ApiResource.RequestMethod.GET, String.format("/v1/customers/%s/sources/%s", customer.getId(), BANK_ACCOUNT_ID) ); }
@Test public void testRetrieve() throws IOException, StripeException { final Customer customer = Customer.retrieve(CUSTOMER_ID); // stripe-mock returns a BankAccount instance instead of a Card stubRequest( ApiResource.RequestMethod.GET, String.format("/v1/customers/%s/sources/%s", customer.getId(), CARD_ID), null, Card.class, getResourceAsString("/api_fixtures/card.json") ); final Card card = (Card) customer.getSources().retrieve(CARD_ID); assertNotNull(card); verifyRequest( ApiResource.RequestMethod.GET, String.format("/v1/customers/%s/sources/%s", customer.getId(), CARD_ID) ); }
@Test public void testResponseIncluded() throws StripeException { final String idempotencyKey = UUID.randomUUID().toString(); final RequestOptions requestOptions = RequestOptions.builder() .setStripeVersion(Stripe.apiVersion) .setIdempotencyKey(idempotencyKey) .build(); final Customer customer = Customer.create(null, requestOptions); final Customer retrievedCustomer = Customer.retrieve(customer.getId(), requestOptions); final StripeResponse response = retrievedCustomer.getLastResponse(); assertThat(response, instanceOf(StripeResponse.class)); assertEquals(200, response.code()); assertEquals(idempotencyKey, response.idempotencyKey()); assertTrue(response.requestId().startsWith("req_")); assertTrue(response.body().length() > 0); }
@Test public void testDelete() throws IOException, StripeException { final Customer customer = Customer.retrieve(CUSTOMER_ID); final BankAccount bankAccount = getBankAccountFixture(customer); final String deleteBankAccountData = String.format( "{\"id\": \"%s\", \"object\": \"bank_account\", \"deleted\": true}", bankAccount.getId() ); stubRequest( ApiResource.RequestMethod.DELETE, String.format("/v1/customers/%s/sources/%s", customer.getId(), bankAccount.getId()), null, BankAccount.class, deleteBankAccountData ); final BankAccount deletedBankAccount = bankAccount.delete(); assertNotNull(deletedBankAccount); assertTrue(deletedBankAccount.getDeleted()); verifyRequest( ApiResource.RequestMethod.DELETE, String.format("/v1/customers/%s/sources/%s", customer.getId(), bankAccount.getId()) ); }
@Test public void testDelete() throws IOException, StripeException { final Customer customer = Customer.retrieve(CUSTOMER_ID); final Card card = getCardFixture(customer); final String deleteCardData = String.format( "{\"id\": \"%s\", \"object\": \"card\", \"deleted\": true}", card.getId() ); stubRequest( ApiResource.RequestMethod.DELETE, String.format("/v1/customers/%s/sources/%s", customer.getId(), card.getId()), null, Card.class, deleteCardData ); final Card deletedCard = card.delete(); assertNotNull(deletedCard); assertTrue(deletedCard.getDeleted()); verifyRequest( ApiResource.RequestMethod.DELETE, String.format("/v1/customers/%s/sources/%s", customer.getId(), card.getId()) ); } }