11package com .fingerprint .v4 ;
22
33import static org .junit .jupiter .api .Assertions .assertDoesNotThrow ;
4+ import static org .junit .jupiter .api .Assertions .assertEquals ;
45import static org .junit .jupiter .api .Assertions .assertInstanceOf ;
6+ import static org .junit .jupiter .api .Assertions .assertNotEquals ;
7+ import static org .junit .jupiter .api .Assertions .assertNotNull ;
58
69import com .fasterxml .jackson .databind .ObjectMapper ;
710import com .fasterxml .jackson .databind .SerializationFeature ;
811import com .fasterxml .jackson .databind .node .ObjectNode ;
912import com .fasterxml .jackson .datatype .jsr310 .JavaTimeModule ;
13+ import com .fingerprint .v4 .model .ErrorCode ;
14+ import com .fingerprint .v4 .model .ErrorResponse ;
1015import com .fingerprint .v4 .model .Event ;
1116import com .fingerprint .v4 .model .EventRuleAction ;
1217import com .fingerprint .v4 .sdk .JSON ;
18+ import java .io .File ;
1319import java .io .IOException ;
1420import java .io .InputStream ;
21+ import java .net .URISyntaxException ;
22+ import java .net .URL ;
23+ import java .util .Arrays ;
24+ import java .util .List ;
25+ import java .util .function .Predicate ;
26+ import java .util .stream .Collectors ;
27+ import java .util .stream .Stream ;
28+ import org .junit .jupiter .api .DynamicTest ;
1529import org .junit .jupiter .api .Test ;
30+ import org .junit .jupiter .api .TestFactory ;
1631import org .junit .jupiter .api .TestInstance ;
1732
1833@ TestInstance (TestInstance .Lifecycle .PER_CLASS )
1934public class SerializationTest {
2035
36+ private static final String ERRORS_DIR = "mocks/errors" ;
37+ private static final String EVENTS_DIR = "mocks/events" ;
38+
2139 private InputStream getFileAsIOStream (final String fileName ) {
2240 InputStream ioStream = this .getClass ().getClassLoader ().getResourceAsStream (fileName );
2341
@@ -35,17 +53,6 @@ private static ObjectMapper getMapper() {
3553 return mapper ;
3654 }
3755
38- @ Test
39- public void deserializeSerializeEvent () throws IOException {
40- ObjectMapper sdkObjectMapper = JSON .getDefault ().getMapper ();
41- Event event =
42- sdkObjectMapper .readValue (
43- getFileAsIOStream ("mocks/events/get_event_200.json" ), Event .class );
44-
45- ObjectMapper springLikeObjectMapper = getMapper ();
46- springLikeObjectMapper .writeValueAsString (event );
47- }
48-
4956 @ Test
5057 public void deserializeEventWithUnknownBotResultValue () throws IOException {
5158 ObjectMapper sdkObjectMapper = JSON .getDefault ().getMapper ();
@@ -96,4 +103,86 @@ public void deserializeEventWithUnknownRuleActionTypeValue() throws IOException
96103
97104 assertInstanceOf (EventRuleAction .UnknownEventRuleAction .class , event .getRuleAction ());
98105 }
106+
107+ @ TestFactory
108+ public Stream <DynamicTest > deserializeErrorResponses () {
109+ ObjectMapper sdkObjectMapper = JSON .getDefault ().getMapper ();
110+
111+ return listMockFileNames (ERRORS_DIR , name -> true ).stream ()
112+ .map (
113+ fileName ->
114+ DynamicTest .dynamicTest (
115+ fileName ,
116+ () -> {
117+ String resource = ERRORS_DIR + "/" + fileName ;
118+
119+ ObjectNode errorNode =
120+ sdkObjectMapper .readValue (getFileAsIOStream (resource ), ObjectNode .class );
121+ ErrorResponse errorResponse =
122+ sdkObjectMapper .readValue (
123+ getFileAsIOStream (resource ), ErrorResponse .class );
124+
125+ assertNotNull (errorResponse .getError ());
126+ assertNotEquals (
127+ ErrorCode .UNSUPPORTED_VALUE_SDK_UPGRADE_REQUIRED ,
128+ errorResponse .getError ().getCode (),
129+ "Unknown error code in " + resource );
130+ assertEquals (
131+ errorNode .at ("/error/code" ).asText (),
132+ errorResponse .getError ().getCode ().getValue ());
133+ assertEquals (
134+ errorNode .at ("/error/message" ).asText (),
135+ errorResponse .getError ().getMessage ());
136+
137+ getMapper ().writeValueAsString (errorResponse );
138+ }));
139+ }
140+
141+ @ TestFactory
142+ public Stream <DynamicTest > deserializeSerializeEvents () {
143+ ObjectMapper sdkObjectMapper = JSON .getDefault ().getMapper ();
144+
145+ return listMockFileNames (EVENTS_DIR , name -> name .startsWith ("get_event" )).stream ()
146+ .map (
147+ fileName ->
148+ DynamicTest .dynamicTest (
149+ fileName ,
150+ () -> {
151+ String resource = EVENTS_DIR + "/" + fileName ;
152+
153+ ObjectNode eventNode =
154+ sdkObjectMapper .readValue (getFileAsIOStream (resource ), ObjectNode .class );
155+ Event event =
156+ sdkObjectMapper .readValue (getFileAsIOStream (resource ), Event .class );
157+
158+ assertEquals (eventNode .get ("event_id" ).asText (), event .getEventId ());
159+ assertEquals (
160+ eventNode .get ("timestamp" ).asLong (), event .getTimestamp ().longValue ());
161+
162+ getMapper ().writeValueAsString (event );
163+ }));
164+ }
165+
166+ private List <String > listMockFileNames (String directoryName , Predicate <String > fileNameFilter ) {
167+ URL directory = this .getClass ().getClassLoader ().getResource (directoryName );
168+
169+ if (directory == null ) {
170+ throw new IllegalStateException (directoryName + " is not found" );
171+ }
172+
173+ File [] files ;
174+ try {
175+ files =
176+ new File (directory .toURI ())
177+ .listFiles ((dir , name ) -> name .endsWith (".json" ) && fileNameFilter .test (name ));
178+ } catch (URISyntaxException e ) {
179+ throw new IllegalStateException (e );
180+ }
181+
182+ if (files == null || files .length == 0 ) {
183+ throw new IllegalStateException ("No mocks found in " + directoryName );
184+ }
185+
186+ return Arrays .stream (files ).map (File ::getName ).sorted ().collect (Collectors .toList ());
187+ }
99188}
0 commit comments