Upgrade SDC from Titan to Janus Graph
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / property / ComponentPropertyToPolicyDeclaratorTest.java
1 package org.openecomp.sdc.be.components.property;
2
3
4 import static org.mockito.ArgumentMatchers.eq;
5 import static org.mockito.Mockito.when;
6
7 import fj.data.Either;
8 import java.util.ArrayList;
9 import java.util.Collections;
10 import java.util.List;
11 import org.junit.Assert;
12 import org.junit.Test;
13 import org.junit.runner.RunWith;
14 import org.mockito.ArgumentCaptor;
15 import org.mockito.Captor;
16 import org.mockito.InjectMocks;
17 import org.mockito.Mock;
18 import org.mockito.Mockito;
19 import org.mockito.junit.MockitoJUnitRunner;
20 import org.openecomp.sdc.be.components.property.propertytopolicydeclarators.ComponentPropertyToPolicyDeclarator;
21 import org.openecomp.sdc.be.datatypes.elements.GetPolicyValueDataDefinition;
22 import org.openecomp.sdc.be.model.PolicyDefinition;
23 import org.openecomp.sdc.be.model.PropertyDefinition;
24 import org.openecomp.sdc.be.model.Service;
25 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
26 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
27
28 @RunWith(MockitoJUnitRunner.class)
29 public class ComponentPropertyToPolicyDeclaratorTest extends PropertyDeclaratorTestBase {
30
31     @InjectMocks
32     ComponentPropertyToPolicyDeclarator declarator;
33     @Mock
34     private ToscaOperationFacade toscaOperationFacade;
35     @Captor
36     ArgumentCaptor<PropertyDefinition> propertyCaptor;
37
38     private static final String OWNER_ID = "ownerId";
39     private static final String SERVICE_ID = "serviceId";
40     private static final String PROPERTY_ID = "propertyId";
41     private static final String POLICY = "policy";
42     private static final String TEST_VALUE = "testValue";
43
44
45     @Test
46     public void testDeclarePropertyToPolicy_success() {
47         Service service = new Service();
48         service.setUniqueId(SERVICE_ID);
49
50         when(toscaOperationFacade.updatePropertyOfComponent(eq(service), Mockito.any())).thenReturn(Either.left(new PropertyDefinition()));
51         Either<List<PolicyDefinition>, StorageOperationStatus> declareEither = declarator.declarePropertiesAsPolicies(
52                 service, OWNER_ID, createInstancePropInputList(Collections.singletonList(prop1)));
53
54         Assert.assertTrue(declareEither.isLeft());
55     }
56
57     @Test
58     public void testUndeclarePolicy_success() {
59         Service service = new Service();
60         service.setUniqueId(SERVICE_ID);
61
62         PolicyDefinition policyDefinition = createPolicyDefinition(PROPERTY_ID);
63
64         PropertyDefinition expectedProperty = createPropertyWithDeclaredPolicy(getPolicyId(PROPERTY_ID));
65         service.addProperty(expectedProperty);
66
67         when(toscaOperationFacade.updatePropertyOfComponent(eq(service), propertyCaptor.capture())).thenReturn(Either.left(new PropertyDefinition()));
68
69         StorageOperationStatus storageOperationStatus =
70                 declarator.unDeclarePropertiesAsPolicies(service, policyDefinition);
71
72         PropertyDefinition actualProperty = propertyCaptor.getValue();
73
74         Assert.assertEquals(storageOperationStatus, storageOperationStatus.OK);
75         Assert.assertEquals(expectedProperty, actualProperty);
76
77     }
78
79     @Test
80     public void shouldReturnOriginalPropertyValueAfterUndeclaring() {
81         Service service = new Service();
82         service.setUniqueId(SERVICE_ID);
83
84         PropertyDefinition expectedProperty = new PropertyDefinition(prop1);
85         addGetPolicyValueToProperty(getPolicyId(prop1.getUniqueId()), expectedProperty);
86         service.addProperty(expectedProperty);
87
88         when(toscaOperationFacade.updatePropertyOfComponent(eq(service), propertyCaptor.capture())).thenReturn(Either.left(new PropertyDefinition()));
89
90         Either<List<PolicyDefinition>, StorageOperationStatus> declareEither = declarator.declarePropertiesAsPolicies(
91                 service, OWNER_ID, createInstancePropInputList(Collections.singletonList(prop1)));
92
93         Assert.assertTrue(declareEither.isLeft());
94
95         PolicyDefinition policyDefinition = createPolicyDefinition(prop1.getUniqueId());
96         StorageOperationStatus storageOperationStatus =
97                 declarator.unDeclarePropertiesAsPolicies(service, policyDefinition);
98
99         List<PropertyDefinition> actualProperties = propertyCaptor.getAllValues();
100
101         Assert.assertEquals(storageOperationStatus, storageOperationStatus.OK);
102         Assert.assertEquals(actualProperties.size(), 2);
103         Assert.assertEquals(prop1.getValue(), actualProperties.get(1).getValue());
104     }
105
106     private PropertyDefinition createPropertyWithDeclaredPolicy(String policyId) {
107         PropertyDefinition propertyDefinition = new PropertyDefinition();
108         propertyDefinition.setUniqueId(PROPERTY_ID);
109
110         addGetPolicyValueToProperty(policyId, propertyDefinition);
111         return propertyDefinition;
112     }
113
114     private void addGetPolicyValueToProperty(String policyId, PropertyDefinition propertyDefinition) {
115         GetPolicyValueDataDefinition getPolicyValueDataDefinition = new GetPolicyValueDataDefinition();
116         getPolicyValueDataDefinition.setPolicyId(policyId);
117         getPolicyValueDataDefinition.setPropertyName(propertyDefinition.getUniqueId());
118         getPolicyValueDataDefinition.setOrigPropertyValue(propertyDefinition.getValue());
119
120         List<GetPolicyValueDataDefinition> getPolicyList = new ArrayList<>();
121         getPolicyList.add(getPolicyValueDataDefinition);
122         propertyDefinition.setGetPolicyValues(getPolicyList);
123     }
124
125     private PolicyDefinition createPolicyDefinition(String propertyId) {
126         PolicyDefinition policyDefinition = new PolicyDefinition();
127         String policyId = getPolicyId(propertyId);
128         policyDefinition.setUniqueId(policyId);
129
130         return policyDefinition;
131     }
132
133     private String getPolicyId(String propertyId) {
134         return SERVICE_ID + "." + propertyId + "." + POLICY;
135     }
136
137 }