2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2025-2026 OpenInfra Foundation Europe. 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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
21 package org.onap.policy.clamp.models.acm.document.concepts;
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.junit.jupiter.api.Assertions.assertEquals;
27 import java.util.List;
29 import org.junit.jupiter.api.Test;
30 import org.onap.policy.clamp.models.acm.document.base.DocConceptKey;
31 import org.onap.policy.models.base.PfKey;
32 import org.onap.policy.models.tosca.authorative.concepts.ToscaCapabilityType;
33 import org.onap.policy.models.tosca.authorative.concepts.ToscaConstraint;
34 import org.onap.policy.models.tosca.authorative.concepts.ToscaDataType;
35 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeType;
36 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
37 import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty;
38 import org.onap.policy.models.tosca.authorative.concepts.ToscaRelationshipType;
39 import org.onap.policy.models.tosca.authorative.concepts.ToscaRequirement;
40 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
41 import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate;
43 class DocToscaServiceTemplateTest {
45 private static final String NAME = "name";
46 private static final String NAME_VERSION = "name:0.0.0";
50 var serviceTemplate = new ToscaServiceTemplate();
51 serviceTemplate.setName(PfKey.NULL_KEY_NAME);
52 serviceTemplate.setVersion(PfKey.NULL_KEY_VERSION);
53 var doc = new DocToscaServiceTemplate(serviceTemplate);
54 assertThat(doc.toAuthorative()).isNotNull();
55 assertThat(doc).isNotEqualByComparingTo(null)
56 .isEqualByComparingTo(doc);
58 var doc2 = new DocToscaServiceTemplate(doc);
59 assertThat(doc2.toAuthorative()).isNotNull();
60 assertThat(doc).isEqualByComparingTo(doc2);
62 serviceTemplate.setToscaTopologyTemplate(new ToscaTopologyTemplate());
63 doc = new DocToscaServiceTemplate(serviceTemplate);
64 assertThat(doc).isNotEqualByComparingTo(doc2);
65 doc2.setToscaTopologyTemplate(doc.getToscaTopologyTemplate());
66 assertThat(doc).isEqualByComparingTo(doc2);
68 serviceTemplate.setDataTypes(Map.of(NAME, new ToscaDataType()));
69 doc = new DocToscaServiceTemplate(serviceTemplate);
70 assertThat(doc).isNotEqualByComparingTo(doc2);
71 doc2.setDataTypes(doc.getDataTypes());
72 assertThat(doc).isEqualByComparingTo(doc2);
74 serviceTemplate.setCapabilityTypes(Map.of(NAME, new ToscaCapabilityType()));
75 doc = new DocToscaServiceTemplate(serviceTemplate);
76 assertThat(doc).isNotEqualByComparingTo(doc2);
77 doc2.setCapabilityTypes(doc.getCapabilityTypes());
78 assertThat(doc).isEqualByComparingTo(doc2);
80 serviceTemplate.setRelationshipTypes(Map.of(NAME, new ToscaRelationshipType()));
81 doc = new DocToscaServiceTemplate(serviceTemplate);
82 assertThat(doc).isNotEqualByComparingTo(doc2);
83 doc2.setRelationshipTypes(doc.getRelationshipTypes());
84 assertThat(doc).isEqualByComparingTo(doc2);
86 serviceTemplate.setNodeTypes(Map.of(NAME, new ToscaNodeType()));
87 doc = new DocToscaServiceTemplate(serviceTemplate);
88 assertThat(doc).isNotEqualByComparingTo(doc2);
89 doc2.setNodeTypes(doc.getNodeTypes());
90 assertThat(doc).isEqualByComparingTo(doc2);
92 serviceTemplate.setPolicyTypes(Map.of(NAME, new ToscaPolicyType()));
93 doc = new DocToscaServiceTemplate(serviceTemplate);
94 assertThat(doc).isNotEqualByComparingTo(doc2);
95 doc2.setPolicyTypes(doc.getPolicyTypes());
96 assertThat(doc).isEqualByComparingTo(doc2);
97 assertThat(doc.toAuthorative()).isEqualTo(doc2.toAuthorative());
98 assertThat(doc.validate("serviceTemplate")).isNotNull();
100 serviceTemplate.setName(NAME);
101 serviceTemplate.setVersion("1.1.1");
102 doc.fromAuthorative(serviceTemplate);
103 assertThat(doc.toAuthorative()).isNotNull();
107 void testToscaDataType() {
108 var serviceTemplate = new ToscaServiceTemplate();
109 var dataType = new ToscaDataType();
110 serviceTemplate.setDataTypes(Map.of(NAME, dataType));
111 var toscaConstraint = new ToscaConstraint();
112 toscaConstraint.setRangeValues(List.of("value"));
113 toscaConstraint.setValidValues(List.of("value"));
114 var doc = new DocToscaServiceTemplate(serviceTemplate);
115 var doc2 = new DocToscaServiceTemplate(doc);
117 dataType.setConstraints(List.of(toscaConstraint));
118 doc = new DocToscaServiceTemplate(serviceTemplate);
119 assertThat(doc).isNotEqualByComparingTo(doc2);
120 doc2.setDataTypes(Map.of(NAME_VERSION, doc.getDataTypes().get(NAME_VERSION)));
121 assertThat(doc).isEqualByComparingTo(doc2);
122 assertThat(doc.toAuthorative()).isEqualTo(doc2.toAuthorative());
124 var property = new ToscaProperty();
125 property.setType("type");
126 dataType.setProperties(Map.of(NAME, property));
127 doc = new DocToscaServiceTemplate(serviceTemplate);
128 assertThat(doc).isNotEqualByComparingTo(doc2);
132 void testDocToscaEntity() {
133 var serviceTemplate = new ToscaServiceTemplate();
134 var doc = new DocToscaServiceTemplate(serviceTemplate);
135 assertThat(doc.getType()).isNull();
136 assertThat(doc.getTypeVersion()).isNull();
137 assertThat(doc.getDefinedName()).isEqualTo("tosca");
138 assertThat(doc.getDefinedVersion()).isEqualTo("1.0.0");
140 serviceTemplate.setDerivedFrom(NAME);
141 var doc2 = new DocToscaServiceTemplate(doc);
142 doc = new DocToscaServiceTemplate(serviceTemplate);
143 assertThat(doc).isNotEqualByComparingTo(doc2);
144 doc2.setDerivedFrom(doc.getDerivedFrom());
145 assertThat(doc).isEqualByComparingTo(doc2);
147 serviceTemplate.setDescription("Description");
148 doc = new DocToscaServiceTemplate(serviceTemplate);
149 assertThat(doc).isNotEqualByComparingTo(doc2);
150 doc2.setDescription(doc.getDescription());
151 assertThat(doc).isEqualByComparingTo(doc2);
153 serviceTemplate.setMetadata(Map.of("key", "value"));
154 doc = new DocToscaServiceTemplate(serviceTemplate);
155 assertThat(doc).isNotEqualByComparingTo(doc2);
156 doc2.setMetadata(doc.getMetadata());
157 assertThat(doc).isEqualByComparingTo(doc2);
159 var d = new DocToscaEntity<ToscaServiceTemplate>();
160 var result = doc.compareTo(d);
161 assertThat(result).isNotZero();
165 void testDocToscaNodeType() {
166 var serviceTemplate = new ToscaServiceTemplate();
167 var nodeType = new ToscaNodeType();
168 serviceTemplate.setNodeTypes(Map.of(NAME, nodeType));
169 var doc = new DocToscaServiceTemplate(serviceTemplate);
170 var doc2 = new DocToscaServiceTemplate(doc);
171 var docNodeType = doc.getNodeTypes().get(NAME_VERSION);
172 doc2.setNodeTypes(Map.of(NAME_VERSION, docNodeType));
173 assertThat(doc).isEqualByComparingTo(doc2);
175 var requirement = new ToscaRequirement();
176 requirement.setType(NAME);
177 requirement.setTypeVersion("1.0.0");
178 nodeType.setRequirements(List.of(Map.of(NAME, requirement)));
179 doc = new DocToscaServiceTemplate(serviceTemplate);
180 assertThat(doc).isNotEqualByComparingTo(doc2);
181 docNodeType = doc.getNodeTypes().get(NAME_VERSION);
182 doc2.getNodeTypes().get(NAME_VERSION).setRequirements(docNodeType.getRequirements());
183 assertThat(doc).isEqualByComparingTo(doc2);
185 var docRequirement = docNodeType.getRequirements().get(0).get(NAME_VERSION);
186 assertThat(docRequirement)
187 .isNotEqualByComparingTo(null)
188 .isEqualByComparingTo(docRequirement);
190 assertThat(doc.toAuthorative()).isEqualTo(doc2.toAuthorative());
191 doc2 = new DocToscaServiceTemplate(doc);
192 assertThat(doc.toAuthorative()).isEqualTo(doc2.toAuthorative());
196 void testDocToscaProperty() {
197 var serviceTemplate = new ToscaServiceTemplate();
198 var property = new ToscaProperty();
199 property.setType("type");
200 var nodeType = new ToscaNodeType();
201 nodeType.setProperties(Map.of(NAME, property));
202 serviceTemplate.setNodeTypes(Map.of(NAME, nodeType));
203 var doc = new DocToscaServiceTemplate(serviceTemplate);
204 var doc2 = new DocToscaServiceTemplate(doc);
206 property.setDescription("Description");
207 doc = new DocToscaServiceTemplate(serviceTemplate);
208 assertThat(doc).isNotEqualByComparingTo(doc2);
209 var docNodeType = doc2.getNodeTypes().get(NAME_VERSION);
210 var docProperty = docNodeType.getProperties().get(NAME);
211 docProperty.setDescription(property.getDescription());
212 assertThat(doc).isEqualByComparingTo(doc2);
214 property.setRequired(true);
215 doc = new DocToscaServiceTemplate(serviceTemplate);
216 assertThat(doc).isNotEqualByComparingTo(doc2);
217 docProperty.setRequired(property.isRequired());
218 assertThat(doc).isEqualByComparingTo(doc2);
220 property.setDefaultValue("Default");
221 doc = new DocToscaServiceTemplate(serviceTemplate);
222 assertThat(doc).isNotEqualByComparingTo(doc2);
223 docProperty.setDefaultValue(property.getDefaultValue());
224 assertThat(doc).isEqualByComparingTo(doc2);
226 property.setStatus(ToscaProperty.Status.SUPPORTED);
227 doc = new DocToscaServiceTemplate(serviceTemplate);
228 assertThat(doc).isNotEqualByComparingTo(doc2);
229 docProperty.setStatus(property.getStatus());
230 assertThat(doc).isEqualByComparingTo(doc2);
234 void testNullPointer() {
235 var docCapabilityType = new DocToscaCapabilityType();
236 assertThatThrownBy(() -> docCapabilityType.validate(null)). isInstanceOf(NullPointerException.class);
238 var docConceptKey = new DocConceptKey();
239 assertThatThrownBy(() -> docConceptKey.setName(null)). isInstanceOf(NullPointerException.class);
240 assertThatThrownBy(() -> docConceptKey.setVersion(null)). isInstanceOf(NullPointerException.class);
241 assertEquals("NULL", docConceptKey.getKey().getName());
242 assertThat(docConceptKey.getKeys()).hasSize(1);