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());
99 serviceTemplate.setName(NAME);
100 serviceTemplate.setVersion("1.1.1");
101 doc.fromAuthorative(serviceTemplate);
102 assertThat(doc.toAuthorative()).isNotNull();
106 void testToscaDataType() {
107 var serviceTemplate = new ToscaServiceTemplate();
108 var dataType = new ToscaDataType();
109 serviceTemplate.setDataTypes(Map.of(NAME, dataType));
110 var toscaConstraint = new ToscaConstraint();
111 toscaConstraint.setRangeValues(List.of("value"));
112 toscaConstraint.setValidValues(List.of("value"));
113 var doc = new DocToscaServiceTemplate(serviceTemplate);
114 var doc2 = new DocToscaServiceTemplate(doc);
116 dataType.setConstraints(List.of(toscaConstraint));
117 doc = new DocToscaServiceTemplate(serviceTemplate);
118 assertThat(doc).isNotEqualByComparingTo(doc2);
119 doc2.setDataTypes(Map.of(NAME_VERSION, doc.getDataTypes().get(NAME_VERSION)));
120 assertThat(doc).isEqualByComparingTo(doc2);
121 assertThat(doc.toAuthorative()).isEqualTo(doc2.toAuthorative());
123 var property = new ToscaProperty();
124 property.setType("type");
125 dataType.setProperties(Map.of(NAME, property));
126 doc = new DocToscaServiceTemplate(serviceTemplate);
127 assertThat(doc).isNotEqualByComparingTo(doc2);
131 void testDocToscaEntity() {
132 var serviceTemplate = new ToscaServiceTemplate();
133 var doc = new DocToscaServiceTemplate(serviceTemplate);
134 assertThat(doc.getType()).isNull();
135 assertThat(doc.getTypeVersion()).isNull();
136 assertThat(doc.getDefinedName()).isEqualTo("tosca");
137 assertThat(doc.getDefinedVersion()).isEqualTo("1.0.0");
139 serviceTemplate.setDerivedFrom(NAME);
140 var doc2 = new DocToscaServiceTemplate(doc);
141 doc = new DocToscaServiceTemplate(serviceTemplate);
142 assertThat(doc).isNotEqualByComparingTo(doc2);
143 doc2.setDerivedFrom(doc.getDerivedFrom());
144 assertThat(doc).isEqualByComparingTo(doc2);
146 serviceTemplate.setDescription("Description");
147 doc = new DocToscaServiceTemplate(serviceTemplate);
148 assertThat(doc).isNotEqualByComparingTo(doc2);
149 doc2.setDescription(doc.getDescription());
150 assertThat(doc).isEqualByComparingTo(doc2);
152 serviceTemplate.setMetadata(Map.of("key", "value"));
153 doc = new DocToscaServiceTemplate(serviceTemplate);
154 assertThat(doc).isNotEqualByComparingTo(doc2);
155 doc2.setMetadata(doc.getMetadata());
156 assertThat(doc).isEqualByComparingTo(doc2);
158 var d = new DocToscaEntity<ToscaServiceTemplate>();
159 var result = doc.compareTo(d);
160 assertThat(result).isNotZero();
164 void testDocToscaNodeType() {
165 var serviceTemplate = new ToscaServiceTemplate();
166 var nodeType = new ToscaNodeType();
167 serviceTemplate.setNodeTypes(Map.of(NAME, nodeType));
168 var doc = new DocToscaServiceTemplate(serviceTemplate);
169 var doc2 = new DocToscaServiceTemplate(doc);
170 var docNodeType = doc.getNodeTypes().get(NAME_VERSION);
171 doc2.setNodeTypes(Map.of(NAME_VERSION, docNodeType));
172 assertThat(doc).isEqualByComparingTo(doc2);
174 var requirement = new ToscaRequirement();
175 requirement.setType(NAME);
176 requirement.setTypeVersion("1.0.0");
177 nodeType.setRequirements(List.of(Map.of(NAME, requirement)));
178 doc = new DocToscaServiceTemplate(serviceTemplate);
179 assertThat(doc).isNotEqualByComparingTo(doc2);
180 docNodeType = doc.getNodeTypes().get(NAME_VERSION);
181 doc2.getNodeTypes().get(NAME_VERSION).setRequirements(docNodeType.getRequirements());
182 assertThat(doc).isEqualByComparingTo(doc2);
184 var docRequirement = docNodeType.getRequirements().get(0).get(NAME_VERSION);
185 assertThat(docRequirement)
186 .isNotEqualByComparingTo(null)
187 .isEqualByComparingTo(docRequirement);
189 assertThat(doc.toAuthorative()).isEqualTo(doc2.toAuthorative());
190 doc2 = new DocToscaServiceTemplate(doc);
191 assertThat(doc.toAuthorative()).isEqualTo(doc2.toAuthorative());
195 void testDocToscaProperty() {
196 var serviceTemplate = new ToscaServiceTemplate();
197 var property = new ToscaProperty();
198 property.setType("type");
199 var nodeType = new ToscaNodeType();
200 nodeType.setProperties(Map.of(NAME, property));
201 serviceTemplate.setNodeTypes(Map.of(NAME, nodeType));
202 var doc = new DocToscaServiceTemplate(serviceTemplate);
203 var doc2 = new DocToscaServiceTemplate(doc);
205 property.setDescription("Description");
206 doc = new DocToscaServiceTemplate(serviceTemplate);
207 assertThat(doc).isNotEqualByComparingTo(doc2);
208 var docNodeType = doc2.getNodeTypes().get(NAME_VERSION);
209 var docProperty = docNodeType.getProperties().get(NAME);
210 docProperty.setDescription(property.getDescription());
211 assertThat(doc).isEqualByComparingTo(doc2);
213 property.setRequired(true);
214 doc = new DocToscaServiceTemplate(serviceTemplate);
215 assertThat(doc).isNotEqualByComparingTo(doc2);
216 docProperty.setRequired(property.isRequired());
217 assertThat(doc).isEqualByComparingTo(doc2);
219 property.setDefaultValue("Default");
220 doc = new DocToscaServiceTemplate(serviceTemplate);
221 assertThat(doc).isNotEqualByComparingTo(doc2);
222 docProperty.setDefaultValue(property.getDefaultValue());
223 assertThat(doc).isEqualByComparingTo(doc2);
225 property.setStatus(ToscaProperty.Status.SUPPORTED);
226 doc = new DocToscaServiceTemplate(serviceTemplate);
227 assertThat(doc).isNotEqualByComparingTo(doc2);
228 docProperty.setStatus(property.getStatus());
229 assertThat(doc).isEqualByComparingTo(doc2);
233 void testNullPointer() {
234 var docConceptKey = new DocConceptKey();
235 assertThatThrownBy(() -> docConceptKey.setName(null)). isInstanceOf(NullPointerException.class);
236 assertThatThrownBy(() -> docConceptKey.setVersion(null)). isInstanceOf(NullPointerException.class);
237 assertEquals("NULL", docConceptKey.getKey().getName());
238 assertThat(docConceptKey.getKeys()).hasSize(1);