Skip to content

Commit 8b2899f

Browse files
PR fixes
1 parent 5fd197b commit 8b2899f

File tree

2 files changed

+92
-28
lines changed

2 files changed

+92
-28
lines changed

Adyen.Test/SerializerTest.cs

Lines changed: 75 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
1-
using System.Collections.Generic;
1+
using System;
2+
using System.Collections.Generic;
23
using System.Text;
34
using Adyen.ApiSerialization;
45
using Adyen.Model.Checkout;
56
using Adyen.Model.TerminalApi;
7+
using Adyen.Model.TerminalApi.Message;
68
using Adyen.Security;
79
using Microsoft.VisualStudio.TestTools.UnitTesting;
810
using Newtonsoft.Json;
911
using Newtonsoft.Json.Serialization;
12+
using PaymentRequest = Adyen.Model.TerminalApi.PaymentRequest;
1013
using PaymentResponse = Adyen.Model.TerminalApi.PaymentResponse;
1114

1215
namespace Adyen.Test
@@ -88,10 +91,17 @@ public void CheckoutSessionResponseCheckForIdTest()
8891
}
8992

9093
[TestMethod]
91-
public void EnsureSaleToPoiMessageSerializationDoesNotDependOnJsonConvertDefaultSettings()
94+
public void SaleToPoiMessageSerializationTest()
9295
{
93-
var saleToPoiMessage = MockPosApiRequest.CreatePosPaymentRequest();
94-
var serializedWithEmptyDefaultSettings = GetSerializedSaleToPoiMessage(saleToPoiMessage);
96+
var saleToPoiMessage = PosPaymentRequest;
97+
var serialized = SerializeSaleToPoiMessage(saleToPoiMessage);
98+
Assert.AreEqual(serialized, ExpectedSaleToPoiMessageJson);
99+
}
100+
101+
[TestMethod]
102+
public void SaleToPoiMessageWithUpdatedJsonConvertDefaultSettingsSerializationTest()
103+
{
104+
var saleToPoiMessage = PosPaymentRequest;
95105

96106
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
97107
{
@@ -103,9 +113,9 @@ public void EnsureSaleToPoiMessageSerializationDoesNotDependOnJsonConvertDefault
103113

104114
try
105115
{
106-
var serializedWithUpdatedDefaultSettings = GetSerializedSaleToPoiMessage(saleToPoiMessage);
116+
var serialized = SerializeSaleToPoiMessage(saleToPoiMessage);
107117

108-
Assert.AreEqual(serializedWithEmptyDefaultSettings, serializedWithUpdatedDefaultSettings);
118+
Assert.AreEqual(serialized, ExpectedSaleToPoiMessageJson);
109119
}
110120
finally
111121
{
@@ -114,10 +124,17 @@ public void EnsureSaleToPoiMessageSerializationDoesNotDependOnJsonConvertDefault
114124
}
115125

116126
[TestMethod]
117-
public void EnsureSaleToPoiMessageSecuredSerializationDoesNotDependOnJsonConvertDefaultSettings()
127+
public void SaleToPoiMessageSecuredSerializationTest()
118128
{
119-
var saleToPoiMessage = MockPosApiRequest.CreatePosPaymentRequest();
120-
var serializedWithEmptyDefaultSettings = GetSerializedSaleToPoiMessageSecured(saleToPoiMessage);
129+
var saleToPoiMessage = PosPaymentRequest;
130+
var serialized = SerializeSaleToPoiMessageSecured(saleToPoiMessage);
131+
Assert.AreEqual(serialized, ExpectedSaleToPoiMessageSecuredJson);
132+
}
133+
134+
[TestMethod]
135+
public void SaleToPoiMessageSecuredWithUpdatedJsonConvertDefaultSettingsSerializationTest()
136+
{
137+
var saleToPoiMessage = PosPaymentRequest;
121138

122139
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
123140
{
@@ -129,9 +146,9 @@ public void EnsureSaleToPoiMessageSecuredSerializationDoesNotDependOnJsonConvert
129146

130147
try
131148
{
132-
var serializedWithUpdatedDefaultSettings = GetSerializedSaleToPoiMessageSecured(saleToPoiMessage);
149+
var serialized = SerializeSaleToPoiMessageSecured(saleToPoiMessage);
133150

134-
Assert.AreEqual(serializedWithEmptyDefaultSettings, serializedWithUpdatedDefaultSettings);
151+
Assert.AreEqual(serialized, ExpectedSaleToPoiMessageSecuredJson);
135152
}
136153
finally
137154
{
@@ -144,13 +161,14 @@ private static string GetSaleToPoiMessage(string online)
144161
return "{\"SaleToPOIResponse\": {\"PaymentResponse\": {\"POIData\": {},\"PaymentResult\": {\"AuthenticationMethod\": [\"" + online + "\"],\"PaymentAcquirerData\": {\"AcquirerPOIID\": \"MX925-260390740\",\"MerchantID\": \"PME_POS\"},\"PaymentType\": \"Normal\"},\"Response\": {\"Result\": \"Success\"}},\"MessageHeader\": {\"ProtocolVersion\": \"3.0\",\"SaleID\": \"Appie\",\"MessageClass\": \"Service\",\"MessageCategory\": \"Payment\",\"ServiceID\": \"20095135\",\"POIID\": \"MX925-260390740\",\"MessageType\": \"Response\"}}}";
145162
}
146163

147-
private static string GetSerializedSaleToPoiMessage(SaleToPOIMessage saleToPoiMessage)
164+
private static string SerializeSaleToPoiMessage(SaleToPOIMessage saleToPoiMessage)
148165
{
149166
var saleToPoiMessageSerializer = new SaleToPoiMessageSerializer();
150167
return saleToPoiMessageSerializer.Serialize(saleToPoiMessage);
151168
}
152169

153-
private static string GetSerializedSaleToPoiMessageSecured(SaleToPOIMessage saleToPoiMessage)
170+
171+
private static string SerializeSaleToPoiMessageSecured(SaleToPOIMessage saleToPoiMessage)
154172
{
155173
var saleToPoiMessageSerializer = new SaleToPoiMessageSerializer();
156174
var serializedSaleToPoiMessage = saleToPoiMessageSerializer.Serialize(saleToPoiMessage);
@@ -173,5 +191,49 @@ private static string GetSerializedSaleToPoiMessageSecured(SaleToPOIMessage sale
173191

174192
return saleToPoiMessageSerializer.Serialize(saleToPoiMessageSecured);
175193
}
194+
195+
private static SaleToPOIRequest PosPaymentRequest =>
196+
new SaleToPOIRequest
197+
{
198+
MessageHeader = new MessageHeader
199+
{
200+
MessageType = MessageType.Request,
201+
MessageClass = MessageClassType.Service,
202+
MessageCategory = MessageCategoryType.Payment,
203+
SaleID = "POSSystemID12345",
204+
POIID = "MX915-284251016",
205+
ServiceID = "12345678"
206+
},
207+
MessagePayload = new PaymentRequest
208+
{
209+
SaleData = new SaleData
210+
{
211+
SaleTransactionID = new TransactionIdentification
212+
{
213+
TransactionID = "PosAuth",
214+
TimeStamp = new DateTime(2025, 1, 1)
215+
},
216+
TokenRequestedType = TokenRequestedType.Customer,
217+
},
218+
PaymentTransaction = new PaymentTransaction
219+
{
220+
AmountsReq = new AmountsReq
221+
{
222+
Currency = "EUR",
223+
RequestedAmount = 10100
224+
}
225+
},
226+
PaymentData = new PaymentData
227+
{
228+
PaymentType = PaymentType.Normal
229+
}
230+
}
231+
};
232+
233+
private static string ExpectedSaleToPoiMessageJson =>
234+
"{\"SaleToPOIRequest\":{\"MessageHeader\":{\"MessageClass\":\"Service\",\"MessageCategory\":\"Payment\",\"MessageType\":\"Request\",\"ServiceID\":\"12345678\",\"SaleID\":\"POSSystemID12345\",\"POIID\":\"MX915-284251016\",\"ProtocolVersion\":\"3.0\"},\"PaymentRequest\":{\"SaleData\":{\"SaleTransactionID\":{\"TransactionID\":\"PosAuth\",\"TimeStamp\":\"2025-01-01T00:00:00\"},\"SaleToAcquirerData\":\"eyJhcHBsaWNhdGlvbkluZm8iOnsiYWR5ZW5MaWJyYXJ5Ijp7Im5hbWUiOiJhZHllbi1kb3RuZXQtYXBpLWxpYnJhcnkiLCJ2ZXJzaW9uIjoiMjYuMC4wIn19fQ==\",\"TokenRequestedType\":\"Customer\"},\"PaymentTransaction\":{\"AmountsReq\":{\"Currency\":\"EUR\",\"RequestedAmount\":10100.0}},\"PaymentData\":{\"PaymentType\":\"Normal\"}}}}";
235+
236+
private static string ExpectedSaleToPoiMessageSecuredJson =>
237+
"{\"SaleToPOIRequest\":{\"MessageHeader\":{\"MessageClass\":\"Service\",\"MessageCategory\":\"Payment\",\"MessageType\":\"Request\",\"ServiceID\":\"12345678\",\"SaleID\":\"POSSystemID12345\",\"POIID\":\"MX915-284251016\",\"ProtocolVersion\":\"3.0\"},\"NexoBlob\":null,\"SecurityTrailer\":{\"AdyenCryptoVersion\":1,\"KeyIdentifier\":\"CryptoKeyIdentifier12345\",\"KeyVersion\":0,\"Hmac\":\"0lPogF5Mg97Nty9ZUuAnb3v8pvZTZvwouxdMp0HV+yQ=\"}}}";
176238
}
177239
}

Adyen/ApiSerialization/Converter/JsonConvertSerializerWrapper.cs

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,31 +11,33 @@ internal class JsonConvertSerializerWrapper
1111
{
1212
private const string DateTimeFormat = "yyyy-MM-ddTHH\\:mm\\:ss";
1313

14+
private static readonly JsonSerializerSettings SaleToPoiMessageSerializerSettings = CreateSerializerSettings(new SaleToPoiMessageConverter());
15+
private static readonly JsonSerializerSettings SaleToPoiMessageSecuredSerializerSettings = CreateSerializerSettings(new SaleToPoiMessageSecuredConverter());
16+
1417
internal static string Serialize(SaleToPOIMessage saleToPoiMessage)
1518
{
16-
return Serialize(saleToPoiMessage, new SaleToPoiMessageConverter());
19+
return JsonConvert.SerializeObject(saleToPoiMessage, SaleToPoiMessageSerializerSettings);
1720
}
1821

1922
internal static string Serialize(SaleToPoiMessageSecured saleToPoiMessageSecured)
2023
{
21-
return Serialize(saleToPoiMessageSecured, new SaleToPoiMessageSecuredConverter());
24+
return JsonConvert.SerializeObject(saleToPoiMessageSecured, SaleToPoiMessageSecuredSerializerSettings);
2225
}
2326

24-
private static string Serialize(object message, JsonConverter messageConverter)
27+
private static JsonSerializerSettings CreateSerializerSettings(JsonConverter messageConverter)
2528
{
26-
return JsonConvert.SerializeObject(message,
27-
new JsonSerializerSettings
29+
return new JsonSerializerSettings
30+
{
31+
Converters = new List<JsonConverter>
2832
{
29-
Converters = new List<JsonConverter>
30-
{
31-
messageConverter,
32-
new StringEnumConverter(),
33-
new IsoDateTimeConverter { DateTimeFormat = DateTimeFormat }
34-
},
35-
NullValueHandling = NullValueHandling.Ignore,
36-
MissingMemberHandling = MissingMemberHandling.Ignore,
37-
ContractResolver = new DefaultContractResolver()
38-
});
33+
messageConverter,
34+
new StringEnumConverter(),
35+
new IsoDateTimeConverter { DateTimeFormat = DateTimeFormat }
36+
},
37+
NullValueHandling = NullValueHandling.Ignore,
38+
MissingMemberHandling = MissingMemberHandling.Ignore,
39+
ContractResolver = new DefaultContractResolver()
40+
};
3941
}
4042
}
4143
}

0 commit comments

Comments
 (0)