2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.be.servlets;
23 import com.fasterxml.jackson.databind.DeserializationFeature;
24 import com.google.common.collect.ImmutableMap;
25 import com.google.common.collect.Sets;
26 import fj.data.Either;
27 import org.glassfish.jersey.client.ClientConfig;
28 import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJaxbJsonProvider;
29 import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJsonProvider;
30 import org.glassfish.jersey.server.ResourceConfig;
31 import org.junit.Before;
32 import org.junit.BeforeClass;
33 import org.junit.Test;
34 import org.openecomp.sdc.be.components.impl.GroupTypeBusinessLogic;
35 import org.openecomp.sdc.be.components.utils.GroupTypeBuilder;
36 import org.openecomp.sdc.be.components.validation.UserValidations;
37 import org.openecomp.sdc.be.config.ConfigurationManager;
38 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphGenericDao;
39 import org.openecomp.sdc.be.dao.jsongraph.JanusGraphDao;
40 import org.openecomp.sdc.be.datatypes.elements.GroupTypeDataDefinition;
41 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
42 import org.openecomp.sdc.be.impl.ComponentsUtils;
43 import org.openecomp.sdc.be.model.GroupTypeDefinition;
44 import org.openecomp.sdc.be.model.User;
45 import org.openecomp.sdc.be.model.operations.api.DerivedFromOperation;
46 import org.openecomp.sdc.be.model.operations.impl.CapabilityOperation;
47 import org.openecomp.sdc.be.model.operations.impl.CapabilityTypeOperation;
48 import org.openecomp.sdc.be.model.operations.impl.GroupTypeOperation;
49 import org.openecomp.sdc.be.model.operations.impl.OperationUtils;
50 import org.openecomp.sdc.be.model.operations.impl.PropertyOperation;
51 import org.openecomp.sdc.be.resources.data.GroupTypeData;
52 import org.openecomp.sdc.be.user.UserBusinessLogic;
53 import org.openecomp.sdc.common.api.ConfigurationSource;
54 import org.openecomp.sdc.common.api.Constants;
55 import org.openecomp.sdc.common.impl.ExternalConfiguration;
56 import org.openecomp.sdc.common.impl.FSConfigurationSource;
57 import org.springframework.context.annotation.Bean;
58 import org.springframework.context.annotation.Import;
60 import javax.ws.rs.client.Invocation;
61 import javax.ws.rs.core.GenericType;
62 import javax.ws.rs.core.MediaType;
63 import java.util.HashSet;
64 import java.util.List;
67 import java.util.stream.Stream;
69 import static java.util.Arrays.asList;
70 import static org.assertj.core.api.Assertions.assertThat;
71 import static org.mockito.ArgumentMatchers.any;
72 import static org.mockito.ArgumentMatchers.eq;
73 import static org.mockito.Mockito.mock;
74 import static org.mockito.Mockito.when;
76 public class GroupTypesEndpointTest extends JerseySpringBaseTest {
78 private static final String USER_ID = "a001";
79 private static final GroupTypeDefinition EMPTY_GROUP_TYPE = new GroupTypeDefinition();
80 private static final String COMPONENT_TYPE = "VF";
81 private static final HashSet<String> EXCLUDED_TYPES = Sets.newHashSet("Root", "Heat");
83 private static ComponentsUtils componentsUtils;
84 private static JanusGraphGenericDao janusGraphGenericDao;
85 private static CapabilityTypeOperation capabilityTypeOperation;
86 private static DerivedFromOperation derivedFromOperation;
87 private static JanusGraphDao janusGraphDao;
88 private static PropertyOperation propertyOperation;
89 private static CapabilityOperation capabilityOperation;
90 private static UserValidations userValidations;
91 private static OperationUtils operationUtils;
92 private static User user;
94 static ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), "src/test/resources/config/catalog-be");
95 static ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
97 @org.springframework.context.annotation.Configuration
98 @Import(BaseTestConfig.class)
99 static class GroupTypesTestConfig {
102 GroupTypesEndpoint groupTypesEndpoint() {
103 UserBusinessLogic userBusinessLogic = mock(UserBusinessLogic.class);
104 ComponentsUtils componentsUtils = mock(ComponentsUtils.class);
105 return new GroupTypesEndpoint(userBusinessLogic, componentsUtils, groupTypeBusinessLogic());
109 GroupTypeBusinessLogic groupTypeBusinessLogic() {
110 return new GroupTypeBusinessLogic(groupTypeOperation(), janusGraphDao, userValidations, componentsUtils);
114 GroupTypeOperation groupTypeOperation() {
115 return new GroupTypeOperation(janusGraphGenericDao, propertyOperation, capabilityTypeOperation, capabilityOperation, derivedFromOperation, operationUtils);
120 public static void initClass() {
121 componentsUtils = mock(ComponentsUtils.class);
122 propertyOperation = mock(PropertyOperation.class);
123 capabilityTypeOperation = mock(CapabilityTypeOperation.class);
124 janusGraphDao = mock(JanusGraphDao.class);
125 janusGraphGenericDao = mock(JanusGraphGenericDao.class);
126 userValidations = mock(UserValidations.class);
127 operationUtils = mock(OperationUtils.class);
128 user = mock(User.class);
133 when(userValidations.validateUserExists(eq(USER_ID))).thenReturn(user);
134 when(janusGraphGenericDao.getByCriteriaWithPredicate(eq(NodeTypeEnum.GroupType), any(), eq(GroupTypeData.class))).thenReturn(Either.left(buildGroupTypeDataList()));
138 protected void configureClient(ClientConfig config) {
139 final JacksonJsonProvider jacksonJsonProvider = new JacksonJaxbJsonProvider().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
140 config.register(jacksonJsonProvider);
144 protected ResourceConfig configure() {
145 return super.configure(GroupTypesTestConfig.class)
146 .register(GroupTypesEndpoint.class);
150 public void verifyExclusionMapIsCaseInsensitive() {
151 Map<String, Set<String>> excludedGroupTypesMapping = configurationManager.getConfiguration().getExcludedGroupTypesMapping();
152 assertThat(excludedGroupTypesMapping.get(COMPONENT_TYPE)).hasSameElementsAs(excludedGroupTypesMapping.get(COMPONENT_TYPE.toLowerCase()));
156 public void getGroupTypes_validUser_Success() {
157 List<GroupTypeDefinition> testConfigGroupTypes = buildGroupTypesList();
158 List<GroupTypeDefinition> fetchedGroupTypes = buildGetGroupTypesCall(USER_ID, COMPONENT_TYPE).get(new GenericType<List<GroupTypeDefinition>>(){});
159 verifyGroupTypesList(testConfigGroupTypes, fetchedGroupTypes);
163 public void getGroupTypes_whenNoInteranlComponentType_passEmptyAsExcludedTypes() {
164 List<GroupTypeDefinition> testConfigGroupTypes = buildGroupTypesList();
165 List<GroupTypeDefinition> fetchedGroupTypes = buildGetGroupTypesCallNoInternalComponent(USER_ID).get(new GenericType<List<GroupTypeDefinition>>(){});
166 verifyGroupTypesList(testConfigGroupTypes, fetchedGroupTypes);
169 private void verifyGroupTypesList(List<GroupTypeDefinition> groupTypes, List<GroupTypeDefinition> fetchedGroupTypes) {
170 String[] expectedReturnFields = {"version", "type", "uniqueId", "name", "icon"};
171 assertThat(fetchedGroupTypes)
172 .usingElementComparatorOnFields(expectedReturnFields)
173 .isEqualTo(groupTypes);
174 verifyOnlySpecificFieldsInResponse(fetchedGroupTypes, expectedReturnFields);
177 private void verifyOnlySpecificFieldsInResponse(List<GroupTypeDefinition> fetchedGroupTypes, String ... fields) {
178 assertThat(fetchedGroupTypes)
179 .usingElementComparatorIgnoringFields(fields)
180 .containsOnly(EMPTY_GROUP_TYPE);
183 private Invocation.Builder buildGetGroupTypesCall(String userId, String componentType) {
184 return target("/v1/catalog/groupTypes")
185 .queryParam("internalComponentType", componentType)
186 .request(MediaType.APPLICATION_JSON)
187 .header(Constants.USER_ID_HEADER, userId);
190 private Invocation.Builder buildGetGroupTypesCallNoInternalComponent(String userId) {
191 return target("/v1/catalog/groupTypes")
192 .request(MediaType.APPLICATION_JSON)
193 .header(Constants.USER_ID_HEADER, userId);
196 private Map<String, Set<String>> buildExcludeGroupTypesMap() {
197 return new ImmutableMap.Builder<String, Set<String>>()
198 .put("CR", Sets.newHashSet("VFModule", "Root", "Heat"))
199 .put(COMPONENT_TYPE, EXCLUDED_TYPES)
204 private List<GroupTypeDefinition> buildGroupTypesList() {
205 GroupTypeDefinition type1 = GroupTypeBuilder.create()
206 .setDerivedFrom("root")
207 .setType("org.openecomp.groups.VfModule")
210 .setName("vf module")
211 .setIcon("vf module icon")
213 GroupTypeDefinition type2 = GroupTypeBuilder.create()
214 .setDerivedFrom("root")
215 .setType("org.openecomp.groups.NetworkCollection")
218 .setName("network collection")
219 .setIcon("network collection icon")
221 return asList(type1, type2);
224 private List<GroupTypeData> buildGroupTypeDataList() {
225 GroupTypeDataDefinition d1 = new GroupTypeDataDefinition();
226 d1.setType("org.openecomp.groups.VfModule");
227 d1.setDerivedFrom("root");
228 d1.setUniqueId("id1");
229 d1.setVersion("1.0");
230 d1.setName("vf module");
231 d1.setIcon("vf module icon");
232 GroupTypeData gt1 = new GroupTypeData(d1);
233 GroupTypeDataDefinition d2 = new GroupTypeDataDefinition();
234 d2.setType("org.openecomp.groups.NetworkCollection");
235 d2.setDerivedFrom("root");
236 d2.setUniqueId("id2");
237 d2.setVersion("1.0");
238 d2.setName("network collection");
239 d2.setIcon("network collection icon");
240 GroupTypeData gt2 = new GroupTypeData(d2);
241 return asList(gt1, gt2);
244 private GroupTypeDefinition[] listOfEmptyGroupTypes(int size) {
245 return Stream.generate(GroupTypeDefinition::new).limit(size).toArray(GroupTypeDefinition[]::new);