Skip to content

Commit fce3ac3

Browse files
authored
Merge pull request #83 from Adyen/release/3.5.0
Release 3.5.0
2 parents ea1ad5a + 89408b1 commit fce3ac3

12 files changed

+453
-4
lines changed

.github/workflows/unit-tests.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ on:
66
- '**'
77
workflow_dispatch:
88

9+
permissions:
10+
contents: read
11+
912
jobs:
1013
build-and-deploy:
1114
runs-on: ubuntu-latest

force-app/main/default/classes/AdyenClient.cls

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ public with sharing class AdyenClient {
3838
httpReq.setMethod('POST');
3939
httpReq.setHeader('X-API-KEY', config.getApiKey());
4040
httpReq.setHeader('Content-Type', 'application/json');
41+
Integer timeout = config.getTimeout();
42+
if (timeout != null) {
43+
httpReq.setTimeout(timeout);
44+
}
4145
httpReq.setBody(request);
4246
return httpReq;
4347
}

force-app/main/default/classes/AdyenConfig.cls

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public with sharing class AdyenConfig {
1313
private String environment;
1414
private String endpoint;
1515
private String apiKey;
16+
private Integer timeout;
1617

1718
@namespaceAccessible
1819
public void setEnvironment(String environment){
@@ -38,4 +39,14 @@ public with sharing class AdyenConfig {
3839
public String getApiKey(){
3940
return this.apiKey;
4041
}
42+
43+
@namespaceAccessible
44+
public void setTimeout(Integer timeout){
45+
this.timeout = timeout;
46+
}
47+
48+
@namespaceAccessible
49+
public Integer getTimeout(){
50+
return this.timeout;
51+
}
4152
}
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
@NamespaceAccessible
2+
public with sharing class WebhookSetupRequest {
3+
4+
@NamespaceAccessible
5+
public String url { get; set; }
6+
7+
@NamespaceAccessible
8+
public String description { get; set; }
9+
10+
@NamespaceAccessible
11+
public Boolean active { get; set; }
12+
13+
@NamespaceAccessible
14+
public String communicationFormat { get; set; }
15+
16+
@NamespaceAccessible
17+
public String type { get; set; }
18+
19+
@NamespaceAccessible
20+
public AdditionalSettings additionalSettings { get; set; }
21+
22+
@NamespaceAccessible
23+
public String encryptionProtocol { get; set; }
24+
25+
@NamespaceAccessible
26+
public String filterMerchantAccountType { get; set; }
27+
28+
@NamespaceAccessible
29+
public List<String> filterMerchantAccounts { get; set; }
30+
31+
@NamespaceAccessible
32+
public Boolean equals(Object obj) {
33+
if (obj == null || !(obj instanceof WebhookSetupRequest)) return false;
34+
35+
WebhookSetupRequest other = (WebhookSetupRequest) obj;
36+
return this.url == other.url
37+
&& this.description == other.description
38+
&& this.active == other.active
39+
&& this.communicationFormat == other.communicationFormat
40+
&& this.type == other.type
41+
&& this.encryptionProtocol == other.encryptionProtocol
42+
&& this.filterMerchantAccountType == other.filterMerchantAccountType
43+
&& (this.filterMerchantAccounts != null ? this.filterMerchantAccounts.equals(other.filterMerchantAccounts) : other.filterMerchantAccounts == null)
44+
&& (this.additionalSettings != null ? this.additionalSettings.equals(other.additionalSettings) : other.additionalSettings == null);
45+
}
46+
47+
@NamespaceAccessible
48+
public Integer hashCode() {
49+
List<Object> requestFields = new List<Object>{
50+
url,
51+
description,
52+
active,
53+
communicationFormat,
54+
type,
55+
encryptionProtocol,
56+
filterMerchantAccountType,
57+
filterMerchantAccounts,
58+
additionalSettings
59+
};
60+
return ApiLibUtils.computeHashCode(requestFields);
61+
}
62+
63+
@NamespaceAccessible
64+
public static WebhookSetupRequest getExample() {
65+
66+
WebhookSetupRequest example = new WebhookSetupRequest();
67+
example.url = 'https://example.com/webhook';
68+
example.active = true;
69+
example.communicationFormat = 'json';
70+
example.type = 'standard';
71+
example.encryptionProtocol = 'TLSv1.3';
72+
example.description = 'Webhook for payment notifications';
73+
example.filterMerchantAccountType = 'includeAccounts';
74+
example.filterMerchantAccounts = new List<String>{'TestMerchantAccount'};
75+
example.additionalSettings = new AdditionalSettings();
76+
example.additionalSettings.includeEventCodes = new List<String>{
77+
AdyenConstants.NOTIFICATION_REQUEST_TYPE_AUTHORISE,
78+
AdyenConstants.NOTIFICATION_REQUEST_TYPE_CAPTURE
79+
};
80+
return example;
81+
}
82+
83+
@NamespaceAccessible
84+
public class AdditionalSettings {
85+
@NamespaceAccessible
86+
public List<String> includeEventCodes { get; set; }
87+
88+
public Boolean equals(Object obj) {
89+
if (obj == null || !(obj instanceof AdditionalSettings)) return false;
90+
AdditionalSettings other = (AdditionalSettings) obj;
91+
return (this.includeEventCodes != null
92+
? this.includeEventCodes.equals(other.includeEventCodes)
93+
: other.includeEventCodes == null);
94+
}
95+
96+
public Integer hashCode() {
97+
return ApiLibUtils.computeHashCode(new List<Object>{ includeEventCodes });
98+
}
99+
}
100+
101+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3+
<apiVersion>63.0</apiVersion>
4+
<status>Active</status>
5+
</ApexClass>
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
@IsTest
2+
private class WebhookSetupRequestTest {
3+
@IsTest
4+
static void getExampleTest() {
5+
WebhookSetupRequest request = WebhookSetupRequest.getExample();
6+
Assert.isNotNull(request);
7+
Assert.isNotNull(request.url);
8+
Assert.isNotNull(request.communicationFormat);
9+
Assert.isNotNull(request.type);
10+
Assert.isNotNull(request.encryptionProtocol);
11+
Assert.isNotNull(request.filterMerchantAccountType);
12+
Assert.isNotNull(request.filterMerchantAccounts);
13+
}
14+
15+
@IsTest
16+
static void testEqualsTrue() {
17+
// Given
18+
WebhookSetupRequest req1 = WebhookSetupRequest.getExample();
19+
WebhookSetupRequest req2 = WebhookSetupRequest.getExample();
20+
21+
// When
22+
Boolean result = req1.equals(req2);
23+
24+
// Then
25+
Assert.isTrue(result, 'Expected both WebhookSetupRequest objects to be equal');
26+
}
27+
28+
@IsTest
29+
static void testEqualsFalse() {
30+
// Given
31+
WebhookSetupRequest req1 = WebhookSetupRequest.getExample();
32+
WebhookSetupRequest req2 = WebhookSetupRequest.getExample();
33+
req2.url = 'https://different-url.com/webhook';
34+
35+
// When
36+
Boolean result = req1.equals(req2);
37+
38+
// Then
39+
Assert.isFalse(result, 'Expected WebhookSetupRequest objects to be different');
40+
}
41+
42+
@IsTest
43+
static void testEqualsFalseWithFilterMerchantAccounts() {
44+
// Given
45+
WebhookSetupRequest req1 = WebhookSetupRequest.getExample();
46+
WebhookSetupRequest req2 = WebhookSetupRequest.getExample();
47+
req2.filterMerchantAccounts = new List<String>{'AnotherAccount'};
48+
49+
// When
50+
Boolean result = req1.equals(req2);
51+
52+
// Then
53+
Assert.isFalse(result, 'Expected WebhookSetupRequest objects to be different due to filterMerchantAccounts');
54+
}
55+
56+
@IsTest
57+
static void testHashCodeSame() {
58+
// Given
59+
WebhookSetupRequest req1 = WebhookSetupRequest.getExample();
60+
WebhookSetupRequest req2 = WebhookSetupRequest.getExample();
61+
62+
// When
63+
Integer hashCode1 = req1.hashCode();
64+
Integer hashCode2 = req2.hashCode();
65+
66+
// Then
67+
Assert.areEqual(hashCode1, hashCode2, 'Expected identical objects to have the same hash code');
68+
}
69+
70+
@IsTest
71+
static void testHashCodeDifferent() {
72+
// Given
73+
WebhookSetupRequest req1 = WebhookSetupRequest.getExample();
74+
WebhookSetupRequest req2 = WebhookSetupRequest.getExample();
75+
req2.url = 'https://different-url.com/webhook';
76+
77+
// When
78+
Integer hashCode1 = req1.hashCode();
79+
Integer hashCode2 = req2.hashCode();
80+
81+
// Then
82+
Assert.areNotEqual(hashCode1, hashCode2, 'Expected different objects to have different hash codes');
83+
}
84+
85+
@IsTest
86+
static void testHashCodeDifferentWithFilterMerchantAccounts() {
87+
// Given
88+
WebhookSetupRequest req1 = WebhookSetupRequest.getExample();
89+
WebhookSetupRequest req2 = WebhookSetupRequest.getExample();
90+
req2.filterMerchantAccounts = new List<String>{'AnotherAccount'};
91+
92+
// When
93+
Integer hashCode1 = req1.hashCode();
94+
Integer hashCode2 = req2.hashCode();
95+
96+
// Then
97+
Assert.areNotEqual(hashCode1, hashCode2, 'Expected different objects to have different hash codes due to filterMerchantAccounts');
98+
}
99+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3+
<apiVersion>63.0</apiVersion>
4+
<status>Active</status>
5+
</ApexClass>
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
@NamespaceAccessible
2+
public with sharing class WebhookSetupResponse {
3+
4+
@NamespaceAccessible
5+
public String id { get; set; }
6+
7+
@NamespaceAccessible
8+
public String url { get; set; }
9+
10+
@NamespaceAccessible
11+
public String description { get; set; }
12+
13+
@NamespaceAccessible
14+
public Boolean active { get; set; }
15+
16+
@NamespaceAccessible
17+
public String communicationFormat { get; set; }
18+
19+
@NamespaceAccessible
20+
public String type { get; set; }
21+
22+
@NamespaceAccessible
23+
public String encryptionProtocol { get; set; }
24+
25+
@NamespaceAccessible
26+
public Boolean hasError { get; set; }
27+
28+
@NamespaceAccessible
29+
public AdditionalSettings additionalSettings { get; set; }
30+
31+
@NamespaceAccessible
32+
public String filterMerchantAccountType { get; set; }
33+
34+
@NamespaceAccessible
35+
public List<String> filterMerchantAccounts { get; set; }
36+
37+
@NamespaceAccessible
38+
public Boolean equals(Object obj) {
39+
if (obj == null || !(obj instanceof WebhookSetupResponse)) return false;
40+
41+
WebhookSetupResponse other = (WebhookSetupResponse) obj;
42+
return this.id == other.id
43+
&& this.url == other.url
44+
&& this.description == other.description
45+
&& this.active == other.active
46+
&& this.communicationFormat == other.communicationFormat
47+
&& this.type == other.type
48+
&& this.encryptionProtocol == other.encryptionProtocol
49+
&& this.hasError == other.hasError
50+
&& this.filterMerchantAccountType == other.filterMerchantAccountType
51+
&& (this.filterMerchantAccounts != null ? this.filterMerchantAccounts.equals(other.filterMerchantAccounts) : other.filterMerchantAccounts == null)
52+
&& (this.additionalSettings != null ? this.additionalSettings.equals(other.additionalSettings) : other.additionalSettings == null);
53+
}
54+
55+
56+
@NamespaceAccessible
57+
public Integer hashCode() {
58+
List<Object> responseFields = new List<Object>{
59+
id,
60+
url,
61+
description,
62+
active,
63+
communicationFormat,
64+
type,
65+
encryptionProtocol,
66+
hasError,
67+
additionalSettings,
68+
filterMerchantAccountType,
69+
filterMerchantAccounts
70+
};
71+
return ApiLibUtils.computeHashCode(responseFields);
72+
}
73+
74+
@NamespaceAccessible
75+
public static WebhookSetupResponse getExample() {
76+
WebhookSetupResponse example = new WebhookSetupResponse();
77+
example.id = 'WS123456789';
78+
example.url = 'https://example.com/webhook';
79+
example.description = 'Webhook for payment notifications';
80+
example.active = true;
81+
example.communicationFormat = 'json';
82+
example.type = 'standard';
83+
example.encryptionProtocol = 'TLSv1.3';
84+
example.hasError = false;
85+
example.filterMerchantAccountType = 'includeAccounts';
86+
example.filterMerchantAccounts = new List<String>{'TestMerchantAccount'};
87+
88+
example.additionalSettings = new AdditionalSettings();
89+
example.additionalSettings.includeEventCodes = new List<String>{
90+
AdyenConstants.NOTIFICATION_REQUEST_TYPE_AUTHORISE,
91+
AdyenConstants.NOTIFICATION_REQUEST_TYPE_CAPTURE
92+
};
93+
94+
return example;
95+
}
96+
97+
@NamespaceAccessible
98+
public class AdditionalSettings {
99+
@NamespaceAccessible
100+
public List<String> includeEventCodes { get; set; }
101+
102+
@NamespaceAccessible
103+
public List<String> excludeEventCodes { get; set; }
104+
105+
public Boolean equals(Object obj) {
106+
if (obj == null || !(obj instanceof AdditionalSettings)) return false;
107+
AdditionalSettings other = (AdditionalSettings) obj;
108+
Boolean includeCodesEqual = (this.includeEventCodes != null ? this.includeEventCodes.equals(other.includeEventCodes) : other.includeEventCodes == null);
109+
Boolean excludeCodesEqual = (this.excludeEventCodes != null ? this.excludeEventCodes.equals(other.excludeEventCodes) : other.excludeEventCodes == null);
110+
111+
return includeCodesEqual && excludeCodesEqual;
112+
}
113+
114+
public Integer hashCode() {
115+
return ApiLibUtils.computeHashCode(new List<Object>{ includeEventCodes, excludeEventCodes });
116+
}
117+
118+
}
119+
120+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3+
<apiVersion>63.0</apiVersion>
4+
<status>Active</status>
5+
</ApexClass>

0 commit comments

Comments
 (0)