Implement Attributes/Outputs BE (part 3)
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / tosca / AttributeConverterTest.java
1 /*
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2021 Nordix Foundation
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  *  Unless required by applicable law or agreed to in writing, software
11  *  distributed under the License is distributed on an "AS IS" BASIS,
12  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *  See the License for the specific language governing permissions and
14  *  limitations under the License.
15  *
16  *  SPDX-License-Identifier: Apache-2.0
17  *  ============LICENSE_END=========================================================
18  */
19
20 package org.openecomp.sdc.be.tosca;
21
22 import static org.junit.jupiter.api.Assertions.assertEquals;
23 import static org.junit.jupiter.api.Assertions.assertNull;
24 import static org.junit.jupiter.api.Assertions.assertThrows;
25
26 import com.fasterxml.jackson.core.JsonProcessingException;
27 import com.fasterxml.jackson.databind.ObjectMapper;
28 import java.util.ArrayList;
29 import java.util.Collections;
30 import java.util.HashMap;
31 import java.util.List;
32 import java.util.Map;
33 import org.junit.jupiter.api.Test;
34 import org.onap.sdc.tosca.datatypes.model.EntrySchema;
35 import org.openecomp.sdc.be.model.AttributeDefinition;
36 import org.openecomp.sdc.be.model.DataTypeDefinition;
37 import org.openecomp.sdc.be.model.PropertyDefinition;
38 import org.openecomp.sdc.be.model.tosca.ToscaPropertyType;
39 import org.openecomp.sdc.be.tosca.exception.ToscaConversionException;
40 import org.openecomp.sdc.be.tosca.model.ToscaAttribute;
41
42 class AttributeConverterTest {
43
44     @Test
45     void testScalarTypeConversion() throws ToscaConversionException {
46         //given
47         final AttributeConverter attributeConverter = new AttributeConverter(Collections.emptyMap());
48         final AttributeDefinition attributeDefinition = new AttributeDefinition();
49         attributeDefinition.setType(ToscaPropertyType.STRING.getType());
50         attributeDefinition.setDescription("aDescription");
51         attributeDefinition.setStatus("aStatus");
52         attributeDefinition.setDefaultValue("aDefaultValue");
53         //when
54         final ToscaAttribute actualToscaAttribute = attributeConverter.convert(attributeDefinition);
55         //then
56         assertAttribute(attributeDefinition, actualToscaAttribute);
57     }
58
59     @Test
60     void testScalarNoDefaultValueConversion() throws ToscaConversionException {
61         //given
62         final AttributeConverter attributeConverter = new AttributeConverter(Collections.emptyMap());
63         final AttributeDefinition attributeDefinition = new AttributeDefinition();
64         attributeDefinition.setType(ToscaPropertyType.STRING.getType());
65         attributeDefinition.setDescription("aDescription");
66         attributeDefinition.setStatus("aStatus");
67         //when
68         final ToscaAttribute actualToscaAttribute = attributeConverter.convert(attributeDefinition);
69         //then
70         assertAttribute(attributeDefinition, null, actualToscaAttribute);
71     }
72
73     @Test
74     void testListTypeConversion() throws JsonProcessingException, ToscaConversionException {
75         //given
76         final Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
77         final AttributeConverter attributeConverter = new AttributeConverter(dataTypes);
78         final AttributeDefinition attributeDefinition = new AttributeDefinition();
79         attributeDefinition.setType(ToscaPropertyType.LIST.getType());
80         attributeDefinition.setDescription("aDescription");
81         attributeDefinition.setStatus("aStatus");
82         final EntrySchema entrySchema = new EntrySchema();
83         entrySchema.setDescription("anEntrySchemaDescription");
84         entrySchema.setType(ToscaPropertyType.LIST.getType());
85         attributeDefinition.setEntry_schema(entrySchema);
86         final List<String> defaultValueList = new ArrayList<>();
87         defaultValueList.add("entry1");
88         defaultValueList.add("entry2");
89         defaultValueList.add("entry2");
90         attributeDefinition.setDefaultValue(parseToJsonString(defaultValueList));
91         //when
92         final ToscaAttribute actualToscaAttribute = attributeConverter.convert(attributeDefinition);
93         //then
94         assertAttribute(attributeDefinition, defaultValueList, actualToscaAttribute);
95     }
96
97     @Test
98     void testDataTypeTypeConversion() throws JsonProcessingException, ToscaConversionException {
99         //given
100         final Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
101         final DataTypeDefinition dataTypeDefinition = new DataTypeDefinition();
102         final List<PropertyDefinition> propertyDefinitionList = new ArrayList<>();
103         final PropertyDefinition integerProperty = new PropertyDefinition();
104         integerProperty.setName("anIntegerProperty");
105         integerProperty.setType(ToscaPropertyType.INTEGER.getType());
106         propertyDefinitionList.add(integerProperty);
107         final PropertyDefinition stringProperty = new PropertyDefinition();
108         stringProperty.setName("aStringProperty");
109         stringProperty.setType(ToscaPropertyType.STRING.getType());
110         propertyDefinitionList.add(stringProperty);
111         dataTypeDefinition.setProperties(propertyDefinitionList);
112         final String myDataType = "com.data.type.my";
113         dataTypeDefinition.setType(myDataType);
114         dataTypes.put(myDataType, dataTypeDefinition);
115
116         final AttributeConverter attributeConverter = new AttributeConverter(dataTypes);
117         final AttributeDefinition attributeDefinition = new AttributeDefinition();
118         attributeDefinition.setType(myDataType);
119         attributeDefinition.setDescription("aDescription");
120         attributeDefinition.setStatus("aStatus");
121         final Map<String, Object> defaultValueMap = new HashMap<>();
122         defaultValueMap.put("aStringProperty", "aStringPropertyValue");
123         defaultValueMap.put("anIntegerProperty", 0);
124         final String defaultValue = parseToJsonString(defaultValueMap);
125         attributeDefinition.setDefaultValue(defaultValue);
126         //when
127         final ToscaAttribute actualToscaAttribute = attributeConverter.convert(attributeDefinition);
128         //then
129         assertAttribute(attributeDefinition, defaultValueMap, actualToscaAttribute);
130     }
131
132     @Test
133     void testInvalidDefaultValueJsonConversion() {
134         //given
135         final AttributeConverter attributeConverter = new AttributeConverter(Collections.emptyMap());
136         final AttributeDefinition attributeDefinition = new AttributeDefinition();
137         attributeDefinition.setDefaultValue(": thisIsAnInvalidJson");
138         //when, then
139         final ToscaConversionException toscaConversionException = assertThrows(ToscaConversionException.class,
140             () -> attributeConverter.convert(attributeDefinition));
141         assertEquals("Failed to parse json value", toscaConversionException.getMessage());
142     }
143
144     private void assertAttribute(final AttributeDefinition expectedAttributeDefinition, final ToscaAttribute actualToscaAttribute) {
145         assertAttribute(expectedAttributeDefinition, expectedAttributeDefinition.get_default(), actualToscaAttribute);
146     }
147
148     private void assertAttribute(final AttributeDefinition expectedAttributeDefinition, final Object expectedDefault,
149                                  final ToscaAttribute actualToscaAttribute) {
150         assertEquals(expectedAttributeDefinition.getType(), actualToscaAttribute.getType());
151         assertEquals(expectedAttributeDefinition.getDescription(), actualToscaAttribute.getDescription());
152         assertEquals(expectedAttributeDefinition.getStatus(), actualToscaAttribute.getStatus());
153         if (expectedAttributeDefinition.getEntry_schema() == null) {
154             assertNull(actualToscaAttribute.getEntrySchema());
155         } else {
156             assertEquals(expectedAttributeDefinition.getEntry_schema().getType(),
157                 actualToscaAttribute.getEntrySchema().getType());
158             assertEquals(
159                 expectedAttributeDefinition.getEntry_schema().getDescription(),
160                 actualToscaAttribute.getEntrySchema().getDescription());
161         }
162         assertEquals(expectedDefault, actualToscaAttribute.getDefault());
163     }
164
165     private String parseToJsonString(final Object value) throws JsonProcessingException {
166         final ObjectMapper objectMapper = new ObjectMapper();
167         return objectMapper.writeValueAsString(value);
168     }
169
170 }