Skip to content

Commit 87b13c0

Browse files
committed
fix model deserialization for synchronization errors attribute.
1 parent 764b654 commit 87b13c0

File tree

6 files changed

+126
-24
lines changed

6 files changed

+126
-24
lines changed

src/main/java/com/ibanity/apis/client/products/xs2a/models/Synchronization.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.ibanity.apis.client.products.xs2a.models;
22

3+
import com.ibanity.apis.client.models.IbanityError;
34
import com.ibanity.apis.client.models.IbanityModel;
45
import lombok.*;
56

@@ -19,7 +20,7 @@ public class Synchronization implements IbanityModel {
1920

2021
private UUID id;
2122
@Builder.Default
22-
private List<String> errors = Collections.emptyList();
23+
private List<IbanityError> errors = Collections.emptyList();
2324
private String status;
2425
private String subtype;
2526
private String resourceId;

src/main/resources/log4j2.xml

Lines changed: 0 additions & 18 deletions
This file was deleted.

src/test/java/com/ibanity/apis/client/products/xs2a/services/impl/AccountsServiceImplTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.ibanity.apis.client.http.IbanityHttpClient;
44
import com.ibanity.apis.client.models.IbanityCollection;
5+
import com.ibanity.apis.client.models.IbanityError;
56
import com.ibanity.apis.client.models.IbanityProduct;
67
import com.ibanity.apis.client.products.xs2a.models.Account;
78
import com.ibanity.apis.client.products.xs2a.models.Synchronization;
@@ -23,6 +24,7 @@
2324
import java.time.Instant;
2425
import java.util.UUID;
2526

27+
import static com.google.common.collect.Lists.newArrayList;
2628
import static com.ibanity.apis.client.helpers.IbanityTestHelper.loadFile;
2729
import static java.time.Instant.parse;
2830
import static java.util.Collections.emptyMap;
@@ -127,6 +129,24 @@ void list_forFinancialInstitutions() throws Exception {
127129
assertThat(actual.getPageLimit()).isEqualTo(10);
128130
}
129131

132+
@Test
133+
void list_forErrorInSynchronization() throws Exception {
134+
AccountsReadQuery accountsReadQuery = AccountsReadQuery.builder()
135+
.customerAccessToken(CUSTOMER_ACCESS_TOKEN)
136+
.financialInstitutionId(FINANCIAL_INSTITUTION_ID)
137+
.build();
138+
139+
when(ibanityHttpClient.get(new URI(ACCOUNT_BY_FINANCIAL_INSTITUTION_ENDPOINT + "?limit=10"), emptyMap(), CUSTOMER_ACCESS_TOKEN))
140+
.thenReturn(loadFile("json/accounts_with_sync_errors.json"));
141+
IbanityCollection<Account> actual = accountsService.list(accountsReadQuery);
142+
143+
Account expected = createExpected();
144+
expected.setLatestSynchronization(createSynchronizationError());
145+
146+
assertThat(actual.getItems()).containsExactly(expected);
147+
assertThat(actual.getPageLimit()).isEqualTo(10);
148+
}
149+
130150
@Test
131151
void list() throws Exception {
132152
AccountsReadQuery accountsReadQuery = AccountsReadQuery.builder()
@@ -170,4 +190,20 @@ private Synchronization createSynchronization() {
170190
.updatedAt(Instant.parse("2019-05-09T09:19:37.683Z"))
171191
.build();
172192
}
193+
194+
private Synchronization createSynchronizationError() {
195+
return Synchronization.builder()
196+
.id(SYNCHRONIZATION_ID)
197+
.resourceId(ACCOUNT_ID.toString())
198+
.resourceType("account")
199+
.status("error")
200+
.errors(newArrayList(IbanityError.builder()
201+
.code("authorizationInvalid")
202+
.detail("The authorization is invalid, you should ask the customer to reauthorize the account")
203+
.build()))
204+
.subtype("accountDetails")
205+
.createdAt(parse("2019-05-09T09:19:37.683Z"))
206+
.updatedAt(parse("2019-05-09T09:19:37.683Z"))
207+
.build();
208+
}
173209
}

src/test/java/com/ibanity/apis/client/products/xs2a/services/impl/SynchronizationServiceImplTest.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.ibanity.apis.client.helpers.IbanityTestHelper;
44
import com.ibanity.apis.client.http.IbanityHttpClient;
55
import com.ibanity.apis.client.jsonapi.RequestApiModel;
6+
import com.ibanity.apis.client.models.IbanityError;
67
import com.ibanity.apis.client.models.IbanityProduct;
78
import com.ibanity.apis.client.products.xs2a.models.Synchronization;
89
import com.ibanity.apis.client.products.xs2a.models.read.SynchronizationReadQuery;
@@ -18,6 +19,7 @@
1819
import java.time.Instant;
1920
import java.util.UUID;
2021

22+
import static com.google.common.collect.Lists.newArrayList;
2123
import static java.util.Collections.emptyMap;
2224
import static java.util.UUID.fromString;
2325
import static org.assertj.core.api.Assertions.assertThat;
@@ -76,7 +78,7 @@ void find() throws Exception {
7678

7779
Synchronization actual = synchronizationService.find(synchronizationReadQuery);
7880

79-
assertThat(actual).isEqualToComparingFieldByField(createExpected("success"));
81+
assertThat(actual).isEqualToComparingFieldByField(createExpected("error"));
8082
}
8183

8284
private RequestApiModel createRequest(SynchronizationReadQuery synchronizationReadQuery) {
@@ -96,14 +98,22 @@ private RequestApiModel createRequest(SynchronizationReadQuery synchronizationRe
9698
}
9799

98100
private Synchronization createExpected(String status) {
99-
return Synchronization.builder()
101+
Synchronization.SynchronizationBuilder synchronizationBuilder = Synchronization.builder()
100102
.id(SYNCHRONIZATION_ID)
101103
.resourceId(ACCOUNT_ID)
102104
.resourceType("account")
103105
.status(status)
104106
.subtype("accountDetails")
105107
.createdAt(Instant.parse("2019-05-09T09:18:58.358Z"))
106-
.updatedAt(Instant.parse("2019-05-09T09:18:59.012Z"))
108+
.updatedAt(Instant.parse("2019-05-09T09:18:59.012Z"));
109+
if ("error".equalsIgnoreCase(status)) {
110+
synchronizationBuilder = synchronizationBuilder.errors(newArrayList(IbanityError.builder()
111+
.code("authorizationInvalid")
112+
.detail("The authorization is invalid, you should ask the customer to reauthorize the account")
113+
.build()));
114+
115+
}
116+
return synchronizationBuilder
107117
.build();
108118
}
109119
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
{
2+
"data": [
3+
{
4+
"attributes": {
5+
"availableBalance": 0,
6+
"currency": "EUR",
7+
"currentBalance": 0,
8+
"description": "Checking account",
9+
"reference": "BE0178572046576544",
10+
"referenceType": "IBAN",
11+
"subtype": "checking"
12+
},
13+
"id": "d6d2a2bc-6607-467b-ac78-86e4e19963ff",
14+
"links": {
15+
"self": "https://api.ibanity.com/xs2a/customer/financial-institutions/43a02473-1023-4b70-a881-6c9b1857e8e6/accounts/d6d2a2bc-6607-467b-ac78-86e4e19963ff"
16+
},
17+
"meta": {
18+
"latestSynchronization": {
19+
"attributes": {
20+
"createdAt": "2019-05-09T09:19:37.683Z",
21+
"errors": [
22+
{
23+
"code": "authorizationInvalid",
24+
"detail": "The authorization is invalid, you should ask the customer to reauthorize the account"
25+
}
26+
],
27+
"resourceId": "d6d2a2bc-6607-467b-ac78-86e4e19963ff",
28+
"resourceType": "account",
29+
"status": "error",
30+
"subtype": "accountDetails",
31+
"updatedAt": "2019-05-09T09:19:37.683Z"
32+
},
33+
"id": "d57d0a33-dcc0-4a45-b517-ca6a9d978fac",
34+
"type": "synchronization"
35+
},
36+
"synchronizedAt": "2019-05-09T09:19:37.683Z"
37+
},
38+
"relationships": {
39+
"financialInstitution": {
40+
"data": {
41+
"id": "43a02473-1023-4b70-a881-6c9b1857e8e6",
42+
"type": "financialInstitution"
43+
},
44+
"links": {
45+
"related": "https://api.ibanity.com/xs2a/financial-institutions/43a02473-1023-4b70-a881-6c9b1857e8e6"
46+
}
47+
},
48+
"transactions": {
49+
"links": {
50+
"meta": {
51+
"type": "transaction"
52+
},
53+
"related": "https://api.ibanity.com/xs2a/customer/financial-institutions/43a02473-1023-4b70-a881-6c9b1857e8e6/accounts/d6d2a2bc-6607-467b-ac78-86e4e19963ff/transactions"
54+
}
55+
}
56+
},
57+
"type": "account"
58+
}
59+
],
60+
"links": {
61+
"first": "https://api.ibanity.com/xs2a/customer/financial-institutions/43a02473-1023-4b70-a881-6c9b1857e8e6/account-information-access-requests/4e4293b4-ffbd-4bc6-a02d-3899d199a6cc/accounts"
62+
},
63+
"meta": {
64+
"paging": {
65+
"limit": 10
66+
}
67+
}
68+
}

src/test/resources/json/synchronization.json

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
{
22
"data": {
33
"attributes": {
4-
"errors": [],
4+
"errors": [
5+
{
6+
"code": "authorizationInvalid",
7+
"detail": "The authorization is invalid, you should ask the customer to reauthorize the account"
8+
}
9+
],
510
"createdAt": "2019-05-09T09:18:58.358Z",
611
"resourceId": "d0027fc6-0097-41f7-a9bb-3c400b5a3e2a",
712
"resourceType": "account",
8-
"status": "success",
13+
"status": "error",
914
"subtype": "accountDetails",
1015
"updatedAt": "2019-05-09T09:18:59.012Z"
1116
},

0 commit comments

Comments
 (0)