package com.jaspersoft.jasperserver.jaxrs.client.apiadapters.connections; import com.jaspersoft.jasperserver.dto.connection.FtpConnection; import com.jaspersoft.jasperserver.dto.connection.LfsConnection; import com.jaspersoft.jasperserver.dto.connection.metadata.TableMetadata; import com.jaspersoft.jasperserver.dto.resources.ClientCustomDataSource; import com.jaspersoft.jasperserver.dto.resources.ClientJdbcDataSource; import com.jaspersoft.jasperserver.dto.resources.ClientJndiJdbcDataSource; import com.jaspersoft.jasperserver.jaxrs.client.core.JerseyRequest; import com.jaspersoft.jasperserver.jaxrs.client.core.RestClientConfiguration; import com.jaspersoft.jasperserver.jaxrs.client.core.SessionStorage; import com.jaspersoft.jasperserver.jaxrs.client.core.enums.ConnectionMediaType; import com.jaspersoft.jasperserver.jaxrs.client.core.enums.MimeType; import com.jaspersoft.jasperserver.jaxrs.client.core.exceptions.MandatoryParameterNotFoundException; import com.jaspersoft.jasperserver.jaxrs.client.core.exceptions.handling.DefaultErrorHandler; import com.jaspersoft.jasperserver.jaxrs.client.core.operationresult.OperationResult; import org.mockito.Mock; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.testng.PowerMockTestCase; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; import static org.powermock.api.mockito.PowerMockito.doReturn; import static org.powermock.api.mockito.PowerMockito.mockStatic; import static org.powermock.api.mockito.PowerMockito.verifyStatic; import static org.testng.Assert.assertSame; /** * <p/> * <p/> * * @author tetiana.iefimenko * @version $Id$ * @see */ @SuppressWarnings("unchecked") @PrepareForTest({JerseyRequest.class}) public class SingleConnectionsAdapterTest extends PowerMockTestCase { public static final String TEST_UUID = "someUuId"; public static final String CONNECTIONS_URI = "connections"; @Mock private SessionStorage sessionStorageMock; @Mock private RestClientConfiguration configurationMock; @Mock private JerseyRequest<FtpConnection> ftpConnectionJerseyRequestMock; @Mock private JerseyRequest jerseyRequestMock; @Mock private JerseyRequest<LfsConnection> lfsConnectionJerseyRequestMock; @Mock private JerseyRequest<ClientCustomDataSource> customDataSourceJerseyRequestMock; @Mock private JerseyRequest<ClientJndiJdbcDataSource> jndiJdbcDataSourceJerseyRequestMock; @Mock private JerseyRequest<ClientJdbcDataSource> jdbcDataSourceJerseyRequestMock; @Mock private JerseyRequest<TableMetadata> tableMetadataRequestMock; @Mock private OperationResult operationResultMock; @Mock private OperationResult<FtpConnection> ftpConnectionOperationResultMock; @Mock private OperationResult<LfsConnection> lfsConnectionOperationResultMock; @Mock private OperationResult<ClientCustomDataSource> customDataSourceOperationResultMock; @Mock private OperationResult<ClientJndiJdbcDataSource> jndiDataSourceOperationResultMock; @Mock private OperationResult<ClientJdbcDataSource> jdbcDataSourceOperationResultMock; @Mock private OperationResult<TableMetadata> tableMetadataOperationResultMock; private ConnectionsService connectionsService; @BeforeMethod public void before() { initMocks(this); connectionsService = new ConnectionsService(sessionStorageMock); } @AfterMethod public void after() { reset(sessionStorageMock , configurationMock , jerseyRequestMock , ftpConnectionJerseyRequestMock , lfsConnectionJerseyRequestMock , customDataSourceJerseyRequestMock , jndiJdbcDataSourceJerseyRequestMock , jdbcDataSourceJerseyRequestMock , tableMetadataRequestMock , operationResultMock , ftpConnectionOperationResultMock , lfsConnectionOperationResultMock , customDataSourceOperationResultMock , jndiDataSourceOperationResultMock , jdbcDataSourceOperationResultMock , tableMetadataOperationResultMock); } @Test public void should_return_proper_ftp_connection_operationResult_when_get() throws Exception { //when mockStatic(JerseyRequest.class); when(JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(FtpConnection.class) , eq(new String[]{CONNECTIONS_URI, TEST_UUID}) , any(DefaultErrorHandler.class))).thenReturn(ftpConnectionJerseyRequestMock); doReturn(ftpConnectionOperationResultMock).when(ftpConnectionJerseyRequestMock).get(); OperationResult<FtpConnection> connection = connectionsService .connection(FtpConnection.class, "someMiMeType", TEST_UUID) .get(); //then assertSame(ftpConnectionOperationResultMock, connection); verifyStatic(times(1)); JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(FtpConnection.class) , eq(new String[]{CONNECTIONS_URI, TEST_UUID}) , any(DefaultErrorHandler.class)); verify(ftpConnectionJerseyRequestMock).get(); } @Test public void should_return_proper_ftp_connection_operationResult_when_create() throws Exception { //when mockStatic(JerseyRequest.class); when(JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(FtpConnection.class) , eq(new String[]{CONNECTIONS_URI}) , any(DefaultErrorHandler.class))).thenReturn(ftpConnectionJerseyRequestMock); doReturn(configurationMock).when(sessionStorageMock).getConfiguration(); doReturn(MimeType.JSON).when(configurationMock).getContentMimeType(); doReturn(ftpConnectionJerseyRequestMock).when(ftpConnectionJerseyRequestMock).setContentType(ConnectionMediaType.FTP_JSON); doReturn(ftpConnectionOperationResultMock).when(ftpConnectionJerseyRequestMock).post(any(FtpConnection.class)); OperationResult<FtpConnection> connection = connectionsService .connection(FtpConnection.class, ConnectionMediaType.FTP_TYPE, TEST_UUID) .create(new FtpConnection()); //then assertSame(ftpConnectionOperationResultMock, connection); verifyStatic(times(1)); JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(FtpConnection.class) , eq(new String[]{CONNECTIONS_URI}) , any(DefaultErrorHandler.class)); verify(sessionStorageMock).getConfiguration(); verify(configurationMock).getContentMimeType(); verify(ftpConnectionJerseyRequestMock).setContentType(ConnectionMediaType.FTP_JSON); verify(ftpConnectionJerseyRequestMock).post(any(FtpConnection.class)); } @Test public void should_return_proper_ftp_connection_operationResult_when_update() throws Exception { //when mockStatic(JerseyRequest.class); when(JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(FtpConnection.class) , eq(new String[]{CONNECTIONS_URI, TEST_UUID}) , any(DefaultErrorHandler.class))).thenReturn(ftpConnectionJerseyRequestMock); doReturn(configurationMock).when(sessionStorageMock).getConfiguration(); doReturn(MimeType.JSON).when(configurationMock).getContentMimeType(); doReturn(ftpConnectionJerseyRequestMock).when(ftpConnectionJerseyRequestMock).setContentType(ConnectionMediaType.FTP_JSON); doReturn(ftpConnectionOperationResultMock).when(ftpConnectionJerseyRequestMock).put(any(FtpConnection.class)); OperationResult<FtpConnection> connection = connectionsService .connection(FtpConnection.class, ConnectionMediaType.FTP_TYPE, TEST_UUID) .update(new FtpConnection()); //then assertSame(ftpConnectionOperationResultMock, connection); verifyStatic(times(1)); JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(FtpConnection.class) , eq(new String[]{CONNECTIONS_URI, TEST_UUID}) , any(DefaultErrorHandler.class)); verify(sessionStorageMock).getConfiguration(); verify(configurationMock).getContentMimeType(); verify(ftpConnectionJerseyRequestMock).setContentType(ConnectionMediaType.FTP_JSON); verify(ftpConnectionJerseyRequestMock).put(any(FtpConnection.class)); } @Test public void should_return_proper_ftp_connection_operationResult_when_delete() throws Exception { //when mockStatic(JerseyRequest.class); when(JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(Object.class) , eq(new String[]{CONNECTIONS_URI, TEST_UUID}) , any(DefaultErrorHandler.class))).thenReturn(jerseyRequestMock); doReturn(operationResultMock).when(jerseyRequestMock).delete(); OperationResult connection = connectionsService .connection(TEST_UUID) .delete(); //then assertSame(operationResultMock, connection); verifyStatic(times(1)); JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(Object.class) , eq(new String[]{CONNECTIONS_URI, TEST_UUID}) , any(DefaultErrorHandler.class)); verify(jerseyRequestMock).delete(); } @Test public void should_return_proper_local_file_system_connection_operationResult_when_get() throws Exception { //when mockStatic(JerseyRequest.class); when(JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(LfsConnection.class) , eq(new String[]{CONNECTIONS_URI, TEST_UUID}) , any(DefaultErrorHandler.class))).thenReturn(lfsConnectionJerseyRequestMock); doReturn(lfsConnectionOperationResultMock).when(lfsConnectionJerseyRequestMock).get(); OperationResult<LfsConnection> connection = connectionsService .connection(LfsConnection.class, ConnectionMediaType.LOCAL_FILE_SYSTEM_TYPE, TEST_UUID) .get(); //then assertSame(lfsConnectionOperationResultMock, connection); verifyStatic(times(1)); JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(LfsConnection.class) , eq(new String[]{CONNECTIONS_URI, TEST_UUID}) , any(DefaultErrorHandler.class)); verify(lfsConnectionJerseyRequestMock).get(); } @Test public void should_return_proper_local_file_system_connection_operationResult_when_create() throws Exception { //when mockStatic(JerseyRequest.class); when(JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(LfsConnection.class) , eq(new String[]{CONNECTIONS_URI}) , any(DefaultErrorHandler.class))).thenReturn(lfsConnectionJerseyRequestMock); doReturn(configurationMock).when(sessionStorageMock).getConfiguration(); doReturn(MimeType.JSON).when(configurationMock).getContentMimeType(); doReturn(lfsConnectionJerseyRequestMock).when(lfsConnectionJerseyRequestMock).setContentType(ConnectionMediaType.LOCAL_FILE_SYSTEM_JSON); doReturn(lfsConnectionOperationResultMock).when(lfsConnectionJerseyRequestMock).post(any(LfsConnection.class)); OperationResult<LfsConnection> connection = connectionsService .connection(LfsConnection.class, ConnectionMediaType.LOCAL_FILE_SYSTEM_TYPE, TEST_UUID) .create(new LfsConnection()); //then assertSame(lfsConnectionOperationResultMock, connection); verifyStatic(times(1)); JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(LfsConnection.class) , eq(new String[]{CONNECTIONS_URI}) , any(DefaultErrorHandler.class)); verify(sessionStorageMock).getConfiguration(); verify(configurationMock).getContentMimeType(); verify(lfsConnectionJerseyRequestMock).setContentType(ConnectionMediaType.LOCAL_FILE_SYSTEM_JSON); verify(lfsConnectionJerseyRequestMock).post(any(LfsConnection.class)); } @Test public void should_return_proper_custom_data_source_connection_operationResult_when_get() throws Exception { //when mockStatic(JerseyRequest.class); when(JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(ClientCustomDataSource.class) , eq(new String[]{CONNECTIONS_URI, TEST_UUID}) , any(DefaultErrorHandler.class))).thenReturn(customDataSourceJerseyRequestMock); doReturn(customDataSourceOperationResultMock).when(customDataSourceJerseyRequestMock).get(); OperationResult<ClientCustomDataSource> connection = connectionsService .connection(ClientCustomDataSource.class, ConnectionMediaType.CUSTOM_DATA_SOURCE_TYPE, TEST_UUID) .get(); //then assertSame(customDataSourceOperationResultMock, connection); verifyStatic(times(1)); JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(ClientCustomDataSource.class) , eq(new String[]{CONNECTIONS_URI, TEST_UUID}) , any(DefaultErrorHandler.class)); verify(customDataSourceJerseyRequestMock).get(); } @Test public void should_return_proper_custom_data_source_connection_operationResult_when_create() throws Exception { //when mockStatic(JerseyRequest.class); when(JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(ClientCustomDataSource.class) , eq(new String[]{CONNECTIONS_URI}) , any(DefaultErrorHandler.class))).thenReturn(customDataSourceJerseyRequestMock); doReturn(configurationMock).when(sessionStorageMock).getConfiguration(); doReturn(MimeType.JSON).when(configurationMock).getContentMimeType(); doReturn(customDataSourceJerseyRequestMock).when(customDataSourceJerseyRequestMock).setContentType(ConnectionMediaType.CUSTOM_DATA_SOURCE_JSON); doReturn(customDataSourceOperationResultMock).when(customDataSourceJerseyRequestMock).post(any(ClientCustomDataSource.class)); OperationResult<ClientCustomDataSource> connection = connectionsService .connection(ClientCustomDataSource.class, ConnectionMediaType.CUSTOM_DATA_SOURCE_TYPE, TEST_UUID) .create(new ClientCustomDataSource()); //then assertSame(customDataSourceOperationResultMock, connection); verifyStatic(times(1)); JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(ClientCustomDataSource.class) , eq(new String[]{CONNECTIONS_URI}) , any(DefaultErrorHandler.class)); verify(sessionStorageMock).getConfiguration(); verify(configurationMock).getContentMimeType(); verify(customDataSourceJerseyRequestMock).setContentType(ConnectionMediaType.CUSTOM_DATA_SOURCE_JSON); verify(customDataSourceJerseyRequestMock).post(any(ClientCustomDataSource.class)); } @Test public void should_return_proper_jndi_connection_operationResult_when_get() throws Exception { //when mockStatic(JerseyRequest.class); when(JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(ClientJndiJdbcDataSource.class) , eq(new String[]{CONNECTIONS_URI, TEST_UUID}) , any(DefaultErrorHandler.class))).thenReturn(jndiJdbcDataSourceJerseyRequestMock); doReturn(jndiDataSourceOperationResultMock).when(jndiJdbcDataSourceJerseyRequestMock).get(); OperationResult<ClientJndiJdbcDataSource> connection = connectionsService .connection(ClientJndiJdbcDataSource.class, ConnectionMediaType.JNDI_JDBC_DATA_SOURCE_TYPE, TEST_UUID) .get(); //then assertSame(jndiDataSourceOperationResultMock, connection); verifyStatic(times(1)); JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(ClientJndiJdbcDataSource.class) , eq(new String[]{CONNECTIONS_URI, TEST_UUID}) , any(DefaultErrorHandler.class)); verify(jndiJdbcDataSourceJerseyRequestMock).get(); } @Test public void should_return_proper_jndi_connection_operationResult_when_create() throws Exception { //when mockStatic(JerseyRequest.class); when(JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(ClientJndiJdbcDataSource.class) , eq(new String[]{CONNECTIONS_URI}) , any(DefaultErrorHandler.class))).thenReturn(jndiJdbcDataSourceJerseyRequestMock); doReturn(configurationMock).when(sessionStorageMock).getConfiguration(); doReturn(MimeType.JSON).when(configurationMock).getContentMimeType(); doReturn(jndiJdbcDataSourceJerseyRequestMock).when(jndiJdbcDataSourceJerseyRequestMock).setContentType(ConnectionMediaType.JNDI_JDBC_DATA_SOURCE_JSON); doReturn(jndiDataSourceOperationResultMock).when(jndiJdbcDataSourceJerseyRequestMock).post(any(ClientJndiJdbcDataSource.class)); OperationResult<ClientJndiJdbcDataSource> connection = connectionsService .connection(ClientJndiJdbcDataSource.class, ConnectionMediaType.JNDI_JDBC_DATA_SOURCE_TYPE, TEST_UUID) .create(new ClientJndiJdbcDataSource()); //then assertSame(jndiDataSourceOperationResultMock, connection); verifyStatic(times(1)); JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(ClientJndiJdbcDataSource.class) , eq(new String[]{CONNECTIONS_URI}) , any(DefaultErrorHandler.class)); verify(sessionStorageMock).getConfiguration(); verify(configurationMock).getContentMimeType(); verify(jndiJdbcDataSourceJerseyRequestMock).setContentType(ConnectionMediaType.JNDI_JDBC_DATA_SOURCE_JSON); verify(jndiJdbcDataSourceJerseyRequestMock).post(any(ClientJndiJdbcDataSource.class)); } @Test public void should_return_proper_jdbc_connection_operationResult_when_get() throws Exception { //when mockStatic(JerseyRequest.class); when(JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(ClientJdbcDataSource.class) , eq(new String[]{CONNECTIONS_URI, TEST_UUID}) , any(DefaultErrorHandler.class))).thenReturn(jdbcDataSourceJerseyRequestMock); doReturn(jdbcDataSourceOperationResultMock).when(jdbcDataSourceJerseyRequestMock).get(); OperationResult<ClientJdbcDataSource> connection = connectionsService .connection(ClientJdbcDataSource.class, ConnectionMediaType.JDBC_DATA_SOURCE_TYPE, TEST_UUID) .get(); //then assertSame(jdbcDataSourceOperationResultMock, connection); verifyStatic(times(1)); JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(ClientJdbcDataSource.class) , eq(new String[]{CONNECTIONS_URI, TEST_UUID}) , any(DefaultErrorHandler.class)); verify(jdbcDataSourceJerseyRequestMock).get(); } @Test public void should_return_proper_jdbc_connection_operationResult_when_create() throws Exception { //when mockStatic(JerseyRequest.class); when(JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(ClientJdbcDataSource.class) , eq(new String[]{CONNECTIONS_URI}) , any(DefaultErrorHandler.class))).thenReturn(jdbcDataSourceJerseyRequestMock); doReturn(configurationMock).when(sessionStorageMock).getConfiguration(); doReturn(MimeType.JSON).when(configurationMock).getContentMimeType(); doReturn(jdbcDataSourceJerseyRequestMock).when(jdbcDataSourceJerseyRequestMock).setContentType(ConnectionMediaType.JDBC_DATA_SOURCE_JSON); doReturn(jdbcDataSourceOperationResultMock).when(jdbcDataSourceJerseyRequestMock).post(any(ClientJdbcDataSource.class)); OperationResult<ClientJdbcDataSource> connection = connectionsService .connection(ClientJdbcDataSource.class, ConnectionMediaType.JDBC_DATA_SOURCE_TYPE, TEST_UUID) .create(new ClientJdbcDataSource()); //then assertSame(jdbcDataSourceOperationResultMock, connection); verifyStatic(times(1)); JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(ClientJdbcDataSource.class) , eq(new String[]{CONNECTIONS_URI}) , any(DefaultErrorHandler.class)); verify(sessionStorageMock).getConfiguration(); verify(configurationMock).getContentMimeType(); verify(jdbcDataSourceJerseyRequestMock).setContentType(ConnectionMediaType.JDBC_DATA_SOURCE_JSON); verify(jdbcDataSourceJerseyRequestMock).post(any(ClientJdbcDataSource.class)); } @Test public void should_return_proper_operationResult_when_get_metadata() throws Exception { //when mockStatic(JerseyRequest.class); when(JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(TableMetadata.class) , eq(new String[]{CONNECTIONS_URI, TEST_UUID, "metadata"}) , any(DefaultErrorHandler.class))).thenReturn(tableMetadataRequestMock); doReturn(configurationMock).when(sessionStorageMock).getConfiguration(); doReturn(MimeType.JSON).when(configurationMock).getAcceptMimeType(); doReturn(tableMetadataRequestMock).when(tableMetadataRequestMock).setAccept(ConnectionMediaType.JDBC_DATA_SOURCE_JSON); doReturn(tableMetadataOperationResultMock).when(tableMetadataRequestMock).get(); OperationResult<TableMetadata> connection = connectionsService .connection(ClientJdbcDataSource.class, ConnectionMediaType.JDBC_DATA_SOURCE_TYPE, TableMetadata.class, ConnectionMediaType.JDBC_DATA_SOURCE_METADATA_TYPE, TEST_UUID) .metadata(); //then assertSame(tableMetadataOperationResultMock, connection); verifyStatic(times(1)); JerseyRequest.buildRequest(eq(sessionStorageMock) , eq(TableMetadata.class) , eq(new String[]{CONNECTIONS_URI, TEST_UUID, "metadata"}) , any(DefaultErrorHandler.class)); verify(sessionStorageMock).getConfiguration(); verify(configurationMock).getAcceptMimeType(); verify(tableMetadataRequestMock).setAccept(ConnectionMediaType.JDBC_DATA_SOURCE_METADATA_JSON); verify(tableMetadataRequestMock).get(); } @Test(expectedExceptions = IllegalArgumentException.class) public void should_return_throw_exception_when_create_connection_and_get_metadata_connection_is_invalid() throws Exception { //when connectionsService .connection(TableMetadata.class, ConnectionMediaType.JDBC_DATA_SOURCE_METADATA_TYPE, TEST_UUID) .createAndGetMetadata(new Object()); //then // an exception should be thrown } @Test(expectedExceptions = MandatoryParameterNotFoundException.class) public void should_throw_exception_when_update_connection_is_null() throws Exception { //when connectionsService .connection(TEST_UUID) .update(null); //then // an exception should be thrown } @Test(expectedExceptions = MandatoryParameterNotFoundException.class) public void should_throw_exception_when_create_connection_uuid_is_null() throws Exception { //when connectionsService .connection(null) .get(); //then // an exception should be thrown } @Test(expectedExceptions = MandatoryParameterNotFoundException.class) public void should_throw_exception_when_get_connection_uuid_is_empty() throws Exception { //when connectionsService .connection("") .get(); //then // an exception should be thrown } @Test(expectedExceptions = IllegalArgumentException.class) public void should_throw_exception_when_update_connection_type_is_invalid() throws Exception { //when connectionsService .connection(TEST_UUID) .update(new Object()); //then // an exception should be thrown } @Test(expectedExceptions = IllegalArgumentException.class) public void should_throw_exception_when_connection_class_is_invalid() throws Exception { //when connectionsService .connection(TEST_UUID) .create(new Object()); //then // an exception should be thrown } }