15458199a5d457af6845ce7f4ed044ef7839889c
[policy/apex-pdp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2022 Bell Canada. All rights reserved.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.apex.plugins.context.schema.json;
22
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25
26 import com.google.gson.JsonArray;
27 import com.google.gson.JsonObject;
28 import com.worldturner.medeia.api.ValidationFailedException;
29 import java.util.ArrayList;
30 import java.util.Map;
31 import org.junit.Test;
32 import org.onap.policy.common.utils.coder.CoderException;
33
34 public class JsonSchemaHelperMarshalTest extends CommonTestData {
35
36     /**
37      * Test Boolean.
38      */
39     @Test
40     public void testBooleanMarshal() {
41         var schemaHelper = createSchema(BOOLEAN_SCHEMA);
42         assertThat(schemaHelper.marshal2String(Boolean.TRUE)).isEqualTo("true");
43     }
44
45     /**
46      * Test null.
47      */
48     @Test
49     public void testNullMarshal() {
50         var schemaHelper = createSchema(NULL_SCHEMA);
51         assertThat(schemaHelper.marshal2String(null)).isEqualTo("null");
52     }
53
54     /**
55      * Test Array.
56      *
57      * @throws CoderException the coder exception
58      */
59     @Test
60     public void testArrayMarshal() throws CoderException {
61         var schemaHelper = createSchema(MEASUREMENTGROUPS_TYPE);
62         var object = coder.decode(MEASUREMENTGROUPS, Object.class);
63         assertThat(object).isInstanceOf(ArrayList.class);
64         var marshalledString = schemaHelper.marshal2String(object);
65         assertThat(marshalledString).isEqualTo(MEASUREMENTGROUPS);
66         var marshalledObject = schemaHelper.marshal2Object(object);
67         assertThat(marshalledObject).isInstanceOf(JsonArray.class);
68     }
69
70     /**
71      * Test Object marshal valid scenario using JSON Schema draft 04.
72      *
73      * @throws CoderException the coderException
74      */
75     @Test
76     public void testObjectSchemaDraft04_valid() throws CoderException {
77         var dataAsObject = coder.decode(COMMONHEADER, Map.class);
78         var dataReturned = validateAndMarshal(COMMONHEADERTYPE_DRAFT04, dataAsObject, true);
79         assertThat(dataReturned).isEqualTo(COMMONHEADER);
80     }
81
82     /**
83      * Test Object marshal valid scenario using JSON Schema draft 07.
84      *
85      * @throws CoderException the coderException
86      */
87     @Test
88     public void testObjectSchemaDraft07_valid() throws CoderException {
89         var dataAsObject = coder.decode(COMMONHEADER, Map.class);
90         var dataReturned = validateAndMarshal(COMMONHEADERTYPE_DRAFT07, dataAsObject, true);
91         assertThat(dataReturned).isEqualTo(COMMONHEADER);
92         assertThat(validateAndMarshal(COMMONHEADERTYPE_DRAFT07, dataAsObject, false)).isInstanceOf(JsonObject.class);
93     }
94
95     /**
96      * Test Object marshal invalid - required field missing scenario.
97      *
98      * @throws CoderException the coderException
99      */
100     @Test
101     public void testObjectSchema_fieldMissing() throws CoderException {
102         var dataAsObject = coder.decode(COMMONHEADER, Map.class);
103         dataAsObject.remove(TEST_ID);
104         assertThatThrownBy(() -> validateAndMarshal(COMMONHEADERTYPE_DRAFT07, dataAsObject, true))
105             .isInstanceOf(ValidationFailedException.class)
106             .hasMessageContaining("Required property testId is missing from object");
107     }
108
109     /**
110      * Test Object marshal with optional field.
111      *
112      * @throws CoderException the coderException
113      */
114     @Test
115     public void testObjectSchema_OptionalField() throws CoderException {
116         var dataAsObject = coder.decode(COMMONHEADER, Map.class);
117         var dataAsjsonObject = coder.decode(COMMONHEADER, JsonObject.class);
118         dataAsObject.remove(TEST_ID);
119         dataAsjsonObject.remove(TEST_ID);
120         var dataReturned = validateAndMarshal(COMMONHEADERTYPE_WITH_OPTIONAL, dataAsObject, false);
121         assertThat(dataReturned).isEqualTo(dataAsjsonObject);
122     }
123
124     private Object validateAndMarshal(String schemaDef, Object obj, boolean marshalAsString) {
125         var schemaHelper = createSchema(schemaDef);
126         if (marshalAsString) {
127             return schemaHelper.marshal2String(obj);
128         } else {
129             return schemaHelper.marshal2Object(obj);
130         }
131     }
132
133 }