Milestone updates
[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.assertNotNull;
24 import static org.junit.jupiter.api.Assertions.assertNull;
25 import static org.junit.jupiter.api.Assertions.assertThrows;
26
27 import com.fasterxml.jackson.core.JsonProcessingException;
28 import com.fasterxml.jackson.databind.ObjectMapper;
29 import java.util.ArrayList;
30 import java.util.Collections;
31 import java.util.HashMap;
32 import java.util.List;
33 import java.util.Map;
34 import org.junit.jupiter.api.Test;
35 import org.onap.sdc.tosca.datatypes.model.EntrySchema;
36 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
37 import org.openecomp.sdc.be.datatypes.elements.SchemaDefinition;
38 import org.openecomp.sdc.be.model.AttributeDefinition;
39 import org.openecomp.sdc.be.model.DataTypeDefinition;
40 import org.openecomp.sdc.be.model.PropertyDefinition;
41 import org.openecomp.sdc.be.model.tosca.ToscaPropertyType;
42 import org.openecomp.sdc.be.tosca.exception.ToscaConversionException;
43 import org.openecomp.sdc.be.tosca.model.ToscaAttribute;
44 import org.openecomp.sdc.be.tosca.model.ToscaSchemaDefinition;
45
46 class AttributeConverterTest {
47
48     @Test
49     void testScalarTypeConversion() throws ToscaConversionException {
50         //given
51         final AttributeConverter attributeConverter = createTestSubject();
52         final AttributeDefinition attributeDefinition = new AttributeDefinition();
53         attributeDefinition.setType(ToscaPropertyType.STRING.getType());
54         attributeDefinition.setDescription("aDescription");
55         attributeDefinition.setStatus("aStatus");
56         attributeDefinition.setDefaultValue("aDefaultValue");
57         //when
58         final ToscaAttribute actualToscaAttribute = attributeConverter.convert(attributeDefinition);
59         //then
60         assertAttribute(attributeDefinition, actualToscaAttribute);
61     }
62
63     @Test
64     void testScalarNoDefaultValueConversion() throws ToscaConversionException {
65         //given
66         final AttributeConverter attributeConverter = createTestSubject();
67         final AttributeDefinition attributeDefinition = new AttributeDefinition();
68         attributeDefinition.setType(ToscaPropertyType.STRING.getType());
69         attributeDefinition.setDescription("aDescription");
70         attributeDefinition.setStatus("aStatus");
71         //when
72         final ToscaAttribute actualToscaAttribute = attributeConverter.convert(attributeDefinition);
73         //then
74         assertAttribute(attributeDefinition, null, actualToscaAttribute);
75     }
76
77     @Test
78     void testListTypeConversion() throws JsonProcessingException, ToscaConversionException {
79         //given
80         final Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
81         final AttributeConverter attributeConverter = new AttributeConverter(dataTypes);
82         final AttributeDefinition attributeDefinition = new AttributeDefinition();
83         attributeDefinition.setType(ToscaPropertyType.LIST.getType());
84         attributeDefinition.setDescription("aDescription");
85         attributeDefinition.setStatus("aStatus");
86         attributeDefinition.setSchema(new SchemaDefinition());
87         attributeDefinition.getSchema().setProperty(new PropertyDataDefinition());
88         attributeDefinition.getSchema().getProperty().setType(ToscaPropertyType.LIST.getType());
89         attributeDefinition.getSchema().getProperty().setDescription("anEntrySchemaDescription");
90         final List<String> defaultValueList = new ArrayList<>();
91         defaultValueList.add("entry1");
92         defaultValueList.add("entry2");
93         defaultValueList.add("entry2");
94         attributeDefinition.setDefaultValue(parseToJsonString(defaultValueList));
95         //when
96         final ToscaAttribute actualToscaAttribute = attributeConverter.convert(attributeDefinition);
97         //then
98         assertAttribute(attributeDefinition, defaultValueList, actualToscaAttribute);
99     }
100
101     @Test
102     void testDataTypeTypeConversion() throws JsonProcessingException, ToscaConversionException {
103         //given
104         final Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
105         final DataTypeDefinition dataTypeDefinition = new DataTypeDefinition();
106         final List<PropertyDefinition> propertyDefinitionList = new ArrayList<>();
107         final PropertyDefinition integerProperty = new PropertyDefinition();
108         integerProperty.setName("anIntegerProperty");
109         integerProperty.setType(ToscaPropertyType.INTEGER.getType());
110         propertyDefinitionList.add(integerProperty);
111         final PropertyDefinition stringProperty = new PropertyDefinition();
112         stringProperty.setName("aStringProperty");
113         stringProperty.setType(ToscaPropertyType.STRING.getType());
114         propertyDefinitionList.add(stringProperty);
115         dataTypeDefinition.setProperties(propertyDefinitionList);
116         final String myDataType = "com.data.type.my";
117         dataTypeDefinition.setType(myDataType);
118         dataTypes.put(myDataType, dataTypeDefinition);
119
120         final AttributeConverter attributeConverter = new AttributeConverter(dataTypes);
121         final AttributeDefinition attributeDefinition = new AttributeDefinition();
122         attributeDefinition.setType(myDataType);
123         attributeDefinition.setDescription("aDescription");
124         attributeDefinition.setStatus("aStatus");
125         final Map<String, Object> defaultValueMap = new HashMap<>();
126         defaultValueMap.put("aStringProperty", "aStringPropertyValue");
127         defaultValueMap.put("anIntegerProperty", 0);
128         final String defaultValue = parseToJsonString(defaultValueMap);
129         attributeDefinition.setDefaultValue(defaultValue);
130         //when
131         final ToscaAttribute actualToscaAttribute = attributeConverter.convert(attributeDefinition);
132         //then
133         assertAttribute(attributeDefinition, defaultValueMap, actualToscaAttribute);
134     }
135
136     @Test
137     void testInvalidDefaultValueJsonConversion() {
138         //given
139         final AttributeConverter attributeConverter = createTestSubject();
140         final AttributeDefinition attributeDefinition = new AttributeDefinition();
141         attributeDefinition.setDefaultValue(": thisIsAnInvalidJson");
142         //when, then
143         final ToscaAttribute attribute = attributeConverter.convert(attributeDefinition);
144         assertNotNull(attribute);
145         assertNull(attribute.getDefault());
146     }
147
148     @Test
149     void testConvertAndAddDefaultValue() throws ToscaConversionException {
150         final AttributeConverter converter = createTestSubject();
151         final AttributeDefinition attribute = new AttributeDefinition();
152         attribute.setName("attrib");
153         attribute.setDefaultValue("default");
154         final Map<String, Object> attribs = new HashMap<>();
155         converter.convertAndAddValue(attribs, attribute);
156         assertEquals(0, attribs.size());
157     }
158
159     @Test
160     void testConvertAndAddValue() throws ToscaConversionException {
161         final AttributeConverter converter = createTestSubject();
162         final AttributeDefinition attribute = new AttributeDefinition();
163         attribute.setName("attrib");
164         attribute.setValue("value");
165         final Map<String, Object> attribs = new HashMap<>();
166         converter.convertAndAddValue(attribs, attribute);
167         assertEquals(1, attribs.size());
168         assertEquals("value", attribs.get("attrib"));
169     }
170
171     private AttributeConverter createTestSubject() {
172         return new AttributeConverter(Collections.emptyMap());
173     }
174
175     private void assertAttribute(final AttributeDefinition expectedAttributeDefinition, final ToscaAttribute actualToscaAttribute) {
176         assertAttribute(expectedAttributeDefinition, expectedAttributeDefinition.get_default(), actualToscaAttribute);
177     }
178
179     private void assertAttribute(final AttributeDefinition expectedAttributeDefinition, final Object expectedDefault,
180                                  final ToscaAttribute actualToscaAttribute) {
181         assertEquals(expectedAttributeDefinition.getType(), actualToscaAttribute.getType());
182         assertEquals(expectedAttributeDefinition.getDescription(), actualToscaAttribute.getDescription());
183         assertEquals(expectedAttributeDefinition.getStatus(), actualToscaAttribute.getStatus());
184         if (expectedAttributeDefinition.getSchema() == null) {
185             assertNull(actualToscaAttribute.getEntrySchema());
186         } else {
187             assertEquals(expectedAttributeDefinition.getSchema().getProperty().getType(),
188                 actualToscaAttribute.getEntrySchema().getType());
189             assertEquals(
190                 expectedAttributeDefinition.getSchema().getProperty().getDescription(),
191                 actualToscaAttribute.getEntrySchema().getDescription());
192         }
193         assertEquals(expectedDefault, actualToscaAttribute.getDefault());
194     }
195
196     private String parseToJsonString(final Object value) throws JsonProcessingException {
197         final ObjectMapper objectMapper = new ObjectMapper();
198         return objectMapper.writeValueAsString(value);
199     }
200
201 }