Catalog alignment
[sdc.git] / ui-ci / src / main / java / org / openecomp / sdc / ci / tests / execute / sanity / PropertiesAssignmentUpdateFlow.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.sanity;
22
23 import com.aventstack.extentreports.Status;
24 import fj.data.Either;
25 import org.apache.commons.lang3.StringUtils;
26 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
27 import org.openecomp.sdc.be.model.ComponentInstance;
28 import org.openecomp.sdc.be.model.Resource;
29 import org.openecomp.sdc.be.model.User;
30 import org.openecomp.sdc.ci.tests.datatypes.CanvasElement;
31 import org.openecomp.sdc.ci.tests.datatypes.CanvasManager;
32 import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
33 import org.openecomp.sdc.ci.tests.datatypes.ResourceReqDetails;
34 import org.openecomp.sdc.ci.tests.datatypes.ServiceReqDetails;
35 import org.openecomp.sdc.ci.tests.datatypes.TopMenuButtonsEnum;
36 import org.openecomp.sdc.ci.tests.datatypes.VendorLicenseModel;
37 import org.openecomp.sdc.ci.tests.datatypes.VendorSoftwareProductObject;
38 import org.openecomp.sdc.ci.tests.datatypes.enums.LifeCycleStatesEnum;
39 import org.openecomp.sdc.ci.tests.datatypes.enums.NormativeTypesEnum;
40 import org.openecomp.sdc.ci.tests.datatypes.enums.ResourceCategoryEnum;
41 import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
42 import org.openecomp.sdc.ci.tests.datatypes.http.RestResponse;
43 import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
44 import org.openecomp.sdc.ci.tests.pages.CompositionPage;
45 import org.openecomp.sdc.ci.tests.pages.DeploymentArtifactPage;
46 import org.openecomp.sdc.ci.tests.pages.GeneralPageElements;
47 import org.openecomp.sdc.ci.tests.pages.HeatParamNameBuilder;
48 import org.openecomp.sdc.ci.tests.pages.HomePage;
49 import org.openecomp.sdc.ci.tests.pages.PropertiesAssignmentPage;
50 import org.openecomp.sdc.ci.tests.pages.PropertiesPage;
51 import org.openecomp.sdc.ci.tests.pages.PropertyNameBuilder;
52 import org.openecomp.sdc.ci.tests.pages.ResourceGeneralPage;
53 import org.openecomp.sdc.ci.tests.utilities.CatalogUIUtilitis;
54 import org.openecomp.sdc.ci.tests.utilities.FileHandling;
55 import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
56 import org.openecomp.sdc.ci.tests.utilities.ResourceUIUtils;
57 import org.openecomp.sdc.ci.tests.utils.general.AtomicOperationUtils;
58 import org.openecomp.sdc.ci.tests.utils.general.ElementFactory;
59 import org.openecomp.sdc.ci.tests.utils.general.OnboardingUtillViaApis;
60 import org.openecomp.sdc.ci.tests.utils.general.VendorLicenseModelRestUtils;
61 import org.openecomp.sdc.ci.tests.utils.general.VendorSoftwareProductRestUtils;
62 import org.openecomp.sdc.ci.tests.verificator.PropertiesAssignmentVerificator;
63 import org.openecomp.sdc.ci.tests.verificator.VfVerificator;
64 import org.testng.annotations.BeforeClass;
65 import org.testng.annotations.BeforeMethod;
66 import org.testng.annotations.DataProvider;
67 import org.testng.annotations.Test;
68
69 import java.util.List;
70
71 import static org.testng.Assert.assertTrue;
72
73 public class PropertiesAssignmentUpdateFlow extends SetupCDTest {
74
75     private static String filePath;
76     private static String origFile = "virc_fe_be.csar";
77     private static String origFile1 = "virc.csar";
78     protected User sdncDesignerDetails = ElementFactory.getDefaultUser(UserRoleEnum.DESIGNER);
79
80
81     @BeforeClass
82     public void beforeClass() {
83         filePath = FileHandling.getFilePath("");
84     }
85
86     @BeforeMethod
87     public void beforeTest() {
88         System.out.println("File repository is : " + filePath);
89     }
90
91     @DataProvider(name = "assetFilesInputs", parallel = false)
92     public Object[][] createDataInputs() {
93         return new Object[][]{
94                 {"editInputValueTopChange.csar", ""},
95                 {"editInputValueNoTopChange.csar", "Updated-SRE-Mgt"}};
96     }
97
98     /**
99      * Topoplogy change in updated file - designer changes in inputs values are not kept after update
100      * No topoplogy change in updated file - designer changes in inputs values are kept after update
101      *
102      * @param updFileName     - csar for update
103      * @param validationValue - expected property value after update
104      * @throws Exception
105      */
106     @Test(dataProvider = "assetFilesInputs")
107     public void updateInputDefaultValueTest(String updFileName, String validationValue) throws Exception {
108         setLog(updFileName);
109
110         String origTestFile = origFile;
111         String componentName = "abstract_virc_fe_be_0";
112         String inputName = "management_net_name";
113         String inputUpdValue = "Updated-SRE-Mgt";
114
115         //Import csar
116         ResourceReqDetails resourceMetaData = ElementFactory.getDefaultResourceByType("ciRes", NormativeTypesEnum.ROOT,
117                 ResourceCategoryEnum.APPLICATION_L4_DATABASE, getUser().getUserId(), ResourceTypeEnum.VF.toString());
118         resourceMetaData.setVersion("0.1");
119         ResourceUIUtils.importVfFromCsar(resourceMetaData, filePath, origTestFile, getUser());
120
121         //Edit Input value
122         ResourceGeneralPage.getLeftMenu().moveToPropertiesAssignmentScreen();
123         PropertiesAssignmentPage.clickOnComponentInComposition(componentName);
124         PropertiesAssignmentPage.clickOnInputTab();
125         PropertiesAssignmentPage.editPropertyValue(PropertyNameBuilder.buildInputField(inputName), inputUpdValue);
126         PropertiesAssignmentPage.clickOnSaveButton();
127
128         //Certify  VF via API
129         Resource resource = AtomicOperationUtils.getResourceObjectByNameAndVersion(UserRoleEnum.DESIGNER, resourceMetaData.getName(), "0.1");
130         resource = (Resource) AtomicOperationUtils.changeComponentState(resource, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CERTIFY, true).getLeft();
131
132
133         HomePage.navigateToHomePage();
134         CatalogUIUtilitis.clickTopMenuButton(TopMenuButtonsEnum.CATALOG);
135         GeneralUIUtils.findComponentAndClick(resourceMetaData.getName());
136
137         //Update VF
138         ResourceGeneralPage.getLeftMenu().moveToGeneralScreen();
139         GeneralPageElements.clickCheckoutButton();
140         SetupCDTest.getExtendTest().log(Status.INFO, String.format("Updating VF with new file"));
141         ResourceUIUtils.updateVfWithCsar(filePath, updFileName);
142
143         //Validate Input value - 1) empty in case of topology change; 2) user value is kept if no topology change
144         ResourceGeneralPage.getLeftMenu().moveToPropertiesAssignmentScreen();
145         PropertiesAssignmentPage.clickOnComponentInComposition(componentName);
146         PropertiesAssignmentPage.clickOnInputTab();
147         PropertiesAssignmentVerificator.validatePropertyValue(PropertyNameBuilder.buildInputField(inputName), validationValue);
148
149     }
150
151
152     @DataProvider(name = "assetFilesProperties", parallel = false)
153     public Object[][] createDataProp() {
154         return new Object[][]{
155                 {"editedPropValueToEmpty.csar", "value-prop-vm_type_tag", "updated_by_designer"},
156                 {"newPropValueToEmpty.csar", "value-prop-high_availablity", "updated_by_designer"},
157                 {"editedPropValueToNew.csar", "value-prop-vm_type_tag", "updated_by_file"},
158                 {"editedPropValueToEmptyTopChange.csar", "value-prop-vm_type_tag", ""},
159                 {"newPropValueToEmptyTopChange.csar", "value-prop-high_availablity", ""},
160                 {"editedPropValueToNewTopChange.csar", "value-prop-vm_type_tag", "updated_by_file"}};
161
162     }
163
164     /**
165      * No topoplogy change in updated file - designer changes in properties values are kept after update
166      * OrigFile       Designer       UpdFile       Result After Update
167      * ---------------------------------------------------------------
168      * prop1=value1   prop1=value2   prop1=null    prop1=value2
169      * prop1=null     prop1=value1   prop1=null    prop1=value1
170      * prop1=value1   prop1=value2   prop1=value3  prop1=value3
171      *
172      *
173      * Topoplogy change in updated file - designer changes in properties values are not kept after update
174      * OrigFile       Designer       UpdFile       Result After Update
175      * ---------------------------------------------------------------
176      * prop1=value1   prop1=value2   prop1=null    prop1=null
177      * prop1=null     prop1=value1   prop1=null    prop1=null
178      * prop1=value1   prop1=value2   prop1=value3  prop1=value3
179      *
180      * @param updFileName     - csar for update
181      * @param propertyName
182      * @param validationValue - expected property value after update
183      * @throws Exception
184      */
185     @Test(dataProvider = "assetFilesProperties")
186     public void updatePropertyDefaultValueTest(String updFileName, String propertyName, String validationValue) throws Exception {
187         setLog(updFileName);
188         String origTestFile = origFile;
189         String componentName = "abstract_virc_fe_be_0";
190         String propertyUpdValue = "updated_by_designer";
191
192         //Import csar
193         ResourceReqDetails resourceMetaData = ElementFactory.getDefaultResourceByType("ciRes", NormativeTypesEnum.ROOT,
194                 ResourceCategoryEnum.APPLICATION_L4_DATABASE, getUser().getUserId(), ResourceTypeEnum.VF.toString());
195         resourceMetaData.setVersion("0.1");
196         ResourceUIUtils.importVfFromCsar(resourceMetaData, filePath, origTestFile, getUser());
197
198         //Edit Input value
199         ResourceGeneralPage.getLeftMenu().moveToPropertiesAssignmentScreen();
200         PropertiesAssignmentPage.clickOnComponentInComposition(componentName);
201         PropertiesAssignmentPage.editPropertyValue(propertyName, propertyUpdValue);
202         PropertiesAssignmentPage.clickOnSaveButton();
203
204         //Certify  VF via API
205         Resource resource = AtomicOperationUtils.getResourceObjectByNameAndVersion(UserRoleEnum.DESIGNER, resourceMetaData.getName(), "0.1");
206         resource = (Resource) AtomicOperationUtils.changeComponentState(resource, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CERTIFY, true).getLeft();
207
208
209         HomePage.navigateToHomePage();
210         CatalogUIUtilitis.clickTopMenuButton(TopMenuButtonsEnum.CATALOG);
211         GeneralUIUtils.findComponentAndClick(resourceMetaData.getName());
212
213         //Update VF
214         ResourceGeneralPage.getLeftMenu().moveToGeneralScreen();
215         GeneralPageElements.clickCheckoutButton();
216         SetupCDTest.getExtendTest().log(Status.INFO, String.format("Updating VF with new file"));
217         ResourceUIUtils.updateVfWithCsar(filePath, updFileName);
218
219         //Validate Input value
220         ResourceGeneralPage.getLeftMenu().moveToPropertiesAssignmentScreen();
221         PropertiesAssignmentPage.clickOnComponentInComposition(componentName);
222         PropertiesAssignmentVerificator.validatePropertyValue(propertyName, validationValue);
223     }
224
225
226     @Test
227     public void updatePropertyChangeVfiVersionTest() throws Throwable {
228         String vnfFile = "vIRC_FE_BE.zip";
229         String componentName = "virc_fe_be_volume_0";
230         String propertyName = "disk_bus";
231         String propertyValue = "added_by_designer";
232         String propertyValueUpd = "updated_by_designer";
233         String inputName = componentName + "_" + propertyName;
234
235         //Import VSP, create VF - v0.1
236         String filePath = org.openecomp.sdc.ci.tests.utils.general.FileHandling.getVnfRepositoryPath();
237         getExtendTest().log(Status.INFO, "Going to upload VNF " + vnfFile);
238         VendorLicenseModel vendorLicenseModel = VendorLicenseModelRestUtils.createVendorLicense(getUser());
239         ResourceReqDetails resourceReqDetails = ElementFactory.getDefaultResource(); //getResourceReqDetails(ComponentConfigurationTypeEnum.DEFAULT);
240         VendorSoftwareProductObject vendorSoftwareProductObject = VendorSoftwareProductRestUtils.createAndFillVendorSoftwareProduct(resourceReqDetails, vnfFile, filePath, sdncDesignerDetails,
241             vendorLicenseModel, null);
242         resourceReqDetails = OnboardingUtillViaApis.prepareOnboardedResourceDetailsBeforeCreate(resourceReqDetails, vendorSoftwareProductObject);
243         Resource resource = OnboardingUtillViaApis.createResourceFromVSP(resourceReqDetails);
244
245         //Edit Property Value and declare as input
246         CatalogUIUtilitis.clickTopMenuButton(TopMenuButtonsEnum.CATALOG);
247         GeneralUIUtils.findComponentAndClick(resourceReqDetails.getName());
248         ResourceGeneralPage.getLeftMenu().moveToPropertiesAssignmentScreen();
249         PropertiesAssignmentPage.clickOnComponentInComposition(componentName);
250         PropertiesAssignmentPage.editPropertyValue(PropertyNameBuilder.buildSimpleField(propertyName), propertyValue);
251         PropertiesAssignmentPage.clickOnSaveButton();
252         PropertiesAssignmentPage.findSearchBoxAndClick(propertyName);
253         PropertiesAssignmentPage.clickOnDeclareButton();
254         PropertiesAssignmentPage.clickOnInputTab();
255         PropertiesAssignmentVerificator.validatePropertyValue(PropertyNameBuilder.buildInputField(inputName), propertyValue);
256
257         //Check in VF and add VFi to Service
258         resource = (Resource) AtomicOperationUtils.changeComponentState(resource, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CHECKIN, true).getLeft();
259         ServiceReqDetails serviceReqDetails = OnboardingUtillViaApis.prepareServiceDetailsBeforeCreate(sdncDesignerDetails);
260         getExtendTest().log(Status.INFO, "Create Service: " + serviceReqDetails.getName());
261         org.openecomp.sdc.be.model.Service service = AtomicOperationUtils.createCustomService(serviceReqDetails, UserRoleEnum.DESIGNER, true).left().value();
262         Either<ComponentInstance, RestResponse> addComponentInstanceToComponentContainer = AtomicOperationUtils.addComponentInstanceToComponentContainer(resource, service, UserRoleEnum.DESIGNER, true);
263         ComponentInstance componentInstance = addComponentInstanceToComponentContainer.left().value();
264
265         //Find the VF input in Service properties, declare it as service input
266         GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.MainMenuButtonsFromInsideFrame.HOME_BUTTON.getValue()).click();
267         GeneralUIUtils.findComponentAndClick(serviceReqDetails.getName());
268         CompositionPage.moveToPropertiesScreen();
269         PropertiesAssignmentVerificator.validatePropertyValue(PropertyNameBuilder.buildSimpleField(inputName), propertyValue);
270         PropertiesAssignmentPage.findSearchBoxAndClick(inputName);
271         PropertiesAssignmentPage.clickOnDeclareButton();
272         PropertiesAssignmentPage.clickOnInputTab();
273         PropertiesAssignmentVerificator.validatePropertyValue(
274                 PropertyNameBuilder.buildServiceDeclaredFieldVfLevel(componentInstance, componentName, propertyName),
275                 propertyValue
276         );
277
278         //Checkout VF, update input value and check in - v0.2
279         resource = (Resource) AtomicOperationUtils.changeComponentState(resource, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CHECKOUT, true).getLeft();
280         GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.MainMenuButtonsFromInsideFrame.HOME_BUTTON.getValue()).click();
281         GeneralUIUtils.findComponentAndClick(resourceReqDetails.getName());
282         ResourceGeneralPage.getLeftMenu().moveToPropertiesAssignmentScreen();
283         PropertiesAssignmentPage.clickOnInputTab();
284         PropertiesAssignmentPage.editPropertyValue(
285                 PropertyNameBuilder.buildDeclaredInputField(componentName, propertyName),
286                 propertyValueUpd
287         );
288 //        PropertiesAssignmentPage.deletePropertyValue(PropertyNameBuilder.buildDeclaredInputField(componentName, propertyName));
289         PropertiesAssignmentPage.clickOnSaveButton();
290         ResourceGeneralPage.clickCheckinButton(resourceReqDetails.getName());
291
292         //Change resource version on service
293         resource = AtomicOperationUtils.getResourceObjectByNameAndVersion(UserRoleEnum.DESIGNER, resource.getName(), "0.2");
294         AtomicOperationUtils.changeComponentInstanceVersion(service, componentInstance, resource, UserRoleEnum.DESIGNER, true);
295
296         //Validate that service contains property with "get_input" value and input with the updated value
297         GeneralUIUtils.findComponentAndClick(serviceReqDetails.getName());
298         CompositionPage.moveToPropertiesScreen();
299         PropertiesAssignmentPage.isPropertyChecked(inputName);
300         PropertiesAssignmentVerificator.validatePropertyValue(
301                 PropertyNameBuilder.buildServicePropertyValue(componentName, propertyName),
302                 PropertyNameBuilder.buildServiceDeclaredPropertyValue(componentInstance, componentName, propertyName)
303         );
304         PropertiesAssignmentPage.clickOnInputTab();
305         PropertiesAssignmentVerificator.validatePropertyValue(
306                 PropertyNameBuilder.buildServiceDeclaredFieldVfLevel(componentInstance, componentName, propertyName),
307                 propertyValueUpd
308         );
309     }
310
311     @Test
312     public void updateServicePropertyChangeVfiVersionTest() throws Throwable {
313         String vnfFile = "vIRC_FE_BE.zip";
314         String componentName = "virc_fe_be_volume_0";
315         String propertyName = "multi_stage_design";
316         String propertyValueBoolean = "TRUE";
317
318         //Import VSP, create VF - v0.1
319         String filePath = org.openecomp.sdc.ci.tests.utils.general.FileHandling.getVnfRepositoryPath();
320         getExtendTest().log(Status.INFO, "Going to upload VNF " + vnfFile);
321         VendorLicenseModel vendorLicenseModel = VendorLicenseModelRestUtils.createVendorLicense(getUser());
322         ResourceReqDetails resourceReqDetails = ElementFactory.getDefaultResource(); //getResourceReqDetails(ComponentConfigurationTypeEnum.DEFAULT);
323         VendorSoftwareProductObject vendorSoftwareProductObject = VendorSoftwareProductRestUtils.createAndFillVendorSoftwareProduct(resourceReqDetails, vnfFile, filePath, sdncDesignerDetails,
324             vendorLicenseModel, null);
325         resourceReqDetails = OnboardingUtillViaApis.prepareOnboardedResourceDetailsBeforeCreate(resourceReqDetails, vendorSoftwareProductObject);
326         Resource resource = OnboardingUtillViaApis.createResourceFromVSP(resourceReqDetails);
327
328         //Check in VF and add VFi to Service
329         resource = (Resource) AtomicOperationUtils.changeComponentState(resource, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CHECKIN, true).getLeft();
330         ServiceReqDetails serviceReqDetails = OnboardingUtillViaApis.prepareServiceDetailsBeforeCreate(sdncDesignerDetails);
331         getExtendTest().log(Status.INFO, "Create Service: " + serviceReqDetails.getName());
332         org.openecomp.sdc.be.model.Service service = AtomicOperationUtils.createCustomService(
333                 serviceReqDetails,
334                 UserRoleEnum.DESIGNER, true
335         ).left().value();
336         Either<ComponentInstance, RestResponse> addComponentInstanceToComponentContainer = AtomicOperationUtils.addComponentInstanceToComponentContainer(resource, service, UserRoleEnum.DESIGNER, true);
337         ComponentInstance componentInstance = addComponentInstanceToComponentContainer.left().value();
338
339         //Find the VF input in Service properties, declare it as service input
340         CatalogUIUtilitis.clickTopMenuButton(TopMenuButtonsEnum.CATALOG);
341         GeneralUIUtils.findComponentAndClick(serviceReqDetails.getName());
342         CompositionPage.moveToPropertiesScreen();
343         PropertiesAssignmentPage.findSearchBoxAndClick(propertyName);
344         String defaultPropertyValueBoolean = PropertiesAssignmentPage.selectBooleanPropertyValue(PropertyNameBuilder.buildSimpleField(propertyName), propertyValueBoolean);
345         PropertiesAssignmentPage.clickOnSaveButton();
346         PropertiesAssignmentPage.clickOnDeclareButton();
347         PropertiesAssignmentPage.clickOnInputTab();
348         PropertiesAssignmentVerificator.validateBooleanPropertyValue(
349                 PropertyNameBuilder.buildServiceDeclaredFieldServiceLevel(componentInstance, propertyName),
350                 propertyValueBoolean
351         );
352
353 //        //Checkout VF and check in - v0.2
354         AtomicOperationUtils.changeComponentState(resource, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CHECKOUT, true).getLeft();
355         AtomicOperationUtils.changeComponentState(resource, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CHECKIN, true).getLeft();
356
357 //        //Change resource version on service
358         resource = AtomicOperationUtils.getResourceObjectByNameAndVersion(UserRoleEnum.DESIGNER, resource.getName(), "0.2");
359         AtomicOperationUtils.changeComponentInstanceVersion(service, componentInstance, resource, UserRoleEnum.DESIGNER, true);
360
361 //        //Validate that service contains property with "get_input" value and input with the updated value
362         GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.MainMenuButtonsFromInsideFrame.HOME_BUTTON.getValue()).click();
363         GeneralUIUtils.findComponentAndClick(serviceReqDetails.getName());
364         CompositionPage.moveToPropertiesScreen();
365         PropertiesAssignmentVerificator.validatePropertyValue(PropertyNameBuilder.buildSimpleField(propertyName),
366                 PropertyNameBuilder.buildServiceDeclaredPropValueServiceLevel(componentInstance, propertyName));
367         PropertiesAssignmentPage.isPropertyChecked(propertyName);
368         PropertiesAssignmentPage.clickOnInputTab();
369         PropertiesAssignmentVerificator.validateBooleanPropertyValue(
370                 PropertyNameBuilder.buildServiceDeclaredFieldServiceLevel(componentInstance, propertyName),
371                 StringUtils.isEmpty(defaultPropertyValueBoolean) ? propertyValueBoolean : defaultPropertyValueBoolean
372         );
373     }
374
375     @Test
376     public void deletePropertyChangeVfiVersionTest() throws Throwable {
377         String vnfFile = "vIRC_FE_BE.zip";
378         String componentName = "abstract_virc_fe_be_1";
379         String propertyNameProp1 = "max_instances"; //empty property
380         String propertyNameProp2 = "nfc_naming_code"; //non-empty property
381         String propertyNameProp3 = "min_instances"; //non-empty property
382         String propertyNameProp4 = "nf_type";
383         String propertyValueProp2 = "virc_fe_be";
384         String propertyValueProp3 = "0";
385         String propertyValueUpd1 = "111";
386         String propertyValueUpd2 = "updated_by_designer";
387         String propertyValueUpd4 = "added_by_designer_on_service";
388         String inputName1 = componentName + "_" + propertyNameProp1;
389         String inputName2 = componentName + "_" + propertyNameProp2;
390         String inputName3 = componentName + "_" + propertyNameProp3;
391
392         //Import VSP, create VF - v0.1
393         String filePath = org.openecomp.sdc.ci.tests.utils.general.FileHandling.getVnfRepositoryPath();
394         getExtendTest().log(Status.INFO, "Going to upload VNF " + vnfFile);
395         VendorLicenseModel vendorLicenseModel = VendorLicenseModelRestUtils.createVendorLicense(getUser());
396         ResourceReqDetails resourceReqDetails = ElementFactory.getDefaultResource(); //getResourceReqDetails(ComponentConfigurationTypeEnum.DEFAULT);
397         VendorSoftwareProductObject vendorSoftwareProductObject = VendorSoftwareProductRestUtils.createAndFillVendorSoftwareProduct(resourceReqDetails, vnfFile, filePath, sdncDesignerDetails,
398             vendorLicenseModel, null);
399         resourceReqDetails = OnboardingUtillViaApis.prepareOnboardedResourceDetailsBeforeCreate(resourceReqDetails, vendorSoftwareProductObject);
400         Resource resource = OnboardingUtillViaApis.createResourceFromVSP(resourceReqDetails);
401
402         //VF - Declare properties as inputs
403         CatalogUIUtilitis.clickTopMenuButton(TopMenuButtonsEnum.CATALOG);
404         GeneralUIUtils.findComponentAndClick(resourceReqDetails.getName());
405         ResourceGeneralPage.getLeftMenu().moveToPropertiesAssignmentScreen();
406         PropertiesAssignmentPage.clickOnComponentInComposition(componentName);
407         PropertiesAssignmentPage.findSearchBoxAndClick(propertyNameProp1);
408         PropertiesAssignmentPage.clickOnDeclareButton();
409         PropertiesAssignmentPage.findSearchBoxAndClick(propertyNameProp2);
410         PropertiesAssignmentPage.clickOnDeclareButton();
411         PropertiesAssignmentPage.findSearchBoxAndClick(propertyNameProp3);
412         PropertiesAssignmentPage.clickOnDeclareButton();
413         PropertiesAssignmentPage.clickOnInputTab();
414         PropertiesAssignmentVerificator.validatePropertyValue(PropertyNameBuilder.buildInputField(inputName1), "");
415         PropertiesAssignmentVerificator.validatePropertyValue(PropertyNameBuilder.buildInputField(inputName2), propertyValueProp2);
416         PropertiesAssignmentVerificator.validatePropertyValue(PropertyNameBuilder.buildInputField(inputName3), propertyValueProp3);
417
418         //Check in VF, create Service and add VFi to Service
419         resource = (Resource) AtomicOperationUtils.changeComponentState(resource, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CHECKIN, true).getLeft();
420         ServiceReqDetails serviceReqDetails = OnboardingUtillViaApis.prepareServiceDetailsBeforeCreate(sdncDesignerDetails);
421         getExtendTest().log(Status.INFO, "Create Service: " + serviceReqDetails.getName());
422         org.openecomp.sdc.be.model.Service service = AtomicOperationUtils.createCustomService(
423                 serviceReqDetails, UserRoleEnum.DESIGNER,
424                 true
425         ).left().value();
426         Either<ComponentInstance, RestResponse> addComponentInstanceToComponentContainer = AtomicOperationUtils.addComponentInstanceToComponentContainer(resource, service, UserRoleEnum.DESIGNER, true);
427         ComponentInstance componentInstance = addComponentInstanceToComponentContainer.left().value();
428
429         //Find the VF inputs in Service properties, add or edit properties values
430         GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.MainMenuButtonsFromInsideFrame.HOME_BUTTON.getValue()).click();
431         GeneralUIUtils.findComponentAndClick(serviceReqDetails.getName());
432         CompositionPage.moveToPropertiesScreen();
433         PropertiesAssignmentPage.findSearchBoxAndClick(inputName1);
434         PropertiesAssignmentPage.editPropertyValue(PropertyNameBuilder.buildSimpleField(inputName1), propertyValueUpd1);
435         PropertiesAssignmentPage.clickOnSaveButton();
436         PropertiesAssignmentPage.findSearchBoxAndClick(inputName2);
437         PropertiesAssignmentPage.editPropertyValue(PropertyNameBuilder.buildSimpleField(inputName2), propertyValueUpd2);
438         PropertiesAssignmentPage.clickOnSaveButton();
439         PropertiesAssignmentPage.findSearchBoxAndClick(inputName3);
440         PropertiesAssignmentPage.deletePropertyValue(PropertyNameBuilder.buildSimpleField(inputName3));
441         PropertiesAssignmentPage.clickOnSaveButton();
442         PropertiesAssignmentPage.findSearchBoxAndClick(propertyNameProp4);
443         PropertiesAssignmentPage.editPropertyValue(PropertyNameBuilder.buildSimpleField(propertyNameProp4), propertyValueUpd4);
444         PropertiesAssignmentPage.clickOnSaveButton();
445
446         //Checkout and check in VF, change VFi version on Service to 0.2
447         AtomicOperationUtils.changeComponentState(resource, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CHECKOUT, true).getLeft();
448         AtomicOperationUtils.changeComponentState(resource, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CHECKIN, true).getLeft();
449         AtomicOperationUtils.changeComponentInstanceVersion(service, componentInstance, resource, UserRoleEnum.DESIGNER, true);
450
451         //Service - Validate properties values
452         GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.MainMenuButtonsFromInsideFrame.HOME_BUTTON.getValue()).click();
453         GeneralUIUtils.findComponentAndClick(serviceReqDetails.getName());
454         CompositionPage.moveToPropertiesScreen();
455         PropertiesAssignmentVerificator.validatePropertyValue(PropertyNameBuilder.buildSimpleField(inputName1), propertyValueUpd1);
456 //        PropertiesAssignmentVerificator.validatePropertyValue(PropertyNameBuilder.buildSimpleField(inputName2), propertyValueProp2);
457         PropertiesAssignmentVerificator.validatePropertyValue(PropertyNameBuilder.buildSimpleField(inputName3), propertyValueProp3);
458         PropertiesAssignmentVerificator.validatePropertyValue(PropertyNameBuilder.buildSimpleField(propertyNameProp4), propertyValueUpd4);
459
460         //Service - Declare properties as inputs
461         PropertiesAssignmentPage.findSearchBoxAndClick(inputName1);
462         PropertiesAssignmentPage.clickOnDeclareButton();
463 //        PropertiesAssignmentPage.findSearchBoxAndClick(inputName2);
464 //        PropertiesAssignmentPage.clickOnDeclareButton();
465         PropertiesAssignmentPage.findSearchBoxAndClick(inputName3);
466         PropertiesAssignmentPage.clickOnDeclareButton();
467         PropertiesAssignmentPage.findSearchBoxAndClick(propertyNameProp4);
468         PropertiesAssignmentPage.clickOnDeclareButton();
469         // TODO: 5/9/2018 Add validation for input values
470
471         //VF - delete some declared inputs
472         GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.MainMenuButtonsFromInsideFrame.HOME_BUTTON.getValue()).click();
473         GeneralUIUtils.findComponentAndClick(resourceReqDetails.getName());
474         GeneralPageElements.clickCheckoutButton();
475         ResourceGeneralPage.getLeftMenu().moveToPropertiesAssignmentScreen();
476         PropertiesAssignmentPage.clickOnInputTab();
477         PropertiesAssignmentPage.findInput(componentName, propertyNameProp1);
478         PropertiesAssignmentPage.clickOnDeleteInputButton();
479         PropertiesAssignmentPage.clickOnDeleteInputDialogConfirmationButton();
480 ////        PropertiesAssignmentPage.findInput(componentName, propertyNameProp2);
481 //        PropertiesAssignmentPage.clickOnDeleteInputButton();
482 //        PropertiesAssignmentPage.clickOnDeleteInputDialogConfirmationButton();
483
484         //VF - check in VF, change VFi version on Service to 0.3
485         ResourceGeneralPage.clickCheckinButton(resourceReqDetails.getName());
486         resource = AtomicOperationUtils.getResourceObjectByNameAndVersion(UserRoleEnum.DESIGNER, resource.getName(), "0.3");
487         AtomicOperationUtils.changeComponentInstanceVersion(service, componentInstance, resource, UserRoleEnum.DESIGNER, true);
488
489         //Service - Validate that deleted inputs are not found in Service properties, others are found
490         CatalogUIUtilitis.clickTopMenuButton(TopMenuButtonsEnum.CATALOG);
491         GeneralUIUtils.findComponentAndClick(serviceReqDetails.getName());
492         CompositionPage.moveToPropertiesScreen();
493         PropertiesAssignmentPage.findProperty(inputName1);
494         assertTrue(GeneralUIUtils.isElementInvisibleByTestId(PropertyNameBuilder.buildSimpleField(inputName1)));
495 //        PropertiesAssignmentPage.findProperty(inputName2);
496 //        assertTrue(GeneralUIUtils.isElementInvisibleByTestId(PropertyNameBuilder.buildSimpleField(inputName2)));
497         PropertiesAssignmentPage.findProperty(inputName3);
498         assertTrue(GeneralUIUtils.isElementVisibleByTestId(PropertyNameBuilder.buildSimpleField(inputName3)));
499         PropertiesAssignmentPage.findProperty(propertyNameProp4);
500         assertTrue(GeneralUIUtils.isElementVisibleByTestId(PropertyNameBuilder.buildSimpleField(propertyNameProp4)));
501
502         //Service - Validate that Service inputs that were declared from deleted properties are not found
503         //        - Validate that other inputs remain - Currently input of min_instances disappears - BUG 411833!!!
504     }
505
506     @Test
507     public void updateVFCPropertyChangeVFCiVersionTest() throws Throwable {
508         ResourceReqDetails atomicResourceMetaData;
509         String prop1 = "network_role";
510         String propValue1 = "added_value_1";
511         String prop2 = "is_default";
512         String propValue2 = "TRUE";
513
514         //Import VFC, certify VFC
515         String fileName = "importVFC_VFC23.yml";
516         atomicResourceMetaData = ElementFactory.getDefaultResourceByTypeNormTypeAndCatregory(ResourceTypeEnum.VFC, NormativeTypesEnum.ROOT,
517                 ResourceCategoryEnum.NETWORK_L2_3_ROUTERS, getUser());
518         ResourceUIUtils.importVfc(atomicResourceMetaData, filePath, fileName, getUser());
519         String vfcName = atomicResourceMetaData.getName();
520         ResourceGeneralPage.clickCheckinButton(vfcName);
521
522         //Create VF
523         ResourceReqDetails vfMetaData = ElementFactory.getDefaultResourceByType(ResourceTypeEnum.VF, getUser());
524         ResourceUIUtils.createVF(vfMetaData, getUser());
525
526         //Add VFCi to VF canvas
527         ResourceGeneralPage.getLeftMenu().moveToCompositionScreen();
528         CanvasManager vfCanvasManager = CanvasManager.getCanvasManager();
529         CanvasElement vfcElement = vfCanvasManager.createElementOnCanvas(vfcName);
530
531         //VF Properties Assignment - edit properties values and declare as input
532         CompositionPage.moveToPropertiesScreen();
533         PropertiesAssignmentPage.findSearchBoxAndClick(prop1);
534         PropertiesAssignmentPage.editPropertyValue(PropertyNameBuilder.buildSimpleField(prop1), propValue1);
535         PropertiesAssignmentPage.clickOnSaveButton();
536         PropertiesAssignmentPage.clickOnDeclareButton();
537         PropertiesAssignmentPage.findSearchBoxAndClick(prop2);
538         String propDefaultValue2 = PropertiesAssignmentPage.selectBooleanPropertyValue(PropertyNameBuilder.buildSimpleField(prop2), propValue2);
539         PropertiesAssignmentPage.clickOnSaveButton();
540         PropertiesAssignmentPage.clickOnDeclareButton();
541
542         //Check out and check in VFC - v0.2
543         HomePage.navigateToHomePage();
544         GeneralUIUtils.findComponentAndClick(vfcName);
545         ResourceGeneralPage.clickCheckoutButton();
546         ResourceGeneralPage.clickCheckinButton(vfcName);
547
548         //Change VFCi version in VF
549         GeneralUIUtils.findComponentAndClick(vfMetaData.getName());
550         ResourceGeneralPage.getLeftMenu().moveToCompositionScreen();
551         vfCanvasManager = CanvasManager.getCanvasManager();
552         CompositionPage.changeComponentVersion(vfCanvasManager, vfcElement, "0.2");
553         VfVerificator.verifyInstanceVersion(vfMetaData, getUser(), atomicResourceMetaData.getName(), "0.2");
554
555         Resource resource = AtomicOperationUtils.getResourceObjectByNameAndVersion(UserRoleEnum.DESIGNER, vfMetaData.getName(), "0.1");
556         List<ComponentInstance> components = resource.getComponentInstances();
557         String normalizedName = components.get(0).getNormalizedName();
558         CompositionPage.moveToPropertiesScreen();
559         PropertiesAssignmentPage.clickOnInputTab();
560         //Verify that input value of the declared property that is EMPTY by default hasn't changed
561 //        PropertiesAssignmentVerificator.validateBooleanPropertyValue(PropertyNameBuilder.buildDeclaredInputField(normalizedName, prop2), propValue2);
562         PropertiesAssignmentVerificator.validatePropertyValue(PropertyNameBuilder.buildDeclaredInputField(normalizedName, prop1), propValue1);
563         //Verify that input value of the declared property that is NOT EMPTY by default has been changed
564         PropertiesAssignmentVerificator.validateBooleanPropertyValue(PropertyNameBuilder.buildDeclaredInputField(normalizedName, prop2),
565                 StringUtils.isEmpty(propDefaultValue2) ? propValue2 : propDefaultValue2);
566
567         //Check out VFC - v0.3, delete a property, check in VFC
568         HomePage.navigateToHomePage();
569         GeneralUIUtils.findComponentAndClick(vfcName);
570         ResourceGeneralPage.clickCheckoutButton();
571         ResourceGeneralPage.getLeftMenu().moveToPropertiesScreen();
572         PropertiesPage.clickDeletePropertyFromPopup(prop1);
573         PropertiesPage.clickDeletePropertyFromPopup(prop2);
574         ResourceGeneralPage.clickCheckinButton(vfcName);
575
576         //Change VFCi version in VF
577         GeneralUIUtils.findComponentAndClick(vfMetaData.getName());
578         ResourceGeneralPage.getLeftMenu().moveToCompositionScreen();
579         vfCanvasManager = CanvasManager.getCanvasManager();
580         CompositionPage.changeComponentVersion(vfCanvasManager, vfcElement, "0.3");
581         VfVerificator.verifyInstanceVersion(vfMetaData, getUser(), atomicResourceMetaData.getName(), "0.3");
582
583         //Verify that properties and inputs were removed
584         CompositionPage.moveToPropertiesScreen();
585         PropertiesAssignmentPage.findProperty(prop1);
586         assertTrue(GeneralUIUtils.isElementInvisibleByTestId(PropertyNameBuilder.buildSimpleField(prop1)));
587         PropertiesAssignmentPage.findProperty(prop2);
588         assertTrue(GeneralUIUtils.isElementInvisibleByTestId(PropertyNameBuilder.buildSimpleField(prop2)));
589         PropertiesAssignmentPage.clickOnInputTab();
590         PropertiesAssignmentPage.findProperty(normalizedName + "_" + prop1);
591         assertTrue(GeneralUIUtils.isElementInvisibleByTestId(PropertyNameBuilder.buildDeclaredInputField(normalizedName, prop1)));
592         PropertiesAssignmentPage.findProperty(normalizedName + "_" + prop2);
593         assertTrue(GeneralUIUtils.isElementInvisibleByTestId(PropertyNameBuilder.buildDeclaredInputField(normalizedName, prop2)));
594     }
595
596     @Test
597     public void updateHeatParamChangeVfiVersionTest() throws Throwable {
598         String vnfFile = "vIRC_FE_BE.zip";
599         String artifactName = "base_fe_be";
600         String heatParamName = "availability_zone_0";
601         String heatParamUpdValue = "Updated_ZoneA";
602
603         //Import VSP, create VF - v0.1
604         String filePath = org.openecomp.sdc.ci.tests.utils.general.FileHandling.getVnfRepositoryPath();
605         getExtendTest().log(Status.INFO, "Going to upload VNF " + vnfFile);
606         VendorLicenseModel vendorLicenseModel = VendorLicenseModelRestUtils.createVendorLicense(getUser());
607         ResourceReqDetails resourceReqDetails = ElementFactory.getDefaultResource(); //getResourceReqDetails(ComponentConfigurationTypeEnum.DEFAULT);
608         VendorSoftwareProductObject vendorSoftwareProductObject = VendorSoftwareProductRestUtils.createAndFillVendorSoftwareProduct(resourceReqDetails, vnfFile, filePath, sdncDesignerDetails,
609             vendorLicenseModel, null);
610         resourceReqDetails = OnboardingUtillViaApis.prepareOnboardedResourceDetailsBeforeCreate(resourceReqDetails, vendorSoftwareProductObject);
611         Resource resource = OnboardingUtillViaApis.createResourceFromVSP(resourceReqDetails);
612
613         //Check in VF and add VFi to Service
614         resource = (Resource) AtomicOperationUtils.changeComponentState(resource, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CHECKIN, true).getLeft();
615         ServiceReqDetails serviceReqDetails = OnboardingUtillViaApis.prepareServiceDetailsBeforeCreate(sdncDesignerDetails);
616         getExtendTest().log(Status.INFO, "Create Service: " + serviceReqDetails.getName());
617         org.openecomp.sdc.be.model.Service service = AtomicOperationUtils.createCustomService(
618                 serviceReqDetails,
619                 UserRoleEnum.DESIGNER, true
620         ).left().value();
621         CatalogUIUtilitis.clickTopMenuButton(TopMenuButtonsEnum.CATALOG);
622         GeneralUIUtils.findComponentAndClick(service.getName());
623         ResourceGeneralPage.getLeftMenu().moveToCompositionScreen();
624         CanvasManager vfCanvasManager = CanvasManager.getCanvasManager();
625         CanvasElement vfElement = vfCanvasManager.createElementOnCanvas(resource.getName());
626
627         //Select VFi on canvas, open Deployment Artifacts tab
628         vfCanvasManager.clickOnCanvaElement(vfElement);
629         CompositionPage.showDeploymentArtifactTab();
630         DeploymentArtifactPage.hoverArtifact(artifactName);
631         DeploymentArtifactPage.clickEditEnvArtifact(artifactName);
632         DeploymentArtifactPage.editHeatParamValue(HeatParamNameBuilder.buildCurrentHeatParamValue(heatParamName), heatParamUpdValue);
633         DeploymentArtifactPage.clickSaveEnvParameters();
634
635         //Checkout and check in VF - v0.2
636         resource = (Resource) AtomicOperationUtils.changeComponentState(resource, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CHECKOUT, true).getLeft();
637         resource = (Resource) AtomicOperationUtils.changeComponentState(resource, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CHECKIN, true).getLeft();
638
639         //Change VFi version on Service canvas - v0.2
640         GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.MainMenuButtonsFromInsideFrame.HOME_BUTTON.getValue()).click();
641         GeneralUIUtils.findComponentAndClick(service.getName());
642         ResourceGeneralPage.getLeftMenu().moveToCompositionScreen();
643         vfCanvasManager = CanvasManager.getCanvasManager();
644         CompositionPage.changeComponentVersion(vfCanvasManager, vfElement, "0.2");
645 //        VfVerificator.verifyInstanceVersion(service, getUser(), resource.getName(), "0.2");
646
647         //Validate that edited heatparam value is kept
648         CompositionPage.showDeploymentArtifactTab();
649         DeploymentArtifactPage.hoverArtifact(artifactName);
650         DeploymentArtifactPage.clickEditEnvArtifact(artifactName);
651         PropertiesAssignmentVerificator.validatePropertyValue(HeatParamNameBuilder.buildCurrentHeatParamValue(heatParamName), heatParamUpdValue);
652         DeploymentArtifactPage.clickCloseEnvParameters();
653
654         //Check out VF, delete heatparam value, check in VF - v0.3
655         resource = (Resource) AtomicOperationUtils.changeComponentState(resource, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CHECKOUT, true).getLeft();
656         GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.MainMenuButtonsFromInsideFrame.HOME_BUTTON.getValue()).click();
657         GeneralUIUtils.findComponentAndClick(resource.getName());
658         ResourceGeneralPage.getLeftMenu().moveToDeploymentArtifactScreen();
659         DeploymentArtifactPage.clickEditEnvArtifact(artifactName);
660         DeploymentArtifactPage.clickOnDeleteHeatParamValue(heatParamName);
661         DeploymentArtifactPage.clickSaveEnvParameters();
662         resource = (Resource) AtomicOperationUtils.changeComponentState(resource, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CHECKIN, true).getLeft();
663
664         //Change VFi version on Service canvas - v0.3
665         GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.MainMenuButtonsFromInsideFrame.HOME_BUTTON.getValue()).click();
666         GeneralUIUtils.findComponentAndClick(service.getName());
667         ResourceGeneralPage.getLeftMenu().moveToCompositionScreen();
668         vfCanvasManager = CanvasManager.getCanvasManager();
669         CompositionPage.changeComponentVersion(vfCanvasManager, vfElement, "0.3");
670
671         //Validate that edited heatparam value is kept, default value is empty
672         CompositionPage.showDeploymentArtifactTab();
673         DeploymentArtifactPage.hoverArtifact(artifactName);
674         DeploymentArtifactPage.clickEditEnvArtifact(artifactName);
675         PropertiesAssignmentVerificator.validatePropertyValue(HeatParamNameBuilder.buildCurrentHeatParamValue(heatParamName), heatParamUpdValue);
676         PropertiesAssignmentVerificator.validatePropertyValueIsNull(HeatParamNameBuilder.buildDefaultHeatParamValue(heatParamName));
677         DeploymentArtifactPage.clickCloseEnvParameters();
678     }
679
680
681     @Override
682     protected UserRoleEnum getRole() {
683         return UserRoleEnum.DESIGNER;
684     }
685
686 }
687
688