/**
* Copyright (C) 2015 Orange
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.francetelecom.clara.cloud.presentation.tools;
import com.francetelecom.clara.cloud.commons.InvalidMavenReferenceException;
import com.francetelecom.clara.cloud.commons.InvalidMavenReferenceException.ErrorType;
import com.francetelecom.clara.cloud.commons.MavenReference;
import com.francetelecom.clara.cloud.core.service.ManagePaasUser;
import com.francetelecom.clara.cloud.core.service.exception.ApplicationNotFoundException;
import com.francetelecom.clara.cloud.coremodel.PaasRoleEnum;
import com.francetelecom.clara.cloud.logicalmodel.InvalidConfigServiceException;
import com.francetelecom.clara.cloud.logicalmodel.LogicalModelNotConsistentException;
import com.francetelecom.clara.cloud.presentation.utils.CreateObjectsWithJava;
import com.francetelecom.clara.cloud.presentation.utils.PaasTestApplication;
import com.francetelecom.clara.cloud.presentation.utils.PaasTestSession;
import com.francetelecom.clara.cloud.presentation.utils.PaasWicketTester;
import org.apache.wicket.Component;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.test.ApplicationContextMock;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.security.authentication.AuthenticationManager;
@RunWith(MockitoJUnitRunner.class)
public class BusinessExceptionHandlerTest {
@Mock
private ManagePaasUser managePaasUser;
@Mock
private AuthenticationManager authenticationManager;
BusinessExceptionHandler sut;
private PaasWicketTester tester;
Component testComponent;
private String cuid = "testuser";
private PaasRoleEnum role = PaasRoleEnum.ROLE_USER;
@Before
public void setup() {
// Create an application without spring init
PaasTestApplication app = new PaasTestApplication() {
@Override
public void init() {
}
};
tester = new PaasWicketTester(new PaasTestApplication(getApplicationContextMock(), false));
((PaasTestSession)tester.getSession()).setPaasUser(CreateObjectsWithJava.createPaasUserMock(cuid, role));
// Dummy Component used for test
testComponent = new Component("test") {
@Override
protected void onRender() {
}
};
// Start component
tester.startComponentInPage(testComponent);
// Configure our SUT
sut = new BusinessExceptionHandler(testComponent);
}
@Test
public void testApplicationNotFoundException() {
// Test data
ApplicationNotFoundException e = new ApplicationNotFoundException("specific error");
// Exercise SUT
sut.error(e);
// Assertions
String[] expectedErrorMessages = new String[1];
expectedErrorMessages[0] = testComponent.getString("portal.application.notfound");
tester.assertErrorMessages(expectedErrorMessages);
}
@Test
public void testInvalidMavenReferenceException() {
// Test data
MavenReference mr = new MavenReference("group","artifact","version","type","classifier");
InvalidMavenReferenceException e = new InvalidMavenReferenceException(mr,ErrorType.ARTIFACT_NOT_FOUND);
// Exercise SUT
sut.error(e);
// Assertions
String[] expectedErrorMessages = new String[1];
expectedErrorMessages[0] = testComponent.getString("portal.logicaldeployment.artifactnotfound", toMessageParameters(mr.toGavString()));
tester.assertErrorMessages(expectedErrorMessages);
}
@Test
public void testLogicalModelConsistencyException() {
// Test Data : a LogicalModelException wrapping 2 InvalidMavenReferenceException + 1 InvalidConfigServiceException
MavenReference mr1 = new MavenReference("group","artifact-1","version","type","classifier");
InvalidMavenReferenceException e1 = new InvalidMavenReferenceException(mr1,ErrorType.ARTIFACT_NOT_FOUND);
MavenReference mr2 = new MavenReference("group","artifact-2","version","type","classifier");
InvalidMavenReferenceException e2 = new InvalidMavenReferenceException(mr2,ErrorType.ARTIFACT_NOT_FOUND);
InvalidConfigServiceException e3 = new InvalidConfigServiceException();
e3.setType(InvalidConfigServiceException.ErrorType.DUPLICATE_KEYS);
e3.getDuplicateKeys().add("key1");
e3.setImpactedElementName("jee1");
LogicalModelNotConsistentException e = new LogicalModelNotConsistentException();
e.addError(e1);
e.addError(e2);
e.addError(e3);
// Exercise SUT
sut.error(e);
// Assertions
String[] expectedErrorMessages = new String[3];
expectedErrorMessages[0] = testComponent.getString("portal.logicaldeployment.artifactnotfound", toMessageParameters(mr1.toGavString()));
expectedErrorMessages[1] = testComponent.getString("portal.logicaldeployment.artifactnotfound", toMessageParameters(mr2.toGavString()));
expectedErrorMessages[2] = testComponent.getString("portal.designer.config.summary.error.duplicateKeys.jee", toMessageParameters(e3.getImpactedElementName(),e3.getDuplicateKeys().toString()));
tester.assertErrorMessages(expectedErrorMessages);
// This could be used to have a test more tolerant:
// Assert.assertEquals(3, tester.getMessages(FeedbackMessage.ERROR).size());
}
private IModel<String[]> toMessageParameters(String... params) {
return new Model<String[]>(params);
}
@After
public void cleanFeedbacks() {
tester.cleanupFeedbackMessages();
}
/**
* Create an applicationContextMock to inject in Spring for Wicket
* @return
*/
private ApplicationContextMock getApplicationContextMock() {
ApplicationContextMock applicationContextMock = new ApplicationContextMock();
applicationContextMock.putBean(managePaasUser);
applicationContextMock.putBean("authenticationManager",authenticationManager);
return applicationContextMock;
}
}