Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 35 additions & 30 deletions src/main/java/com/plaid/client/PlaidApiService.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
package com.plaid.client;

import com.plaid.client.request.LinkTokenCreateRequest;
import com.plaid.client.response.LinkTokenCreateResponse;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.POST;

import com.plaid.client.request.AccountsBalanceGetRequest;
import com.plaid.client.request.AccountsGetRequest;
import com.plaid.client.request.AssetReportAuditCopyCreateRequest;
Expand All @@ -21,9 +14,6 @@
import com.plaid.client.request.AuthGetRequest;
import com.plaid.client.request.CategoriesGetRequest;
import com.plaid.client.request.CreditDetailsGetRequest;
import com.plaid.client.request.depositswitch.DepositSwitchCreateRequest;
import com.plaid.client.request.depositswitch.DepositSwitchGetRequest;
import com.plaid.client.request.depositswitch.DepositSwitchTokenCreateRequest;
import com.plaid.client.request.IdentityGetRequest;
import com.plaid.client.request.IncomeGetRequest;
import com.plaid.client.request.InstitutionsGetByIdRequest;
Expand All @@ -32,32 +22,26 @@
import com.plaid.client.request.InvestmentsHoldingsGetRequest;
import com.plaid.client.request.InvestmentsTransactionsGetRequest;
import com.plaid.client.request.ItemAccessTokenInvalidateRequest;
import com.plaid.client.request.ItemAddTokenCreateRequest;
import com.plaid.client.request.ItemApexProcessorTokenCreateRequest;
import com.plaid.client.request.ItemDwollaProcessorTokenCreateRequest;
import com.plaid.client.request.ItemGetRequest;
import com.plaid.client.request.ItemImportRequest;
import com.plaid.client.request.ItemAddTokenCreateRequest;
import com.plaid.client.request.ItemPublicTokenCreateRequest;
import com.plaid.client.request.ItemPublicTokenExchangeRequest;
import com.plaid.client.request.ItemRemoveRequest;
import com.plaid.client.request.ItemStripeTokenCreateRequest;
import com.plaid.client.request.ItemWebhookUpdateRequest;
import com.plaid.client.request.LiabilitiesGetRequest;
import com.plaid.client.request.paymentinitiation.PaymentCreateRequest;
import com.plaid.client.request.paymentinitiation.PaymentGetRequest;
import com.plaid.client.request.paymentinitiation.PaymentListRequest;
import com.plaid.client.request.paymentinitiation.PaymentTokenCreateRequest;
import com.plaid.client.request.paymentinitiation.RecipientCreateRequest;
import com.plaid.client.request.paymentinitiation.RecipientGetRequest;
import com.plaid.client.request.paymentinitiation.RecipientListRequest;
import com.plaid.client.request.LinkTokenCreateRequest;
import com.plaid.client.request.LinkTokenGetRequest;
import com.plaid.client.request.SandboxItemFireWebhookRequest;
import com.plaid.client.request.SandboxItemResetLoginRequest;
import com.plaid.client.request.SandboxItemSetVerificationStatusRequest;
import com.plaid.client.request.SandboxPublicTokenCreateRequest;
import com.plaid.client.request.TransactionsGetRequest;
import com.plaid.client.request.TransactionsRefreshRequest;
import com.plaid.client.request.WebhookVerificationKeyGetRequest;

import com.plaid.client.response.AccountsBalanceGetResponse;
import com.plaid.client.response.AccountsGetResponse;
import com.plaid.client.response.AssetReportAuditCopyCreateResponse;
Expand All @@ -68,9 +52,6 @@
import com.plaid.client.response.AuthGetResponse;
import com.plaid.client.response.CategoriesGetResponse;
import com.plaid.client.response.CreditDetailsGetResponse;
import com.plaid.client.response.depositswitch.DepositSwitchCreateResponse;
import com.plaid.client.response.depositswitch.DepositSwitchGetResponse;
import com.plaid.client.response.depositswitch.DepositSwitchTokenCreateResponse;
import com.plaid.client.response.IdentityGetResponse;
import com.plaid.client.response.IncomeGetResponse;
import com.plaid.client.response.InstitutionsGetByIdResponse;
Expand All @@ -79,31 +60,52 @@
import com.plaid.client.response.InvestmentsHoldingsGetResponse;
import com.plaid.client.response.InvestmentsTransactionsGetResponse;
import com.plaid.client.response.ItemAccessTokenInvalidateResponse;
import com.plaid.client.response.ItemAddTokenCreateResponse;
import com.plaid.client.response.ItemApexProcessorTokenCreateResponse;
import com.plaid.client.response.ItemDwollaProcessorTokenCreateResponse;
import com.plaid.client.response.ItemGetResponse;
import com.plaid.client.response.ItemImportResponse;
import com.plaid.client.response.ItemAddTokenCreateResponse;
import com.plaid.client.response.ItemPublicTokenCreateResponse;
import com.plaid.client.response.ItemPublicTokenExchangeResponse;
import com.plaid.client.response.ItemRemoveResponse;
import com.plaid.client.response.ItemStripeTokenCreateResponse;
import com.plaid.client.response.ItemWebhookUpdateResponse;
import com.plaid.client.response.LiabilitiesGetResponse;
import com.plaid.client.response.paymentinitiation.PaymentCreateResponse;
import com.plaid.client.response.paymentinitiation.PaymentGetResponse;
import com.plaid.client.response.paymentinitiation.PaymentListResponse;
import com.plaid.client.response.paymentinitiation.PaymentTokenCreateResponse;
import com.plaid.client.response.paymentinitiation.RecipientCreateResponse;
import com.plaid.client.response.paymentinitiation.RecipientGetResponse;
import com.plaid.client.response.paymentinitiation.RecipientListResponse;
import com.plaid.client.response.LinkTokenCreateResponse;
import com.plaid.client.response.LinkTokenGetResponse;
import com.plaid.client.response.SandboxItemFireWebhookResponse;
import com.plaid.client.response.SandboxItemResetLoginResponse;
import com.plaid.client.response.SandboxItemSetVerificationStatusResponse;
import com.plaid.client.response.SandboxPublicTokenCreateResponse;
import com.plaid.client.response.TransactionsGetResponse;
import com.plaid.client.response.TransactionsRefreshResponse;
import com.plaid.client.response.WebhookVerificationKeyGetResponse;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.POST;

import com.plaid.client.request.depositswitch.DepositSwitchCreateRequest;
import com.plaid.client.request.depositswitch.DepositSwitchGetRequest;
import com.plaid.client.request.depositswitch.DepositSwitchTokenCreateRequest;
import com.plaid.client.request.paymentinitiation.PaymentCreateRequest;
import com.plaid.client.request.paymentinitiation.PaymentGetRequest;
import com.plaid.client.request.paymentinitiation.PaymentListRequest;
import com.plaid.client.request.paymentinitiation.PaymentTokenCreateRequest;
import com.plaid.client.request.paymentinitiation.RecipientCreateRequest;
import com.plaid.client.request.paymentinitiation.RecipientGetRequest;
import com.plaid.client.request.paymentinitiation.RecipientListRequest;

import com.plaid.client.response.depositswitch.DepositSwitchCreateResponse;
import com.plaid.client.response.depositswitch.DepositSwitchGetResponse;
import com.plaid.client.response.depositswitch.DepositSwitchTokenCreateResponse;
import com.plaid.client.response.paymentinitiation.PaymentCreateResponse;
import com.plaid.client.response.paymentinitiation.PaymentGetResponse;
import com.plaid.client.response.paymentinitiation.PaymentListResponse;
import com.plaid.client.response.paymentinitiation.PaymentTokenCreateResponse;
import com.plaid.client.response.paymentinitiation.RecipientCreateResponse;
import com.plaid.client.response.paymentinitiation.RecipientGetResponse;
import com.plaid.client.response.paymentinitiation.RecipientListResponse;

public interface PlaidApiService {

Expand All @@ -119,6 +121,9 @@ public interface PlaidApiService {
@POST("/link/token/create")
Call<LinkTokenCreateResponse> linkTokenCreate(@Body LinkTokenCreateRequest request);

@POST("/link/token/get")
Call<LinkTokenGetResponse> linkTokenGet(@Body LinkTokenGetRequest request);

@POST("/item/public_token/exchange")
Call<ItemPublicTokenExchangeResponse> itemPublicTokenExchange(
@Body ItemPublicTokenExchangeRequest request);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;

public class LinkTokenCreateRequest extends BaseClientRequest {
private User user;
Expand Down Expand Up @@ -39,11 +40,25 @@ public LinkTokenCreateRequest(

public static class SubtypeFilters {
private List<String> accountSubtypes;
private List<String> subtypes;

public SubtypeFilters(List<String> accountSubtypes) {
this.accountSubtypes = accountSubtypes;
}

@Override public boolean equals(Object other) {
if (this == other) {
return true;
}
if (other == null || getClass() != other.getClass()) {
return false;
}
SubtypeFilters that = (SubtypeFilters) other;
return Objects.equals(accountSubtypes, that.accountSubtypes);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does this do a deep comparison?

}

@Override public int hashCode() {
return Objects.hash(accountSubtypes);
}
}

public static class User {
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/com/plaid/client/request/LinkTokenGetRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.plaid.client.request;

import com.google.gson.annotations.JsonAdapter;
import com.plaid.client.internal.gson.Optional;
import com.plaid.client.internal.gson.OptionalDateTypeAdapterFactory;
import com.plaid.client.request.common.BaseClientRequest;

import java.util.Date;
import java.util.List;
import java.util.Map;

public class LinkTokenGetRequest extends BaseClientRequest {
private String linkToken;

public LinkTokenGetRequest(String linkToken) {
this.linkToken = linkToken;
}
}
67 changes: 67 additions & 0 deletions src/main/java/com/plaid/client/response/LinkTokenGetResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package com.plaid.client.response;

import com.plaid.client.request.LinkTokenCreateRequest;
import java.util.Date;
import java.util.List;
import java.util.Map;

public class LinkTokenGetResponse extends BaseResponse {
private String linkToken;
private Date expiration;
private Date createdAt;
private LinkTokenMetadata metadata;

public String getLinkToken() {
return linkToken;
}

public Date getExpiration() {
return expiration;
}

public LinkTokenMetadata getMetadata() {
return metadata;
}

public Date getCreatedAt() {
return createdAt;
}

public static class LinkTokenMetadata {
private List<String> initialProducts;
private String webhook;
private List<String> countryCodes;
private String language;
private Map<String, LinkTokenCreateRequest.SubtypeFilters> accountFilters;
private String redirectUri;
private String clientName;

public List<String> getInitialProducts() {
return initialProducts;
}

public String getWebhook() {
return webhook;
}

public List<String> getCountryCodes() {
return countryCodes;
}

public String getLanguage() {
return language;
}

public Map<String, LinkTokenCreateRequest.SubtypeFilters> getAccountFilters() {
return accountFilters;
}

public String getRedirectUri() {
return redirectUri;
}

public String getClientName() {
return clientName;
}
}
}
74 changes: 74 additions & 0 deletions src/test/java/com/plaid/client/integration/LinkTokenGetTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package com.plaid.client.integration;

import com.plaid.client.request.LinkTokenCreateRequest;
import com.plaid.client.request.LinkTokenGetRequest;
import com.plaid.client.request.common.Product;
import com.plaid.client.response.ErrorResponse;
import com.plaid.client.response.LinkTokenCreateResponse;
import com.plaid.client.response.LinkTokenGetResponse;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import retrofit2.Response;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

public class LinkTokenGetTest extends AbstractItemIntegrationTest {
@Override
protected List<Product> setupItemProducts() {
return Collections.singletonList(Product.AUTH);
}

@Override
protected String setupItemInstitutionId() {
return TARTAN_BANK_INSTITUTION_ID;
}

@Test
public void testInvalidToken() throws Exception {
Response<LinkTokenGetResponse> response =
client().service().linkTokenGet(
new LinkTokenGetRequest("bad token")).execute();

assertErrorResponse(response, ErrorResponse.ErrorType.INVALID_REQUEST, "INVALID_FIELD");
}

@Test
public void testSuccess() throws Exception {
String clientUserId = Long.toString((new Date()).getTime());
LinkTokenCreateRequest.User user = new LinkTokenCreateRequest.User(clientUserId);
String clientName = "very nice client name";
Map<String, LinkTokenCreateRequest.SubtypeFilters> accountFilters =
new HashMap<>();
accountFilters.put("depository",
new LinkTokenCreateRequest.SubtypeFilters(Arrays.asList("savings")));

LinkTokenCreateRequest request = new LinkTokenCreateRequest(
user,
clientName,
Collections.singletonList("auth"),
Collections.singletonList("US"),
"en").withAccountFilters(accountFilters);
Response<LinkTokenCreateResponse> createResponse =
client().service().linkTokenCreate(
request).execute();

assertSuccessResponse(createResponse);
String linkToken = createResponse.body().getLinkToken();
assertNotNull(linkToken);
Response<LinkTokenGetResponse> getResponse =
client().service().linkTokenGet(
new LinkTokenGetRequest(linkToken)).execute();

assertSuccessResponse(getResponse);
assertEquals(clientName, getResponse.body().getMetadata().getClientName());
assertEquals(Arrays.asList("auth"), getResponse.body().getMetadata().getInitialProducts());
assertEquals(Arrays.asList("US"), getResponse.body().getMetadata().getCountryCodes());
assertEquals(accountFilters, getResponse.body().getMetadata().getAccountFilters());
}
}
Loading