1 package org.openecomp.sdc.be.servlets;
3 import com.fasterxml.jackson.databind.DeserializationFeature;
4 import com.google.common.collect.ImmutableMap;
5 import com.google.common.collect.Sets;
7 import org.glassfish.jersey.client.ClientConfig;
8 import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJaxbJsonProvider;
9 import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJsonProvider;
10 import org.glassfish.jersey.server.ResourceConfig;
11 import org.junit.Before;
12 import org.junit.BeforeClass;
13 import org.junit.Test;
14 import org.openecomp.sdc.be.components.impl.GroupTypeBusinessLogic;
15 import org.openecomp.sdc.be.components.utils.GroupTypeBuilder;
16 import org.openecomp.sdc.be.components.validation.UserValidations;
17 import org.openecomp.sdc.be.config.ConfigurationManager;
18 import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
19 import org.openecomp.sdc.be.dao.titan.TitanGenericDao;
20 import org.openecomp.sdc.be.datatypes.elements.GroupTypeDataDefinition;
21 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
22 import org.openecomp.sdc.be.impl.ComponentsUtils;
23 import org.openecomp.sdc.be.model.GroupTypeDefinition;
24 import org.openecomp.sdc.be.model.User;
25 import org.openecomp.sdc.be.model.operations.api.DerivedFromOperation;
26 import org.openecomp.sdc.be.model.operations.impl.*;
27 import org.openecomp.sdc.be.resources.data.GroupTypeData;
28 import org.openecomp.sdc.common.api.ConfigurationSource;
29 import org.openecomp.sdc.common.api.Constants;
30 import org.openecomp.sdc.common.impl.ExternalConfiguration;
31 import org.openecomp.sdc.common.impl.FSConfigurationSource;
32 import org.springframework.context.annotation.Bean;
33 import org.springframework.context.annotation.Import;
35 import javax.ws.rs.client.Invocation;
36 import javax.ws.rs.core.GenericType;
37 import javax.ws.rs.core.MediaType;
38 import java.util.HashSet;
39 import java.util.List;
42 import java.util.stream.Stream;
44 import static java.util.Arrays.asList;
45 import static org.assertj.core.api.Assertions.assertThat;
46 import static org.mockito.ArgumentMatchers.*;
47 import static org.mockito.Mockito.mock;
48 import static org.mockito.Mockito.when;
49 import static org.mockito.Mockito.mock;
50 import static org.mockito.Mockito.when;
52 public class GroupTypesEndpointTest extends JerseySpringBaseTest {
54 private static final String USER_ID = "a001";
55 private static final GroupTypeDefinition EMPTY_GROUP_TYPE = new GroupTypeDefinition();
56 private static final String COMPONENT_TYPE = "VF";
57 private static final HashSet<String> EXCLUDED_TYPES = Sets.newHashSet("Root", "Heat");
59 private static ComponentsUtils componentsUtils;
60 private static TitanGenericDao titanGenericDao;
61 private static CapabilityTypeOperation capabilityTypeOperation;
62 private static DerivedFromOperation derivedFromOperation;
63 private static TitanDao titanDao;
64 private static PropertyOperation propertyOperation;
65 private static CapabilityOperation capabilityOperation;
66 private static UserValidations userValidations;
67 private static OperationUtils operationUtils;
68 private static User user;
70 static ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), "src/test/resources/config/catalog-be");
71 static ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
73 @org.springframework.context.annotation.Configuration
74 @Import(BaseTestConfig.class)
75 static class GroupTypesTestConfig {
78 GroupTypesEndpoint groupTypesEndpoint() {
79 return new GroupTypesEndpoint(groupTypeBusinessLogic());
83 GroupTypeBusinessLogic groupTypeBusinessLogic() {
84 return new GroupTypeBusinessLogic(groupTypeOperation(), titanDao, userValidations, componentsUtils);
88 GroupTypeOperation groupTypeOperation() {
89 return new GroupTypeOperation(titanGenericDao, propertyOperation, capabilityTypeOperation, capabilityOperation, derivedFromOperation, operationUtils);
94 public static void initClass() {
95 componentsUtils = mock(ComponentsUtils.class);
96 propertyOperation = mock(PropertyOperation.class);
97 capabilityTypeOperation = mock(CapabilityTypeOperation.class);
98 titanDao = mock(TitanDao.class);
99 titanGenericDao = mock(TitanGenericDao.class);
100 userValidations = mock(UserValidations.class);
101 operationUtils = mock(OperationUtils.class);
102 user = mock(User.class);
107 when(userValidations.validateUserExists(eq(USER_ID), anyString(), anyBoolean())).thenReturn(user);
108 when(titanGenericDao.getByCriteriaWithPredicate(eq(NodeTypeEnum.GroupType), any(), eq(GroupTypeData.class))).thenReturn(Either.left(buildGroupTypeDataList()));
112 protected void configureClient(ClientConfig config) {
113 final JacksonJsonProvider jacksonJsonProvider = new JacksonJaxbJsonProvider().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
114 config.register(jacksonJsonProvider);
118 protected ResourceConfig configure() {
119 return super.configure(GroupTypesTestConfig.class)
120 .register(GroupTypesEndpoint.class);
124 public void verifyExclusionMapIsCaseInsensitive() {
125 Map<String, Set<String>> excludedGroupTypesMapping = configurationManager.getConfiguration().getExcludedGroupTypesMapping();
126 assertThat(excludedGroupTypesMapping.get(COMPONENT_TYPE)).hasSameElementsAs(excludedGroupTypesMapping.get(COMPONENT_TYPE.toLowerCase()));
130 public void getGroupTypes_validUser_Success() {
131 List<GroupTypeDefinition> testConfigGroupTypes = buildGroupTypesList();
132 List<GroupTypeDefinition> fetchedGroupTypes = buildGetGroupTypesCall(USER_ID, COMPONENT_TYPE).get(new GenericType<List<GroupTypeDefinition>>(){});
133 verifyGroupTypesList(testConfigGroupTypes, fetchedGroupTypes);
137 public void getGroupTypes_whenNoInteranlComponentType_passEmptyAsExcludedTypes() {
138 List<GroupTypeDefinition> testConfigGroupTypes = buildGroupTypesList();
139 List<GroupTypeDefinition> fetchedGroupTypes = buildGetGroupTypesCallNoInternalComponent(USER_ID).get(new GenericType<List<GroupTypeDefinition>>(){});
140 verifyGroupTypesList(testConfigGroupTypes, fetchedGroupTypes);
143 private void verifyGroupTypesList(List<GroupTypeDefinition> groupTypes, List<GroupTypeDefinition> fetchedGroupTypes) {
144 String[] expectedReturnFields = {"version", "type", "uniqueId", "name", "icon"};
145 assertThat(fetchedGroupTypes)
146 .usingElementComparatorOnFields(expectedReturnFields)
147 .isEqualTo(groupTypes);
148 verifyOnlySpecificFieldsInResponse(fetchedGroupTypes, expectedReturnFields);
151 private void verifyOnlySpecificFieldsInResponse(List<GroupTypeDefinition> fetchedGroupTypes, String ... fields) {
152 assertThat(fetchedGroupTypes)
153 .usingElementComparatorIgnoringFields(fields)
154 .containsOnly(EMPTY_GROUP_TYPE);
157 private Invocation.Builder buildGetGroupTypesCall(String userId, String componentType) {
158 return target("/v1/catalog/groupTypes")
159 .queryParam("internalComponentType", componentType)
160 .request(MediaType.APPLICATION_JSON)
161 .header(Constants.USER_ID_HEADER, userId);
164 private Invocation.Builder buildGetGroupTypesCallNoInternalComponent(String userId) {
165 return target("/v1/catalog/groupTypes")
166 .request(MediaType.APPLICATION_JSON)
167 .header(Constants.USER_ID_HEADER, userId);
170 private Map<String, Set<String>> buildExcludeGroupTypesMap() {
171 return new ImmutableMap.Builder<String, Set<String>>()
172 .put("CR", Sets.newHashSet("VFModule", "Root", "Heat"))
173 .put(COMPONENT_TYPE, EXCLUDED_TYPES)
178 private List<GroupTypeDefinition> buildGroupTypesList() {
179 GroupTypeDefinition type1 = GroupTypeBuilder.create()
180 .setDerivedFrom("root")
181 .setType("org.openecomp.groups.VfModule")
184 .setName("vf module")
185 .setIcon("vf module icon")
187 GroupTypeDefinition type2 = GroupTypeBuilder.create()
188 .setDerivedFrom("root")
189 .setType("org.openecomp.groups.NetworkCollection")
192 .setName("network collection")
193 .setIcon("network collection icon")
195 return asList(type1, type2);
198 private List<GroupTypeData> buildGroupTypeDataList() {
199 GroupTypeDataDefinition d1 = new GroupTypeDataDefinition();
200 d1.setType("org.openecomp.groups.VfModule");
201 d1.setDerivedFrom("root");
202 d1.setUniqueId("id1");
203 d1.setVersion("1.0");
204 d1.setName("vf module");
205 d1.setIcon("vf module icon");
206 GroupTypeData gt1 = new GroupTypeData(d1);
207 GroupTypeDataDefinition d2 = new GroupTypeDataDefinition();
208 d2.setType("org.openecomp.groups.NetworkCollection");
209 d2.setDerivedFrom("root");
210 d2.setUniqueId("id2");
211 d2.setVersion("1.0");
212 d2.setName("network collection");
213 d2.setIcon("network collection icon");
214 GroupTypeData gt2 = new GroupTypeData(d2);
215 return asList(gt1, gt2);
218 private GroupTypeDefinition[] listOfEmptyGroupTypes(int size) {
219 return Stream.generate(GroupTypeDefinition::new).limit(size).toArray(GroupTypeDefinition[]::new);