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