11package dev .cdevents ;
22
33import com .fasterxml .jackson .core .JsonProcessingException ;
4+ import com .fasterxml .jackson .databind .JsonNode ;
5+ import com .fasterxml .jackson .databind .ObjectMapper ;
46import com .github .packageurl .MalformedPackageURLException ;
57import com .github .packageurl .PackageURL ;
8+ import dev .cdevents .config .CustomObjectMapper ;
69import dev .cdevents .constants .CDEventConstants ;
710import dev .cdevents .events .*;
811import dev .cdevents .exception .CDEventsException ;
912import io .cloudevents .CloudEvent ;
1013import org .junit .jupiter .api .Test ;
1114
15+ import java .io .IOException ;
16+ import java .io .InputStream ;
1217import java .net .URI ;
1318import java .nio .charset .StandardCharsets ;
1419
1520import static org .assertj .core .api .Assertions .assertThat ;
16- import static org .junit .jupiter .api .Assertions .assertThrows ;
21+ import static org .junit .jupiter .api .Assertions .* ;
1722
1823public class CDEventsTest {
1924
20- @ Test
21- void createPipelineRunFinishedEventAsCloudEvent () {
25+ private static ObjectMapper objectMapper = new CustomObjectMapper ().customConfiguration ();
2226
27+ @ Test
28+ void createPipelineRunFinishedEventAsCloudEvent () throws IOException {
2329 PipelineRunFinishedCDEvent cdEvent = new PipelineRunFinishedCDEvent ();
2430 cdEvent .setSource (URI .create ("http://dev.cdevents" ));
2531
@@ -42,6 +48,42 @@ void createPipelineRunFinishedEventAsCloudEvent() {
4248
4349 }
4450
51+ @ Test
52+ void createPipelineRunFinishedEventOptionalFieldsUnset () throws IOException {
53+ InputStream inputStream = getClass ().getResourceAsStream ("/pipelinerun_finished_optional.json" );
54+
55+ JsonNode expectedJsonNode = objectMapper .readTree (inputStream );
56+ JsonNode expectedContextNode = expectedJsonNode .get ("context" );
57+ JsonNode expectedSubjectNode = expectedJsonNode .get ("subject" );
58+
59+ PipelineRunFinishedCDEvent cdEvent = new PipelineRunFinishedCDEvent ();
60+ cdEvent .setSource (URI .create (expectedContextNode .get ("source" ).asText ()));
61+ cdEvent .setSubjectId (expectedSubjectNode .get ("id" ).asText ());
62+
63+ String cdEventJson = CDEvents .cdEventAsJson (cdEvent );
64+ JsonNode cdEventJsonNode = objectMapper .readTree (cdEventJson );
65+ JsonNode cdEventContextNode = cdEventJsonNode .get ("context" );
66+ JsonNode cdEventSubjectNode = cdEventJsonNode .get ("subject" );
67+
68+ //validates CDEvent against schema
69+ assertTrue (CDEvents .validateCDEvent (cdEvent ));
70+
71+ //assert context and subject mandatory fields
72+ assertThat (cdEventContextNode .get ("type" ).asText ()).isEqualTo (expectedContextNode .get ("type" ).asText ());
73+ assertThat (cdEventContextNode .get ("source" ).asText ()).isEqualTo (expectedContextNode .get ("source" ).asText ());
74+ assertEquals (expectedSubjectNode , cdEventSubjectNode );
75+ assertThat (cdEventSubjectNode .get ("id" ).asText ()).isEqualTo (expectedSubjectNode .get ("id" ).asText ());
76+ assertThat (cdEventSubjectNode .get ("type" ).asText ()).isEqualTo (expectedSubjectNode .get ("type" ).asText ());
77+
78+ //assert Optional field Subject Source, Content pipelineName, url, outcome, errors are set to null
79+ assertThat (cdEventSubjectNode .get ("source" )).isEqualTo (null );
80+ assertThat (expectedSubjectNode .get ("content" ).get ("pipelineName" )).isEqualTo (null );
81+ assertThat (expectedSubjectNode .get ("content" ).get ("url" )).isEqualTo (null );
82+ assertThat (expectedSubjectNode .get ("content" ).get ("outcome" )).isEqualTo (null );
83+ assertThat (expectedSubjectNode .get ("content" ).get ("errors" )).isEqualTo (null );
84+
85+ }
86+
4587 @ Test
4688 void testInvalidPipelineRunFinishedEventWithNoSubject () {
4789 PipelineRunFinishedCDEvent cdEvent = new PipelineRunFinishedCDEvent ();
@@ -90,6 +132,41 @@ void testInvalidPipelineRunQueuedEventWithNoSubject() {
90132 assertThat (exception .getMessage ()).isEqualTo (expectedError );
91133 }
92134
135+ @ Test
136+ void createPipelineRunQueuedEventWithOptionalFieldsUnset () throws IOException {
137+ InputStream inputStream = getClass ().getResourceAsStream ("/pipelinerun_queued_optional.json" );
138+
139+ JsonNode expectedJsonNode = objectMapper .readTree (inputStream );
140+ JsonNode expectedContextNode = expectedJsonNode .get ("context" );
141+ JsonNode expectedSubjectNode = expectedJsonNode .get ("subject" );
142+
143+ PipelineRunQueuedCDEvent cdEvent = new PipelineRunQueuedCDEvent ();
144+ cdEvent .setSource (URI .create (expectedContextNode .get ("source" ).asText ()));
145+ cdEvent .setSubjectId (expectedSubjectNode .get ("id" ).asText ());
146+
147+ String cdEventJson = CDEvents .cdEventAsJson (cdEvent );
148+ JsonNode cdEventJsonNode = objectMapper .readTree (cdEventJson );
149+ JsonNode cdEventContextNode = cdEventJsonNode .get ("context" );
150+ JsonNode cdEventSubjectNode = cdEventJsonNode .get ("subject" );
151+
152+ //validates CDEvent against schema
153+ assertTrue (CDEvents .validateCDEvent (cdEvent ));
154+
155+ //assert context and subject mandatory fields
156+ assertThat (cdEventContextNode .get ("type" ).asText ()).isEqualTo (expectedContextNode .get ("type" ).asText ());
157+ assertThat (cdEventContextNode .get ("source" ).asText ()).isEqualTo (expectedContextNode .get ("source" ).asText ());
158+ assertEquals (expectedSubjectNode , cdEventSubjectNode );
159+ assertThat (cdEventSubjectNode .get ("id" ).asText ()).isEqualTo (expectedSubjectNode .get ("id" ).asText ());
160+ assertThat (cdEventSubjectNode .get ("type" ).asText ()).isEqualTo (expectedSubjectNode .get ("type" ).asText ());
161+
162+ //assert Optional field Subject Source, pipelineName, url is set to null
163+ assertThat (cdEventSubjectNode .get ("source" )).isEqualTo (null );
164+ assertThat (expectedSubjectNode .get ("content" ).get ("pipelineName" )).isEqualTo (null );
165+ assertThat (expectedSubjectNode .get ("content" ).get ("url" )).isEqualTo (null );
166+
167+
168+ }
169+
93170 @ Test
94171 void testPipelineRunQueuedEventWithCustomData () throws JsonProcessingException {
95172 PipelineRunQueuedCDEvent cdEvent = new PipelineRunQueuedCDEvent ();
@@ -151,6 +228,44 @@ void testInvalidPipelineRunStartedEventWithNoSubject() {
151228 assertThat (exception .getMessage ()).isEqualTo (expectedError );
152229 }
153230
231+ @ Test
232+ void createPipelineRunStartedJsonEventWithOptionalFieldsUnset () throws IOException {
233+
234+ InputStream inputStream = getClass ().getResourceAsStream ("/pipelinerun_started_optional.json" );
235+
236+ JsonNode expectedJsonNode = objectMapper .readTree (inputStream );
237+ JsonNode expectedContextNode = expectedJsonNode .get ("context" );
238+ JsonNode expectedSubjectNode = expectedJsonNode .get ("subject" );
239+
240+ PipelineRunStartedCDEvent cdEvent = new PipelineRunStartedCDEvent ();
241+ cdEvent .setSource (URI .create (expectedContextNode .get ("source" ).asText ()));
242+
243+ cdEvent .setSubjectId (expectedSubjectNode .get ("id" ).asText ());
244+ cdEvent .setSubjectPipelineName (expectedSubjectNode .get ("content" ).get ("pipelineName" ).asText ());
245+ cdEvent .setSubjectUrl (URI .create (expectedSubjectNode .get ("content" ).get ("url" ).asText ()));
246+
247+ String cdEventJson = CDEvents .cdEventAsJson (cdEvent );
248+ JsonNode cdEventJsonNode = objectMapper .readTree (cdEventJson );
249+ JsonNode cdEventContextNode = cdEventJsonNode .get ("context" );
250+ JsonNode cdEventSubjectNode = cdEventJsonNode .get ("subject" );
251+
252+ //validates CDEvent against schema
253+ assertTrue (CDEvents .validateCDEvent (cdEvent ));
254+
255+ //assert context and subject mandatory fields
256+ assertThat (cdEventContextNode .get ("type" ).asText ()).isEqualTo (expectedContextNode .get ("type" ).asText ());
257+ assertThat (cdEventContextNode .get ("source" ).asText ()).isEqualTo (expectedContextNode .get ("source" ).asText ());
258+ assertEquals (expectedSubjectNode , cdEventSubjectNode );
259+ assertThat (cdEventSubjectNode .get ("id" ).asText ()).isEqualTo (expectedSubjectNode .get ("id" ).asText ());
260+ assertThat (cdEventSubjectNode .get ("type" ).asText ()).isEqualTo (expectedSubjectNode .get ("type" ).asText ());
261+ assertThat (cdEventSubjectNode .get ("content" ).get ("pipelineName" ).asText ()).isEqualTo (expectedSubjectNode .get ("content" ).get ("pipelineName" ).asText ());
262+ assertThat (cdEventSubjectNode .get ("content" ).get ("url" ).asText ()).isEqualTo (expectedSubjectNode .get ("content" ).get ("url" ).asText ());
263+
264+ //assert Optional field Subject Source is set to null
265+ assertThat (cdEventSubjectNode .get ("source" )).isEqualTo (null );
266+
267+ }
268+
154269
155270 @ Test
156271 void createTaskRunStartedEventAsCloudEvent () {
@@ -189,6 +304,44 @@ void testInvalidTaskRunStartedEventWithNoSubject() {
189304 assertThat (exception .getMessage ()).isEqualTo (expectedError );
190305 }
191306
307+ @ Test
308+ void createTaskRunStartedEventJsonWithOptionalFieldsUnset () throws IOException {
309+ InputStream inputStream = getClass ().getResourceAsStream ("/taskrun_started_optional.json" );
310+
311+ JsonNode expectedJsonNode = objectMapper .readTree (inputStream );
312+ JsonNode expectedContextNode = expectedJsonNode .get ("context" );
313+ JsonNode expectedSubjectNode = expectedJsonNode .get ("subject" );
314+
315+ TaskRunStartedCDEvent cdEvent = new TaskRunStartedCDEvent ();
316+ cdEvent .setSource (URI .create (expectedContextNode .get ("source" ).asText ()));
317+
318+ cdEvent .setSubjectId (expectedSubjectNode .get ("id" ).asText ());
319+ cdEvent .setSubjectPipelineRunId (expectedSubjectNode .get ("content" ).get ("pipelineRun" ).get ("id" ).asText ());
320+
321+ String cdEventJson = CDEvents .cdEventAsJson (cdEvent );
322+ JsonNode cdEventJsonNode = objectMapper .readTree (cdEventJson );
323+ JsonNode cdEventContextNode = cdEventJsonNode .get ("context" );
324+ JsonNode cdEventSubjectNode = cdEventJsonNode .get ("subject" );
325+
326+ //validates CDEvent against schema
327+ assertTrue (CDEvents .validateCDEvent (cdEvent ));
328+
329+ //assert context and subject mandatory fields
330+ assertThat (cdEventContextNode .get ("type" ).asText ()).isEqualTo (expectedContextNode .get ("type" ).asText ());
331+ assertThat (cdEventContextNode .get ("source" ).asText ()).isEqualTo (expectedContextNode .get ("source" ).asText ());
332+ assertEquals (expectedSubjectNode , cdEventSubjectNode );
333+ assertThat (cdEventSubjectNode .get ("id" ).asText ()).isEqualTo (expectedSubjectNode .get ("id" ).asText ());
334+ assertThat (cdEventSubjectNode .get ("type" ).asText ()).isEqualTo (expectedSubjectNode .get ("type" ).asText ());
335+ assertThat (cdEventSubjectNode .get ("content" ).get ("pipelineRun" ).get ("id" ).asText ()).isEqualTo (expectedSubjectNode .get ("content" ).get ("pipelineRun" ).get ("id" ).asText ());
336+
337+ //assert Optional fields Subject Source, Content taskName, URL and pipelineRun Source are set to null
338+ assertThat (cdEventSubjectNode .get ("source" )).isEqualTo (null );
339+ assertThat (cdEventSubjectNode .get ("content" ).get ("taskName" )).isEqualTo (null );
340+ assertThat (cdEventSubjectNode .get ("content" ).get ("url" )).isEqualTo (null );
341+ assertThat (cdEventSubjectNode .get ("content" ).get ("pipelineRun" ).get ("source" )).isEqualTo (null );
342+
343+ }
344+
192345 @ Test
193346 void createTaskRunFinishedEventAsCloudEvent () {
194347
@@ -215,6 +368,45 @@ void createTaskRunFinishedEventAsCloudEvent() {
215368 assertThat (ceDataJson ).isEqualTo (cdEventJson );
216369 }
217370
371+ @ Test
372+ void createTaskRunFinishedEventJsonWithOptionalFieldsUnset () throws IOException {
373+
374+ InputStream inputStream = getClass ().getResourceAsStream ("/taskrun_finished_optional.json" );
375+
376+ JsonNode expectedJsonNode = objectMapper .readTree (inputStream );
377+ JsonNode expectedContextNode = expectedJsonNode .get ("context" );
378+ JsonNode expectedSubjectNode = expectedJsonNode .get ("subject" );
379+
380+ TaskRunFinishedCDEvent cdEvent = new TaskRunFinishedCDEvent ();
381+ cdEvent .setSource (URI .create (expectedContextNode .get ("source" ).asText ()));
382+ cdEvent .setSubjectId (expectedSubjectNode .get ("id" ).asText ());
383+ cdEvent .setSubjectPipelineRunId (expectedSubjectNode .get ("content" ).get ("pipelineRun" ).get ("id" ).asText ());
384+
385+ String cdEventJson = CDEvents .cdEventAsJson (cdEvent );
386+ JsonNode cdEventJsonNode = objectMapper .readTree (cdEventJson );
387+ JsonNode cdEventContextNode = cdEventJsonNode .get ("context" );
388+ JsonNode cdEventSubjectNode = cdEventJsonNode .get ("subject" );
389+
390+ //validates CDEvent against schema
391+ assertTrue (CDEvents .validateCDEvent (cdEvent ));
392+
393+ //assert context and subject mandatory fields
394+ assertThat (cdEventContextNode .get ("type" ).asText ()).isEqualTo (expectedContextNode .get ("type" ).asText ());
395+ assertThat (cdEventContextNode .get ("source" ).asText ()).isEqualTo (expectedContextNode .get ("source" ).asText ());
396+ assertEquals (expectedSubjectNode , cdEventSubjectNode );
397+ assertThat (cdEventSubjectNode .get ("id" ).asText ()).isEqualTo (expectedSubjectNode .get ("id" ).asText ());
398+ assertThat (cdEventSubjectNode .get ("type" ).asText ()).isEqualTo (expectedSubjectNode .get ("type" ).asText ());
399+ assertThat (cdEventSubjectNode .get ("content" ).get ("pipelineRun" ).get ("id" ).asText ()).isEqualTo (expectedSubjectNode .get ("content" ).get ("pipelineRun" ).get ("id" ).asText ());
400+
401+ //assert Optional fields Subject Source, Content taskName, URL, outcome, errors and pipelineRun Source are set to null
402+ assertThat (cdEventSubjectNode .get ("source" )).isEqualTo (null );
403+ assertThat (cdEventSubjectNode .get ("content" ).get ("taskName" )).isEqualTo (null );
404+ assertThat (cdEventSubjectNode .get ("content" ).get ("url" )).isEqualTo (null );
405+ assertThat (cdEventSubjectNode .get ("content" ).get ("outcome" )).isEqualTo (null );
406+ assertThat (cdEventSubjectNode .get ("content" ).get ("errors" )).isEqualTo (null );
407+ assertThat (cdEventSubjectNode .get ("content" ).get ("pipelineRun" ).get ("source" )).isEqualTo (null );
408+ }
409+
218410 @ Test
219411 void testInvalidTaskRunFinishedEventWithNoSubject () {
220412 TaskRunFinishedCDEvent cdEvent = new TaskRunFinishedCDEvent ();
0 commit comments