1
1
package dev .cdevents ;
2
2
3
3
import com .fasterxml .jackson .core .JsonProcessingException ;
4
+ import com .fasterxml .jackson .databind .JsonNode ;
5
+ import com .fasterxml .jackson .databind .ObjectMapper ;
4
6
import com .github .packageurl .MalformedPackageURLException ;
5
7
import com .github .packageurl .PackageURL ;
8
+ import dev .cdevents .config .CustomObjectMapper ;
6
9
import dev .cdevents .constants .CDEventConstants ;
7
10
import dev .cdevents .events .*;
8
11
import dev .cdevents .exception .CDEventsException ;
9
12
import io .cloudevents .CloudEvent ;
10
13
import org .junit .jupiter .api .Test ;
11
14
15
+ import java .io .IOException ;
16
+ import java .io .InputStream ;
12
17
import java .net .URI ;
13
18
import java .nio .charset .StandardCharsets ;
14
19
15
20
import static org .assertj .core .api .Assertions .assertThat ;
16
- import static org .junit .jupiter .api .Assertions .assertThrows ;
21
+ import static org .junit .jupiter .api .Assertions .* ;
17
22
18
23
public class CDEventsTest {
19
24
20
- @ Test
21
- void createPipelineRunFinishedEventAsCloudEvent () {
25
+ private static ObjectMapper objectMapper = new CustomObjectMapper ().customConfiguration ();
22
26
27
+ @ Test
28
+ void createPipelineRunFinishedEventAsCloudEvent () throws IOException {
23
29
PipelineRunFinishedCDEvent cdEvent = new PipelineRunFinishedCDEvent ();
24
30
cdEvent .setSource (URI .create ("http://dev.cdevents" ));
25
31
@@ -42,6 +48,42 @@ void createPipelineRunFinishedEventAsCloudEvent() {
42
48
43
49
}
44
50
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
+
45
87
@ Test
46
88
void testInvalidPipelineRunFinishedEventWithNoSubject () {
47
89
PipelineRunFinishedCDEvent cdEvent = new PipelineRunFinishedCDEvent ();
@@ -90,6 +132,41 @@ void testInvalidPipelineRunQueuedEventWithNoSubject() {
90
132
assertThat (exception .getMessage ()).isEqualTo (expectedError );
91
133
}
92
134
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
+
93
170
@ Test
94
171
void testPipelineRunQueuedEventWithCustomData () throws JsonProcessingException {
95
172
PipelineRunQueuedCDEvent cdEvent = new PipelineRunQueuedCDEvent ();
@@ -151,6 +228,44 @@ void testInvalidPipelineRunStartedEventWithNoSubject() {
151
228
assertThat (exception .getMessage ()).isEqualTo (expectedError );
152
229
}
153
230
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
+
154
269
155
270
@ Test
156
271
void createTaskRunStartedEventAsCloudEvent () {
@@ -189,6 +304,44 @@ void testInvalidTaskRunStartedEventWithNoSubject() {
189
304
assertThat (exception .getMessage ()).isEqualTo (expectedError );
190
305
}
191
306
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
+
192
345
@ Test
193
346
void createTaskRunFinishedEventAsCloudEvent () {
194
347
@@ -215,6 +368,45 @@ void createTaskRunFinishedEventAsCloudEvent() {
215
368
assertThat (ceDataJson ).isEqualTo (cdEventJson );
216
369
}
217
370
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
+
218
410
@ Test
219
411
void testInvalidTaskRunFinishedEventWithNoSubject () {
220
412
TaskRunFinishedCDEvent cdEvent = new TaskRunFinishedCDEvent ();
0 commit comments