Fix locally failing TCs in catalog-be
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / servlets / ComponentServletTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
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
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
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=========================================================
19  */
20
21 package org.openecomp.sdc.be.servlets;
22
23 import static java.util.Arrays.asList;
24 import static org.assertj.core.api.Assertions.assertThat;
25 import static org.mockito.ArgumentMatchers.any;
26 import static org.mockito.ArgumentMatchers.eq;
27 import static org.mockito.Mockito.mock;
28 import static org.mockito.Mockito.when;
29
30 import fj.data.Either;
31 import java.util.Collections;
32 import javax.ws.rs.client.Invocation;
33 import javax.ws.rs.core.MediaType;
34 import javax.ws.rs.core.Response;
35 import org.glassfish.jersey.server.ResourceConfig;
36 import org.glassfish.jersey.test.TestProperties;
37 import org.json.JSONArray;
38 import org.json.JSONObject;
39 import org.junit.jupiter.api.AfterEach;
40 import org.junit.jupiter.api.BeforeEach;
41 import org.junit.jupiter.api.Test;
42 import org.openecomp.sdc.be.components.impl.ComponentBusinessLogicProvider;
43 import org.openecomp.sdc.be.components.impl.ResourceBusinessLogic;
44 import org.openecomp.sdc.be.components.utils.PolicyDefinitionBuilder;
45 import org.openecomp.sdc.be.impl.ComponentsUtils;
46 import org.openecomp.sdc.be.model.PolicyDefinition;
47 import org.openecomp.sdc.be.model.User;
48 import org.openecomp.sdc.be.ui.model.UiComponentDataTransfer;
49 import org.openecomp.sdc.be.user.UserBusinessLogic;
50 import org.openecomp.sdc.common.api.Constants;
51
52 class ComponentServletTest extends JerseySpringBaseTest {
53
54     private static final String USER_ID = "userId";
55     private static final String RESOURCE_ID = "resourceId";
56     private ResourceBusinessLogic resourceBusinessLogic;
57     private PolicyDefinition policy1, policy2;
58
59     @Override
60     @BeforeEach
61     public void setUp() throws Exception {
62         super.setUp();
63         policy1 = buildPolicy("p1");
64         policy2 = buildPolicy("p2");
65     }
66
67     @AfterEach
68     void after() throws Exception {
69         super.tearDown();
70     }
71
72     @Override
73     protected ResourceConfig configure() {
74         forceSet(TestProperties.CONTAINER_PORT, "0");
75         resourceBusinessLogic = mock(ResourceBusinessLogic.class);
76         UserBusinessLogic userBusinessLogic = mock(UserBusinessLogic.class);
77         ComponentsUtils componentsUtils = mock(ComponentsUtils.class);
78         ComponentServlet componentServlet = new ComponentServlet(userBusinessLogic, componentsUtils,
79             new ComponentBusinessLogicProvider(resourceBusinessLogic, null, null));
80         return super.configure().register(componentServlet);
81     }
82
83     @Test
84     void filterDataByParam_getPolicies_returnOnlyNameTargetsAndIdFields() {
85         UiComponentDataTransfer dataTransfer = buildDataTransferWithPolicies();
86         when(resourceBusinessLogic.getComponentDataFilteredByParams(eq(RESOURCE_ID.toLowerCase()), any(User.class),
87             eq(Collections.singletonList("policies")))).thenReturn(Either.left(dataTransfer));
88         UiComponentDataTransfer uiComponentDataTransfer = buildGetPolicyTypesCall().get(UiComponentDataTransfer.class);
89         assertThat(uiComponentDataTransfer.getPolicies())
90             .usingElementComparatorOnFields("name", "uniqueId", "targets")
91             .containsExactlyInAnyOrder(policy1, policy2)
92             .extracting("properties")//properties is not returned in the response
93             .containsExactly(null, null);
94     }
95
96     @Test
97     void filterDataByParam_getPolicies_policyTypeNameFieldShouldReturnAsType() {
98         UiComponentDataTransfer dataTransfer = buildDataTransferWithPolicies();
99         when(resourceBusinessLogic.getComponentDataFilteredByParams(eq(RESOURCE_ID.toLowerCase()), any(User.class),
100             eq(Collections.singletonList("policies")))).thenReturn(Either.left(dataTransfer));
101         Response uiComponentDataTransfer = buildGetPolicyTypesCall().get();
102         verifyPolicyTypeFieldUsingJsonResponse(uiComponentDataTransfer);
103     }
104
105     private void verifyPolicyTypeFieldUsingJsonResponse(Response uiComponentDataTransfer) {
106         JSONObject json = new JSONObject(uiComponentDataTransfer.readEntity(String.class));
107         JSONArray policies = json.getJSONArray("policies");
108         for (int i = 0; i < policies.length(); i++) {
109             JSONObject policy = policies.getJSONObject(i);
110             String policyId = policy.get("uniqueId").toString();
111             assertThat(policy.get("type")).isEqualTo("type" + policyId);
112         }
113     }
114
115     private UiComponentDataTransfer buildDataTransferWithPolicies() {
116         UiComponentDataTransfer res = new UiComponentDataTransfer();
117         res.setPolicies(asList(policy1, policy2));
118         return res;
119     }
120
121     private PolicyDefinition buildPolicy(String id) {
122         return PolicyDefinitionBuilder.create()
123             .setUniqueId(id)
124             .setName("name" + id)
125             .setType("type" + id)
126             .addGroupTarget("group1")
127             .addGroupTarget("group2")
128             .addComponentInstanceTarget("inst1")
129             .addComponentInstanceTarget("inst2")
130             .addProperty("prop1")
131             .build();
132     }
133
134     private Invocation.Builder buildGetPolicyTypesCall() {
135         return target("/v1/catalog/resources/{id}/filteredDataByParams")
136             .queryParam("include", "policies")
137             .resolveTemplate("id", RESOURCE_ID)
138             .request(MediaType.APPLICATION_JSON)
139             .header(Constants.USER_ID_HEADER, USER_ID);
140     }
141 }