Support deletion of archived services in SDC BE
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / impl / ServiceBusinessLogicBaseTestSetup.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2020 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.components.impl;
22
23 import static org.junit.jupiter.api.Assertions.assertEquals;
24 import static org.mockito.ArgumentMatchers.anyString;
25 import static org.mockito.ArgumentMatchers.eq;
26 import static org.mockito.Mockito.when;
27
28 import fj.data.Either;
29 import java.util.ArrayList;
30 import java.util.Arrays;
31 import java.util.Collections;
32 import java.util.List;
33 import javax.servlet.ServletContext;
34 import org.junit.jupiter.api.BeforeEach;
35 import org.mockito.Mockito;
36 import org.openecomp.sdc.ElementOperationMock;
37 import org.openecomp.sdc.be.auditing.impl.AuditingManager;
38 import org.openecomp.sdc.be.components.distribution.engine.DistributionEngine;
39 import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
40 import org.openecomp.sdc.be.components.impl.generic.GenericTypeBusinessLogic;
41 import org.openecomp.sdc.be.components.path.ForwardingPathValidator;
42 import org.openecomp.sdc.be.components.validation.ServiceDistributionValidation;
43 import org.openecomp.sdc.be.components.validation.UserValidations;
44 import org.openecomp.sdc.be.components.validation.component.ComponentContactIdValidator;
45 import org.openecomp.sdc.be.components.validation.component.ComponentDescriptionValidator;
46 import org.openecomp.sdc.be.components.validation.component.ComponentFieldValidator;
47 import org.openecomp.sdc.be.components.validation.component.ComponentIconValidator;
48 import org.openecomp.sdc.be.components.validation.component.ComponentNameValidator;
49 import org.openecomp.sdc.be.components.validation.component.ComponentProjectCodeValidator;
50 import org.openecomp.sdc.be.components.validation.component.ComponentTagsValidator;
51 import org.openecomp.sdc.be.components.validation.component.ComponentValidator;
52 import org.openecomp.sdc.be.components.validation.service.ServiceCategoryValidator;
53 import org.openecomp.sdc.be.components.validation.service.ServiceEnvironmentContextValidator;
54 import org.openecomp.sdc.be.components.validation.service.ServiceFieldValidator;
55 import org.openecomp.sdc.be.components.validation.service.ServiceFunctionValidator;
56 import org.openecomp.sdc.be.components.validation.service.ServiceInstantiationTypeValidator;
57 import org.openecomp.sdc.be.components.validation.service.ServiceNamingPolicyValidator;
58 import org.openecomp.sdc.be.components.validation.service.ServiceRoleValidator;
59 import org.openecomp.sdc.be.components.validation.service.ServiceTypeValidator;
60 import org.openecomp.sdc.be.components.validation.service.ServiceValidator;
61 import org.openecomp.sdc.be.dao.api.ActionStatus;
62 import org.openecomp.sdc.be.dao.cassandra.AuditCassandraDao;
63 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphDao;
64 import org.openecomp.sdc.be.datamodel.utils.UiComponentDataConverter;
65 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
66 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
67 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
68 import org.openecomp.sdc.be.facade.operations.CatalogOperation;
69 import org.openecomp.sdc.be.impl.ComponentsUtils;
70 import org.openecomp.sdc.be.impl.WebAppContextWrapper;
71 import org.openecomp.sdc.be.model.ArtifactDefinition;
72 import org.openecomp.sdc.be.model.Component;
73 import org.openecomp.sdc.be.model.Resource;
74 import org.openecomp.sdc.be.model.Service;
75 import org.openecomp.sdc.be.model.User;
76 import org.openecomp.sdc.be.model.category.CategoryDefinition;
77 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
78 import org.openecomp.sdc.be.model.operations.api.IElementOperation;
79 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
80 import org.openecomp.sdc.be.model.operations.impl.GraphLockOperation;
81 import org.openecomp.sdc.be.model.operations.impl.ModelOperation;
82 import org.openecomp.sdc.be.resources.data.auditing.DistributionDeployEvent;
83 import org.openecomp.sdc.be.resources.data.auditing.DistributionNotificationEvent;
84 import org.openecomp.sdc.be.resources.data.auditing.ResourceAdminEvent;
85 import org.openecomp.sdc.be.user.Role;
86 import org.openecomp.sdc.be.user.UserBusinessLogic;
87 import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
88 import org.openecomp.sdc.common.api.Constants;
89 import org.openecomp.sdc.exception.ResponseFormat;
90 import org.springframework.web.context.WebApplicationContext;
91
92 class ServiceBusinessLogicBaseTestSetup extends BaseBusinessLogicMock {
93
94     protected ServiceBusinessLogic bl;
95     protected static final String SERVICE_CATEGORY = "Mobility";
96     protected static final String INSTANTIATION_TYPE = "A-la-carte";
97     protected final ServletContext servletContext = Mockito.mock(ServletContext.class);
98     protected UserBusinessLogic mockUserAdmin = Mockito.mock(UserBusinessLogic.class);
99     protected WebAppContextWrapper webAppContextWrapper = Mockito.mock(WebAppContextWrapper.class);
100     protected WebApplicationContext webAppContext = Mockito.mock(WebApplicationContext.class);
101     protected ResponseFormatManager responseManager = null;
102     protected ComponentsUtils componentsUtils = new ComponentsUtils(Mockito.mock(AuditingManager.class));
103     protected AuditCassandraDao auditingDao = Mockito.mock(AuditCassandraDao.class);
104     protected ArtifactsBusinessLogic artifactBl = Mockito.mock(ArtifactsBusinessLogic.class);
105     protected GraphLockOperation graphLockOperation = Mockito.mock(GraphLockOperation.class);
106     protected JanusGraphDao mockJanusGraphDao = Mockito.mock(JanusGraphDao.class);
107     protected ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
108     protected GenericTypeBusinessLogic genericTypeBusinessLogic = Mockito.mock(GenericTypeBusinessLogic.class);
109     protected UserValidations userValidations = Mockito.mock(UserValidations.class);
110     protected ResourceAdminEvent auditArchive1 = Mockito.mock(ResourceAdminEvent.class);
111     protected CatalogOperation catalogOperation = Mockito.mock(CatalogOperation.class);
112     protected ResourceAdminEvent auditArchive2 = Mockito.mock(ResourceAdminEvent.class);
113     protected ResourceAdminEvent auditRestore = Mockito.mock(ResourceAdminEvent.class);
114     protected ModelOperation modelOperation = Mockito.mock(ModelOperation.class);
115     IElementOperation mockElementDao = new ElementOperationMock();
116     DistributionEngine distributionEngine =  Mockito.mock(DistributionEngine.class);
117     ServiceDistributionValidation serviceDistributionValidation = Mockito.mock(ServiceDistributionValidation.class);
118     ComponentInstanceBusinessLogic componentInstanceBusinessLogic = Mockito.mock(ComponentInstanceBusinessLogic.class);
119     ForwardingPathValidator forwardingPathValidator = Mockito.mock(ForwardingPathValidator.class);
120     UiComponentDataConverter uiComponentDataConverter = Mockito.mock(UiComponentDataConverter.class);
121     protected ServiceTypeValidator serviceTypeValidator = new ServiceTypeValidator(componentsUtils);
122     protected ServiceCategoryValidator serviceCategoryValidator = new ServiceCategoryValidator(componentsUtils, mockElementDao);
123     protected ServiceRoleValidator serviceRoleValidator = new ServiceRoleValidator(componentsUtils);
124     protected ServiceFunctionValidator serviceFunctionValidator = new ServiceFunctionValidator(componentsUtils);
125     protected ServiceInstantiationTypeValidator serviceInstantiationTypeValidator = new ServiceInstantiationTypeValidator(componentsUtils);
126     protected ComponentDescriptionValidator componentDescriptionValidator =  new ComponentDescriptionValidator(componentsUtils);
127     protected ComponentProjectCodeValidator componentProjectCodeValidator =  new ComponentProjectCodeValidator(componentsUtils);
128     protected ComponentIconValidator componentIconValidator = new ComponentIconValidator(componentsUtils);
129     protected ComponentContactIdValidator componentContactIdValidator = new ComponentContactIdValidator(componentsUtils);
130     protected ComponentTagsValidator componentTagsValidator = new ComponentTagsValidator(componentsUtils);
131     protected ComponentNameValidator componentNameValidator = new ComponentNameValidator(componentsUtils, toscaOperationFacade);
132     protected final ComponentValidator componentValidator = Mockito.mock(ComponentValidator.class);
133     protected ServiceValidator serviceValidator = createServiceValidator();
134
135     protected User user = null;
136     protected Resource genericService = null;
137
138     protected static final String CERTIFIED_VERSION = "1.0";
139     protected static final String UNCERTIFIED_VERSION = "0.2";
140     protected static final String COMPONNET_ID = "myUniqueId";
141     protected static final String GENERIC_SERVICE_NAME = "org.openecomp.resource.abstract.nodes.service";
142
143     protected static final String SERVICE_ROLE = JsonPresentationFields.SERVICE_ROLE.getPresentation();
144     protected static final String SERVICE_TYPE = JsonPresentationFields.SERVICE_TYPE.getPresentation();
145     protected static final String SERVICE_FUNCTION = JsonPresentationFields.SERVICE_FUNCTION.getPresentation();
146
147     public ServiceBusinessLogicBaseTestSetup() {
148
149     }
150
151     protected ServiceValidator createServiceValidator() {
152         List<ComponentFieldValidator> componentFieldValidators = Arrays.asList(componentContactIdValidator,
153                 componentDescriptionValidator,
154                 componentIconValidator, componentNameValidator,
155                 new ComponentProjectCodeValidator(componentsUtils),
156                 componentTagsValidator);
157
158         List<ServiceFieldValidator> serviceFieldValidators = Arrays.asList(serviceCategoryValidator, new ServiceEnvironmentContextValidator(),
159                 serviceInstantiationTypeValidator, new ServiceNamingPolicyValidator(componentsUtils),
160                 serviceRoleValidator, serviceTypeValidator);
161         return new ServiceValidator(componentsUtils, componentFieldValidators, serviceFieldValidators);
162     }
163
164
165
166     @BeforeEach
167     public void setup() {
168
169         // Elements
170         IElementOperation mockElementDao = new ElementOperationMock();
171
172         // User data and management
173         user = new User();
174         user.setUserId("jh0003");
175         user.setFirstName("Jimmi");
176         user.setLastName("Hendrix");
177         user.setRole(Role.ADMIN.name());
178
179         when(mockUserAdmin.getUser("jh0003", false)).thenReturn(user);
180         when(userValidations.validateUserExists(eq("jh0003"))).thenReturn(user);
181         when(userValidations.validateUserNotEmpty(eq(user), anyString())).thenReturn(user);
182         when(servletContext.getAttribute(Constants.CONFIGURATION_MANAGER_ATTR)).thenReturn(configurationManager);
183         when(servletContext.getAttribute(Constants.WEB_APPLICATION_CONTEXT_WRAPPER_ATTR)).thenReturn(webAppContextWrapper);
184         when(webAppContextWrapper.getWebAppContext(servletContext)).thenReturn(webAppContext);
185         when(webAppContext.getBean(IElementOperation.class)).thenReturn(mockElementDao);
186         when(graphLockOperation.lockComponent(Mockito.anyString(), Mockito.eq(NodeTypeEnum.Service))).thenReturn(StorageOperationStatus.OK);
187         when(graphLockOperation.lockComponentByName(Mockito.anyString(), Mockito.eq(NodeTypeEnum.Service))).thenReturn(StorageOperationStatus.OK);
188         when(catalogOperation.updateCatalog(Mockito.any(), Mockito.any())).thenReturn(ActionStatus.OK);
189         // artifact bussinesslogic
190         ArtifactDefinition artifactDef = new ArtifactDefinition();
191         when(artifactBl.createArtifactPlaceHolderInfo(Mockito.any(), Mockito.anyString(), Mockito.anyMap(), Mockito.any(User.class), Mockito.any(ArtifactGroupTypeEnum.class))).thenReturn(artifactDef);
192
193         // createService
194         Service serviceResponse = createServiceObject(true);
195         Either<Component, StorageOperationStatus> eitherCreate = Either.left(serviceResponse);
196         when(toscaOperationFacade.createToscaComponent(Mockito.any(Component.class))).thenReturn(eitherCreate);
197         Either<Boolean, StorageOperationStatus> eitherCount = Either.left(false);
198         when(toscaOperationFacade.validateComponentNameExists("Service", null, ComponentTypeEnum.SERVICE)).thenReturn(eitherCount);
199         Either<Boolean, StorageOperationStatus> eitherCountExist = Either.left(true);
200         when(toscaOperationFacade.validateComponentNameExists("alreadyExist", null, ComponentTypeEnum.SERVICE)).thenReturn(eitherCountExist);
201         when(userValidations.validateUserExists(user)).thenReturn(user);
202
203         genericService = setupGenericServiceMock();
204         Either<Resource, StorageOperationStatus> findLatestGeneric = Either.left(genericService);
205         when(toscaOperationFacade.getLatestCertifiedNodeTypeByToscaResourceName(GENERIC_SERVICE_NAME)).thenReturn(findLatestGeneric);
206
207
208         bl = new ServiceBusinessLogic(elementDao, groupOperation, groupInstanceOperation,
209                 groupTypeOperation, groupBusinessLogic, interfaceOperation, interfaceLifecycleTypeOperation,
210                 artifactBl, distributionEngine, componentInstanceBusinessLogic,
211                 serviceDistributionValidation, forwardingPathValidator, uiComponentDataConverter,
212                 artifactToscaOperation, componentContactIdValidator,
213                 componentNameValidator, componentTagsValidator, componentValidator,
214                 componentIconValidator, componentProjectCodeValidator, componentDescriptionValidator, modelOperation);
215         bl.setComponentContactIdValidator(componentContactIdValidator);
216         bl.setComponentIconValidator(componentIconValidator);
217         bl.setComponentTagsValidator(componentTagsValidator);
218         bl.setComponentNameValidator(componentNameValidator);
219         bl.setComponentDescriptionValidator(componentDescriptionValidator);
220         bl.setComponentProjectCodeValidator(componentProjectCodeValidator);
221         bl.setServiceCategoryValidator(serviceCategoryValidator);
222         bl.setServiceTypeValidator(serviceTypeValidator);
223         bl.setServiceFunctionValidator(serviceFunctionValidator);
224         bl.setElementDao(mockElementDao);
225         bl.setUserAdmin(mockUserAdmin);
226         bl.setArtifactBl(artifactBl);
227         bl.setServiceValidator(createServiceValidator());
228         bl.setGraphLockOperation(graphLockOperation);
229         bl.setJanusGraphDao(mockJanusGraphDao);
230         bl.setToscaOperationFacade(toscaOperationFacade);
231         bl.setGenericTypeBusinessLogic(genericTypeBusinessLogic);
232         bl.setComponentsUtils(componentsUtils);
233         bl.setCassandraAuditingDao(auditingDao);
234         bl.setUserValidations(userValidations);
235         bl.setCatalogOperations(catalogOperation);
236
237         mockAuditingDaoLogic();
238
239         responseManager = ResponseFormatManager.getInstance();
240
241
242     }
243
244     protected Resource setupGenericServiceMock(){
245         Resource genericService = new Resource();
246         genericService.setVersion("1.0");
247         genericService.setToscaResourceName(GENERIC_SERVICE_NAME);
248         return genericService;
249     }
250
251     protected Service createServiceObject(boolean afterCreate) {
252         Service service = new Service();
253         service.setUniqueId("sid");
254         service.setName("Service");
255         CategoryDefinition category = new CategoryDefinition();
256         category.setName(SERVICE_CATEGORY);
257         category.setIcons(Collections.singletonList("defaulticon"));
258         List<CategoryDefinition> categories = new ArrayList<>();
259         categories.add(category);
260         service.setCategories(categories);
261         service.setInstantiationType(INSTANTIATION_TYPE);
262
263         service.setDescription("description");
264         List<String> tgs = new ArrayList<>();
265         tgs.add(service.getName());
266         service.setTags(tgs);
267         service.setIcon("defaulticon");
268         service.setContactId("aa1234");
269         service.setProjectCode("12345");
270         service.setEcompGeneratedNaming(true);
271
272         if (afterCreate) {
273             service.setVersion("0.1");
274             service.setUniqueId(service.getName() + ":" + service.getVersion());
275             service.setCreatorUserId(user.getUserId());
276             service.setCreatorFullName(user.getFirstName() + " " + user.getLastName());
277         }
278         return service;
279     }
280
281     private void mockAuditingDaoLogic() {
282         final ResourceAdminEvent createResourceAudit = new ResourceAdminEvent();
283         createResourceAudit.setModifier("Carlos Santana(cs0008)");
284         createResourceAudit.setCurrState("NOT_CERTIFIED_CHECKOUT");
285         createResourceAudit.setCurrVersion("0.1");
286         createResourceAudit.setServiceInstanceId("82eddd99-0bd9-4742-ab0a-1bdb5e262a05");
287         createResourceAudit.setRequestId("3e65cea1-7403-4bc7-b461-e2544d83799f");
288         createResourceAudit.setDesc("OK");
289         createResourceAudit.setResourceType("Resource");
290         createResourceAudit.setStatus("201");
291         createResourceAudit.setPrevVersion("");
292         createResourceAudit.setAction("Create");
293         createResourceAudit.setPrevState("");
294         createResourceAudit.setResourceName("MyTestResource");
295
296         final ResourceAdminEvent checkInResourceAudit = new ResourceAdminEvent();
297         checkInResourceAudit.setModifier("Carlos Santana(cs0008)");
298         checkInResourceAudit.setCurrState("NOT_CERTIFIED_CHECKIN");
299         checkInResourceAudit.setCurrVersion("0.1");
300         checkInResourceAudit.setServiceInstanceId("82eddd99-0bd9-4742-ab0a-1bdb5e262a05");
301         checkInResourceAudit.setRequestId("ffacbf5d-eeb1-43c6-a310-37fe7e1cc091");
302         checkInResourceAudit.setDesc("OK");
303         checkInResourceAudit.setComment("Stam");
304         checkInResourceAudit.setResourceType("Resource");
305         checkInResourceAudit.setStatus("200");
306         checkInResourceAudit.setPrevVersion("0.1");
307         checkInResourceAudit.setAction("Checkin");
308         checkInResourceAudit.setPrevState("NOT_CERTIFIED_CHECKOUT");
309         checkInResourceAudit.setResourceName("MyTestResource");
310
311         final ResourceAdminEvent checkOutResourceAudit = new ResourceAdminEvent();
312         checkOutResourceAudit.setModifier("Carlos Santana(cs0008)");
313         checkOutResourceAudit.setCurrState("NOT_CERTIFIED_CHECKOUT");
314         checkOutResourceAudit.setCurrVersion("0.2");
315         checkOutResourceAudit.setServiceInstanceId("82eddd99-0bd9-4742-ab0a-1bdb5e262a05");
316         checkOutResourceAudit.setRequestId("7add5078-4c16-4d74-9691-cc150e3c96b8");
317         checkOutResourceAudit.setDesc("OK");
318         checkOutResourceAudit.setComment("");
319         checkOutResourceAudit.setResourceType("Resource");
320         checkOutResourceAudit.setStatus("200");
321         checkOutResourceAudit.setPrevVersion("0.1");
322         checkOutResourceAudit.setAction("Checkout");
323         checkOutResourceAudit.setPrevState("NOT_CERTIFIED_CHECKIN");
324         checkOutResourceAudit.setResourceName("MyTestResource");
325         List<ResourceAdminEvent> list = new ArrayList<>() {
326             {
327                 add(createResourceAudit);
328                 add(checkInResourceAudit);
329                 add(checkOutResourceAudit);
330             }
331         };
332         Either<List<ResourceAdminEvent>, ActionStatus> result = Either.left(list);
333         Mockito.when(auditingDao.getByServiceInstanceId(Mockito.anyString())).thenReturn(result);
334
335         List<ResourceAdminEvent> listPrev = new ArrayList<>();
336         Either<List<ResourceAdminEvent>, ActionStatus> resultPrev = Either.left(listPrev);
337         Mockito.when(auditingDao.getAuditByServiceIdAndPrevVersion(Mockito.anyString(), Mockito.anyString())).thenReturn(resultPrev);
338
339         List<ResourceAdminEvent> listCurr = new ArrayList<>() {
340             {
341                 add(checkOutResourceAudit);
342             }
343         };
344         Either<List<ResourceAdminEvent>, ActionStatus> resultCurr = Either.left(listCurr);
345         Mockito.when(auditingDao.getAuditByServiceIdAndCurrVersion(Mockito.anyString(), Mockito.anyString())).thenReturn(resultCurr);
346
347         Either<List<ResourceAdminEvent>, ActionStatus> archiveAuditList = Either.left(Arrays.asList(auditArchive1, auditArchive2));
348         when(auditingDao.getArchiveAuditByServiceInstanceId(anyString())).thenReturn(archiveAuditList);
349
350         Either<List<ResourceAdminEvent>, ActionStatus> restoreAuditList = Either.left(Collections.singletonList(auditRestore));
351         when(auditingDao.getRestoreAuditByServiceInstanceId(anyString())).thenReturn(restoreAuditList);
352
353     }
354
355     protected void setupBeforeDeploy(String notifyAction, String requestAction, String did) {
356
357         DistributionNotificationEvent notifyEvent = new DistributionNotificationEvent();
358         notifyEvent.setAction(notifyAction);
359         notifyEvent.setDid(did);
360         notifyEvent.setStatus("200");
361
362         ResourceAdminEvent requestEvent = new ResourceAdminEvent();
363         requestEvent.setAction(requestAction);
364         requestEvent.setDid(did);
365         requestEvent.setStatus("200");
366
367         List<DistributionNotificationEvent> notifyResults = Collections.singletonList(notifyEvent);
368         Either<List<DistributionNotificationEvent>, ActionStatus> eitherNotify = Either.left(notifyResults);
369
370         Mockito.when(auditingDao.getDistributionNotify(Mockito.anyString(), Mockito.eq(notifyAction))).thenReturn(eitherNotify);
371
372         List<ResourceAdminEvent> requestResults = Collections.singletonList(requestEvent);
373         Either<List<ResourceAdminEvent>, ActionStatus> eitherRequest = Either.left(requestResults);
374         Mockito.when(auditingDao.getDistributionRequest(Mockito.anyString(), Mockito.eq(requestAction))).thenReturn(eitherRequest);
375
376         Either<Component, StorageOperationStatus> eitherService = Either.left(createServiceObject(true));
377         Mockito.when(toscaOperationFacade.getToscaElement(Mockito.anyString())).thenReturn(eitherService);
378
379         Either<List<DistributionDeployEvent>, ActionStatus> emptyEventList = Either.left(Collections.emptyList());
380         Mockito.when(auditingDao.getDistributionDeployByStatus(Mockito.anyString(), Mockito.eq("DResult"), Mockito.anyString())).thenReturn(emptyEventList);
381     }
382
383     private void assertResponse(Either<Service, ResponseFormat> createResponse, ActionStatus expectedStatus, String... variables) {
384         assertResponse(createResponse.right().value(), expectedStatus, variables);
385     }
386
387     protected void assertComponentException(ComponentException e, ActionStatus expectedStatus, String... variables) {
388         ResponseFormat actualResponse = e.getResponseFormat() != null ?
389                 e.getResponseFormat() : componentsUtils.getResponseFormat(e.getActionStatus(), e.getParams());
390         assertResponse(actualResponse, expectedStatus, variables);
391     }
392
393     protected void assertResponse(ResponseFormat actualResponse, ActionStatus expectedStatus, String... variables) {
394         ResponseFormat expectedResponse = responseManager.getResponseFormat(expectedStatus, variables);
395         assertEquals(expectedResponse.getStatus(), actualResponse.getStatus());
396         assertEquals(expectedResponse.getFormattedMessage(), actualResponse.getFormattedMessage(), "assert error description");
397     }
398
399 }