package com.jaspersoft.jasperserver.jaxrs.client.apiadapters.inputControls; import com.jaspersoft.jasperserver.dto.reports.inputcontrols.ReportInputControl; import com.jaspersoft.jasperserver.dto.reports.inputcontrols.ReportInputControlsListWrapper; import com.jaspersoft.jasperserver.jaxrs.client.core.JerseyRequest; import com.jaspersoft.jasperserver.jaxrs.client.core.SessionStorage; 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 java.util.LinkedList; import org.mockito.Mock; import org.mockito.Mockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.testng.PowerMockTestCase; import org.powermock.reflect.Whitebox; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import static com.jaspersoft.jasperserver.jaxrs.client.core.JerseyRequest.buildRequest; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyObject; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; 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.spy; import static org.powermock.api.mockito.PowerMockito.verifyStatic; import static org.powermock.api.mockito.PowerMockito.when; import static org.powermock.api.mockito.PowerMockito.whenNew; import static org.mockito.Mockito.reset; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertSame; /** * @author Tetiana Iefimenko */ @PrepareForTest({InputControlsAdapter.class, JerseyRequest.class, OperationResult.class}) public class InputControlsAdapterTest extends PowerMockTestCase { @Mock private SessionStorage sessionStorageMock; @Mock private JerseyRequest<ReportInputControlsListWrapper> requestMock; @Mock private OperationResult<ReportInputControlsListWrapper> operationResultMock; @Mock private InputControlsValuesAdapter inputControlsValuesAdapterMock; private String uri = "uri"; @BeforeMethod public void before() { initMocks(this); } @Test(expectedExceptions = MandatoryParameterNotFoundException.class) public void should_throw_an_exception_when_uri_is_null() { // When new InputControlsAdapter(sessionStorageMock).container(null).get(); // Then // should be thrown an exception } @Test public void should_pass_session_storage_to_parent_adapter() { // Given InputControlsAdapter adapter= new InputControlsAdapter(sessionStorageMock); // When SessionStorage retrieved = adapter.getSessionStorage(); // Then assertSame(retrieved, sessionStorageMock); } @Test public void should_return_adapter_instance() throws Exception { // Given InputControlsAdapter adapter= new InputControlsAdapter(sessionStorageMock); whenNew(InputControlsValuesAdapter.class).withArguments(eq(sessionStorageMock), anyString()).thenReturn(inputControlsValuesAdapterMock); // When InputControlsValuesAdapter retrieved = adapter.values(); // Then assertSame(retrieved, inputControlsValuesAdapterMock); } @Test(expectedExceptions = IllegalArgumentException.class) public void should_throw_an_exception_when_sessionStorage_is_null() { // When new InputControlsAdapter(null); // Then // should be thrown an exception } @Test public void should_return_proper_operation_result_when_invoke_get() { // Given mockStatic(JerseyRequest.class); when(buildRequest( eq(sessionStorageMock), eq(ReportInputControlsListWrapper.class), eq(new String[]{"reports", uri, "inputControls"}), any(DefaultErrorHandler.class)) ).thenReturn(requestMock); doReturn(operationResultMock) .when(requestMock) .get(); InputControlsAdapter adapterSpy = spy(new InputControlsAdapter(sessionStorageMock)); adapterSpy.container(uri); // When OperationResult<ReportInputControlsListWrapper> retrieved = adapterSpy.get(); // Then verifyStatic(); buildRequest( eq(sessionStorageMock), eq(ReportInputControlsListWrapper.class), eq(new String[]{"reports", uri, "inputControls"}), any(DefaultErrorHandler.class)); Mockito.verify(requestMock).get(); assertEquals(Whitebox.getInternalState(adapterSpy, "containerUri"), uri); assertNotNull(retrieved); assertSame(retrieved, operationResultMock); } @Test public void should_return_proper_operation_result_when_invoke_reorder() { // Given mockStatic(JerseyRequest.class); when(buildRequest( eq(sessionStorageMock), eq(ReportInputControlsListWrapper.class), eq(new String[]{"reports", uri, "inputControls"}), any(DefaultErrorHandler.class)) ).thenReturn(requestMock); doReturn(operationResultMock) .when(requestMock) .put(anyObject()); InputControlsAdapter adapterSpy = spy(new InputControlsAdapter(sessionStorageMock)); adapterSpy.container(uri); // When OperationResult<ReportInputControlsListWrapper> retrieved = adapterSpy.reorder(new LinkedList<ReportInputControl>()); // Then verifyStatic(); buildRequest( eq(sessionStorageMock), eq(ReportInputControlsListWrapper.class), eq(new String[]{"reports", uri, "inputControls"}), any(DefaultErrorHandler.class)); Mockito.verify(requestMock).put(anyObject()); assertNotNull(retrieved); assertSame(retrieved, operationResultMock); } @Test public void should_invoke_adding_parameter() { // Given mockStatic(JerseyRequest.class); when(buildRequest( eq(sessionStorageMock), eq(ReportInputControlsListWrapper.class), eq(new String[]{"reports", uri, "inputControls"}), any(DefaultErrorHandler.class)) ).thenReturn(requestMock); doReturn(requestMock) .when(requestMock) .addParam("exclude", "state"); doReturn(operationResultMock) .when(requestMock) .get(); InputControlsAdapter adapterSpy = spy(new InputControlsAdapter(sessionStorageMock)); adapterSpy.container(uri).excludeState(true); // When OperationResult<ReportInputControlsListWrapper> retrieved = adapterSpy.get(); // Then verifyStatic(); buildRequest( eq(sessionStorageMock), eq(ReportInputControlsListWrapper.class), eq(new String[]{"reports", uri, "inputControls"}), any(DefaultErrorHandler.class)); Mockito.verify(requestMock).get(); Mockito.verify(requestMock).addParam("exclude", "state"); assertEquals(Whitebox.getInternalState(adapterSpy, "containerUri"), uri); assertEquals(Whitebox.getInternalState(adapterSpy, "excludeState"), Boolean.TRUE); assertNotNull(retrieved); assertSame(retrieved, operationResultMock); } @AfterMethod public void after() { reset(sessionStorageMock, requestMock, operationResultMock, inputControlsValuesAdapterMock); } }