da9a0008e692a7c0d0df3c7b008648a12926a635
[dcaegen2/services/prh.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * PNF-REGISTRATION-HANDLER
4  * ================================================================================
5  * Copyright (C) 2019 NOKIA Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.dcaegen2.services.bootstrap;
22
23 import com.google.gson.JsonObject;
24 import com.google.gson.JsonParser;
25 import org.assertj.core.api.Condition;
26 import org.junit.jupiter.api.Test;
27
28 import java.util.Map;
29
30 import static org.assertj.core.api.Assertions.assertThat;
31 import static org.assertj.core.api.Assertions.assertThatThrownBy;
32
33 class CbsJsonToPropertyMapConverterTest {
34
35     private static final JsonObject SOME_JSON_FROM_CBS = asJsonObject(
36             "{\n" +
37             "  \"config\": {\n" +
38             "    \"someStringProp\": \"foo\",\n" +
39             "    \"someNumericalProp\": 123,\n" +
40             "    \"someBooleanProp\": true,\n" +
41             "    \"someObjectProp\": {\n" +
42             "      \"bar\": \"baz\"\n" +
43             "    }\n" +
44             "  }\n" +
45             "}"
46     );
47
48     private CbsJsonToPropertyMapConverter cbsJsonToPropertyMapConverter = new CbsJsonToPropertyMapConverter();
49
50     @Test
51     void shouldExtractPrimitivePropertiesToSimpleJavaTypes() {
52         Map<String, Object> map = cbsJsonToPropertyMapConverter.convertToMap(SOME_JSON_FROM_CBS);
53
54         assertThat(map).containsEntry("someStringProp", "foo");
55         assertThat(map).containsEntry("someNumericalProp", 123L);
56         assertThat(map).containsEntry("someBooleanProp", true);
57
58     }
59
60     @Test
61     void shouldLeaveComplexPropertiesAsJsonTypes() {
62         Map<String, Object> map = cbsJsonToPropertyMapConverter.convertToMap(SOME_JSON_FROM_CBS);
63
64         assertThat(map).hasEntrySatisfying("someObjectProp", hasClass(JsonObject.class));
65     }
66
67     @Test
68     void shouldProduceDescriptiveExceptionInCaseExpectedRootElementInCbsJsonIsMissing() {
69         assertThatThrownBy(() -> cbsJsonToPropertyMapConverter.convertToMap(asJsonObject("{}")))
70                 .isInstanceOf(IllegalArgumentException.class)
71                 .hasMessage("Missing expected 'config' property in json from CBS.");
72     }
73
74
75     private static JsonObject asJsonObject(String jsonString) {
76         return new JsonParser().parse(jsonString).getAsJsonObject();
77     }
78
79     private static Condition<Object> hasClass(Class clazz) {
80         return new Condition<Object>(clazz.getCanonicalName()){
81             public boolean matches(Object value) {
82                 return value.getClass().equals(clazz);
83             }
84         };
85     }
86 }