package org.bonitasoft.console.server.service; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.verify; import java.util.ArrayList; import org.bonitasoft.console.common.server.i18n.I18n; import org.bonitasoft.console.common.server.utils.BonitaHomeFolderAccessor; import org.bonitasoft.console.common.server.utils.UnauthorizedFolderException; import org.bonitasoft.engine.api.ApplicationAPI; import org.bonitasoft.engine.api.ImportStatus; import org.bonitasoft.engine.business.application.ApplicationImportPolicy; import org.bonitasoft.engine.exception.AlreadyExistsException; import org.bonitasoft.engine.exception.BonitaHomeNotSetException; import org.bonitasoft.engine.exception.ServerAPIException; import org.bonitasoft.engine.exception.UnknownAPITypeException; import org.bonitasoft.engine.session.InvalidSessionException; import org.bonitasoft.web.common.model.ImportStatusMessages; import org.bonitasoft.web.rest.server.BonitaRestAPIServlet; import org.bonitasoft.web.toolkit.client.common.i18n.AbstractI18n.LOCALE; import org.bonitasoft.web.toolkit.server.ServiceException; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.Spy; import org.mockito.runners.MockitoJUnitRunner; /** * @author Julien Mege * */ @RunWith(MockitoJUnitRunner.class) public class ApplicationsImportServiceTest { @Mock private ApplicationAPI applicationAPI; @Mock private BonitaHomeFolderAccessor tenantFolder; @Spy private ApplicationsImportService spiedApplicationImportService; @BeforeClass public static void initEnvironnement() { I18n.getInstance(); new BonitaRestAPIServlet(); } @Before public void init() throws InvalidSessionException, BonitaHomeNotSetException, ServerAPIException, UnknownAPITypeException { MockitoAnnotations.initMocks(this); doReturn(LOCALE.en).when(spiedApplicationImportService).getLocale(); Mockito.doReturn(applicationAPI).when(spiedApplicationImportService).getApplicationAPI(); } @Test public void should_importFileContent_call_ApplicationAPI_with_valid_param() throws Exception { spiedApplicationImportService.importFileContent(new byte[0], "FAIL_ON_DUPLICATES"); verify(applicationAPI).importApplications(new byte[0], ApplicationImportPolicy.FAIL_ON_DUPLICATES); } @Test public void should_importFileContent_return_ImportStatusMessages() throws Exception { final ArrayList<ImportStatus> statusList = new ArrayList<ImportStatus>(); statusList.add(new ImportStatus("status")); doReturn(statusList).when(applicationAPI).importApplications(new byte[0], ApplicationImportPolicy.FAIL_ON_DUPLICATES); final ImportStatusMessages importStatusMessages = spiedApplicationImportService.importFileContent(new byte[0], "FAIL_ON_DUPLICATES"); assertEquals(importStatusMessages.getImported().size(), 1); } @Test(expected = IllegalArgumentException.class) public void should_importFileContent_with_invalid_policy_throw_error() throws Exception { spiedApplicationImportService.importFileContent(new byte[0], "NOT_AUTHORIZED_POLICY"); } @Test public void should_Logger_log_using_expected_class_name() throws Exception { assertEquals(spiedApplicationImportService.getLogger().getName(), "org.bonitasoft.console.server.service.ApplicationsImportService"); } @Test public void should_FileReadingError_talk_about_application() throws Exception { assertEquals(spiedApplicationImportService.getFileReadingError(), "Error during Application import file reading."); } @Test public void should_getFileFormatExceptionMessage_talk_about_application() throws Exception { assertEquals(spiedApplicationImportService.getFileFormatExceptionMessage(), "Can't import Applications."); } @Test public void should_AlreadyExistsExceptionMessage_talk_about_application() throws Exception { final AlreadyExistsException alreadyExistsException = new AlreadyExistsException("name", "token"); assertEquals(spiedApplicationImportService.getAlreadyExistsExceptionMessage(alreadyExistsException), "Can't import applications. An application 'token' already exists"); } @Test public void should_getToken_return_expected_name() throws Exception { assertEquals(spiedApplicationImportService.getToken(), "/application/import"); } @Test public void should_getFileUploadParamName_return_expected_name() throws Exception { assertEquals(spiedApplicationImportService.getFileUploadParamName(), "applicationsDataUpload"); } @Test public void should_verify_authorisation_for_the_given_location_param() throws Exception { doReturn(tenantFolder).when(spiedApplicationImportService).getTenantFolder(); doReturn("../../../file.xml").when(spiedApplicationImportService).getFileUploadParamValue(); doReturn(1L).when(spiedApplicationImportService).getTenantId(); doThrow(new UnauthorizedFolderException("error")).when(tenantFolder).getTempFile(any(String.class), any(Long.class)); try { spiedApplicationImportService.run(); } catch (final ServiceException e) { assertTrue(e.getCause().getMessage().startsWith("error")); } } }