re base code
[sdc.git] / test-apis-ci / src / main / java / org / openecomp / sdc / ci / tests / execute / product / ProductBaseTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 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.ci.tests.execute.product;
22
23 import com.google.gson.Gson;
24 import com.google.gson.reflect.TypeToken;
25 import org.junit.rules.TestName;
26 import org.openecomp.sdc.be.model.User;
27 import org.openecomp.sdc.be.model.category.CategoryDefinition;
28 import org.openecomp.sdc.be.model.category.GroupingDefinition;
29 import org.openecomp.sdc.be.model.category.SubCategoryDefinition;
30 import org.openecomp.sdc.ci.tests.api.ComponentBaseTest;
31 import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
32 import org.openecomp.sdc.ci.tests.datatypes.http.RestResponse;
33 import org.openecomp.sdc.ci.tests.utils.general.ElementFactory;
34 import org.openecomp.sdc.ci.tests.utils.rest.BaseRestUtils;
35 import org.openecomp.sdc.ci.tests.utils.rest.CategoryRestUtils;
36 import org.openecomp.sdc.ci.tests.utils.rest.ResponseParser;
37 import org.testng.annotations.BeforeMethod;
38
39 import java.io.IOException;
40 import java.util.ArrayList;
41 import java.util.List;
42
43 import static org.openecomp.sdc.ci.tests.utils.rest.BaseRestUtils.PRODUCT_COMPONENT_TYPE;
44
45 public abstract class ProductBaseTest extends ComponentBaseTest {
46         User productStrategistUser1;
47         User productStrategistUser2;
48         User productStrategistUser3;
49         User productManager1;
50         User productManager2;
51         User adminUser;
52         User designerUser;
53
54         // Category1->Subcategory1->Grouping1
55         protected List<CategoryDefinition> defaultCategories;
56
57         protected static String auditAction;
58         protected static ComponentOperationEnum operation;
59
60         public ProductBaseTest(TestName testName, String className) {
61                 super(testName, className);
62         }
63
64         @BeforeMethod
65         public void beforeProductTest() throws IOException, Exception {
66                 productStrategistUser1 = ElementFactory.getDefaultUser(UserRoleEnum.PRODUCT_STRATEGIST1);
67                 productStrategistUser2 = ElementFactory.getDefaultUser(UserRoleEnum.PRODUCT_STRATEGIST2);
68                 productStrategistUser3 = ElementFactory.getDefaultUser(UserRoleEnum.PRODUCT_STRATEGIST3);
69                 productManager1 = ElementFactory.getDefaultUser(UserRoleEnum.PRODUCT_MANAGER1);
70                 productManager2 = ElementFactory.getDefaultUser(UserRoleEnum.PRODUCT_MANAGER2);
71                 adminUser = ElementFactory.getDefaultUser(UserRoleEnum.ADMIN);
72                 designerUser = ElementFactory.getDefaultUser(UserRoleEnum.DESIGNER);
73                 createDefaultChain();
74         }
75
76         private void createDefaultChain() throws Exception {
77                 CategoryDefinition productCategoryDefinition = ElementFactory.getDefaultCategory();
78                 SubCategoryDefinition productSubCategoryDefinition = ElementFactory.getDefaultSubCategory();
79                 GroupingDefinition productGroupingDefinition = ElementFactory.getDefaultGroup();
80                 productCategoryDefinition.addSubCategory(productSubCategoryDefinition);
81                 productSubCategoryDefinition.addGrouping(productGroupingDefinition);
82                 List<CategoryDefinition> definitionsList = new ArrayList<>();
83                 definitionsList.add(productCategoryDefinition);
84                 defaultCategories = createCategoriesChain(definitionsList);
85         }
86
87         private List<CategoryDefinition> createCategoriesChain(List<CategoryDefinition> categoryDefinitions)
88                         throws Exception {
89                 for (CategoryDefinition categoryDefinition : categoryDefinitions) {
90                         RestResponse createCategory = CategoryRestUtils.createCategory(categoryDefinition, productStrategistUser1,
91                                         PRODUCT_COMPONENT_TYPE);
92                         int status = createCategory.getErrorCode().intValue();
93                         if (status == BaseRestUtils.STATUS_CODE_CREATED) {
94                                 String categoryId = ResponseParser.getUniqueIdFromResponse(createCategory);
95                                 categoryDefinition.setUniqueId(categoryId);
96                         }
97                         List<SubCategoryDefinition> subcategories = categoryDefinition.getSubcategories();
98                         for (SubCategoryDefinition subCategoryDefinition : subcategories) {
99                                 RestResponse createSubCategory = CategoryRestUtils.createSubCategory(subCategoryDefinition,
100                                                 categoryDefinition, productStrategistUser1, PRODUCT_COMPONENT_TYPE);
101                                 status = createSubCategory.getErrorCode().intValue();
102                                 if (status == BaseRestUtils.STATUS_CODE_CREATED) {
103                                         String subCategoryId = ResponseParser.getUniqueIdFromResponse(createSubCategory);
104                                         subCategoryDefinition.setUniqueId(subCategoryId);
105                                 }
106                                 List<GroupingDefinition> groupings = subCategoryDefinition.getGroupings();
107                                 for (GroupingDefinition groupingDefinition : groupings) {
108                                         RestResponse createGroupingRest = CategoryRestUtils.createGrouping(groupingDefinition,
109                                                         subCategoryDefinition, categoryDefinition, productStrategistUser1, PRODUCT_COMPONENT_TYPE);
110                                         status = createGroupingRest.getErrorCode().intValue();
111                                         if (status == BaseRestUtils.STATUS_CODE_CREATED) {
112                                                 String groupingId = ResponseParser.getUniqueIdFromResponse(createGroupingRest);
113                                                 groupingDefinition.setUniqueId(groupingId);
114                                         }
115                                 }
116                         }
117                 }
118                 RestResponse allCategories = CategoryRestUtils.getAllCategories(productStrategistUser1, PRODUCT_COMPONENT_TYPE);
119                 Gson gson = new Gson();
120                 List<CategoryDefinition> res = gson.fromJson(allCategories.getResponse(),
121                                 new TypeToken<List<CategoryDefinition>>() {
122                                 }.getType());
123                 return res;
124         }
125
126         // Category1->Subcategory1->[Grouping1, Grouping11]
127         protected List<CategoryDefinition> addSecondGroupingToDefaultCategory() throws Exception {
128                 GroupingDefinition productGroupingDefinition = ElementFactory.getDefaultGroup();
129                 productGroupingDefinition.setName("Grouping11");
130                 defaultCategories.get(0).getSubcategories().get(0).addGrouping(productGroupingDefinition);
131                 return createCategoriesChain(defaultCategories);
132         }
133
134         // Category1->[Subcategory1->[Grouping1,
135         // Grouping11],Subcategory2->[Grouping12]]
136         protected List<CategoryDefinition> addSubcategoryAndGroupingToDefaultCategory() throws Exception {
137                 GroupingDefinition groupingDefinition1 = ElementFactory.getDefaultGroup();
138                 groupingDefinition1.setName("Grouping11");
139                 defaultCategories.get(0).getSubcategories().get(0).addGrouping(groupingDefinition1);
140
141                 SubCategoryDefinition subCategory2 = ElementFactory.getDefaultSubCategory();
142                 subCategory2.setName("Subcategory2");
143                 GroupingDefinition groupingDefinition2 = ElementFactory.getDefaultGroup();
144                 groupingDefinition2.setName("Grouping12");
145                 subCategory2.addGrouping(groupingDefinition2);
146                 defaultCategories.get(0).addSubCategory(subCategory2);
147                 return createCategoriesChain(defaultCategories);
148         }
149
150         // [Category1->[Subcategory1->[Grouping1,
151         // Grouping11],Subcategory2->[Grouping12]],
152         // Category2->[Subcategory1->[Grouping1],Subcategory2->[Grouping1]],
153         // Category3->[Subcategory1->[Grouping11],Subcategory2->[Grouping11,
154         // Grouping22]]]
155         protected List<CategoryDefinition> addManyGroupingsDiffCategories() throws Exception {
156                 CategoryDefinition category2 = ElementFactory.getDefaultCategory();
157                 category2.setName("Category2");
158                 CategoryDefinition category3 = ElementFactory.getDefaultCategory();
159                 category3.setName("Category3");
160                 SubCategoryDefinition subCategory1 = ElementFactory.getDefaultSubCategory();
161                 subCategory1.setName("Subcategory1");
162                 SubCategoryDefinition subCategory2 = ElementFactory.getDefaultSubCategory();
163                 subCategory2.setName("Subcategory2");
164                 SubCategoryDefinition subCategory1_2 = ElementFactory.getDefaultSubCategory();
165                 subCategory1_2.setName("Subcategory1");
166                 SubCategoryDefinition subCategory2_2 = ElementFactory.getDefaultSubCategory();
167                 subCategory2_2.setName("Subcategory2");
168                 SubCategoryDefinition subCategory1_3 = ElementFactory.getDefaultSubCategory();
169                 subCategory1_3.setName("Subcategory1");
170                 SubCategoryDefinition subCategory2_3 = ElementFactory.getDefaultSubCategory();
171                 subCategory2_3.setName("Subcategory2");
172
173                 GroupingDefinition groupingDefinition1 = ElementFactory.getDefaultGroup();
174                 groupingDefinition1.setName("Grouping1");
175                 GroupingDefinition groupingDefinition11 = ElementFactory.getDefaultGroup();
176                 groupingDefinition11.setName("Grouping11");
177                 GroupingDefinition groupingDefinition12 = ElementFactory.getDefaultGroup();
178                 groupingDefinition12.setName("Grouping12");
179                 GroupingDefinition groupingDefinition22 = ElementFactory.getDefaultGroup();
180                 groupingDefinition22.setName("Grouping22");
181
182                 defaultCategories.get(0).getSubcategories().get(0).addGrouping(groupingDefinition11);
183                 subCategory2.addGrouping(groupingDefinition12);
184                 defaultCategories.get(0).addSubCategory(subCategory2);
185
186                 defaultCategories.add(category2);
187                 defaultCategories.add(category3);
188                 category2.addSubCategory(subCategory1_2);
189                 category2.addSubCategory(subCategory2_2);
190                 subCategory1_2.addGrouping(groupingDefinition1);
191                 subCategory2_2.addGrouping(groupingDefinition1);
192                 category3.addSubCategory(subCategory1_3);
193                 category3.addSubCategory(subCategory2_3);
194                 subCategory1_3.addGrouping(groupingDefinition11);
195                 subCategory2_3.addGrouping(groupingDefinition11);
196                 subCategory2_3.addGrouping(groupingDefinition22);
197                 return createCategoriesChain(defaultCategories);
198         }
199 }