package com.jaspersoft.jasperserver.jaxrs.client.apiadapters.inputControls; 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 com.jaspersoft.jasperserver.jaxrs.client.dto.reports.inputcontrols.InputControlStateListWrapper; 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.eq; import static org.mockito.Mockito.reset; 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.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertSame; /** * @author Tetiana Iefimenko */ @PrepareForTest({InputControlsValuesAdapter.class, JerseyRequest.class, OperationResult.class}) public class InputControlsValuesAdapterTest extends PowerMockTestCase { @Mock private SessionStorage sessionStorageMock; @Mock private JerseyRequest<InputControlStateListWrapper> requestMock; @Mock private OperationResult<InputControlStateListWrapper> operationResultMock; private String uri = "uri"; @BeforeMethod public void before() { initMocks(this); } @Test public void should_pass_session_storage_to_parent_adapter() { // Given InputControlsValuesAdapter adapter = new InputControlsValuesAdapter(sessionStorageMock, uri); // When SessionStorage retrieved = adapter.getSessionStorage(); // Then assertSame(retrieved, sessionStorageMock); } @Test(expectedExceptions = IllegalArgumentException.class) public void should_throw_an_exception_when_sessionStorage_is_null() { // When new InputControlsValuesAdapter(null, uri); // Then // should be thrown an exception } @Test(expectedExceptions = MandatoryParameterNotFoundException.class) public void should_throw_an_exception_when_uri_is_null() { // When new InputControlsValuesAdapter(sessionStorageMock, 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(InputControlStateListWrapper.class), eq(new String[]{"reports", uri, "inputControls", "", "values"}), any(DefaultErrorHandler.class)) ).thenReturn(requestMock); doReturn(operationResultMock) .when(requestMock) .get(); InputControlsValuesAdapter adapterSpy = spy(new InputControlsValuesAdapter(sessionStorageMock, uri)); // When OperationResult<InputControlStateListWrapper> retrieved = adapterSpy.get(); // Then verifyStatic(); buildRequest( eq(sessionStorageMock), eq(InputControlStateListWrapper.class), eq(new String[]{"reports", uri, "inputControls", "", "values"}), any(DefaultErrorHandler.class)); Mockito.verify(requestMock).get(); assertEquals(Whitebox.getInternalState(adapterSpy, "containerUri"), uri); assertNotNull(retrieved); assertSame(retrieved, operationResultMock); } @Test public void should_invoke_use_cashed_data() { // Given mockStatic(JerseyRequest.class); when(buildRequest( eq(sessionStorageMock), eq(InputControlStateListWrapper.class), eq(new String[]{"reports", uri, "inputControls", "", "values"}), any(DefaultErrorHandler.class)) ).thenReturn(requestMock); doReturn(requestMock) .when(requestMock) .addParam("freshData", "true"); doReturn(operationResultMock) .when(requestMock) .get(); InputControlsValuesAdapter adapterSpy = spy(new InputControlsValuesAdapter(sessionStorageMock, uri)); adapterSpy.useCashedData(false); // When OperationResult<InputControlStateListWrapper> retrieved = adapterSpy.get(); // Then verifyStatic(); buildRequest( eq(sessionStorageMock), eq(InputControlStateListWrapper.class), eq(new String[]{"reports", uri, "inputControls", "", "values"}), any(DefaultErrorHandler.class)); Mockito.verify(requestMock).get(); Mockito.verify(requestMock).addParam("freshData", "true"); assertEquals(Whitebox.getInternalState(adapterSpy, "useFreshData"), Boolean.TRUE); assertNotNull(retrieved); assertSame(retrieved, operationResultMock); } @Test public void should_return_proper_operation_result__when_invoke_post() { // Given mockStatic(JerseyRequest.class); when(buildRequest( eq(sessionStorageMock), eq(InputControlStateListWrapper.class), eq(new String[]{"reports", uri, "inputControls", "param1;param2", "values"}), any(DefaultErrorHandler.class)) ).thenReturn(requestMock); doReturn(operationResultMock) .when(requestMock) .post(anyObject()); InputControlsValuesAdapter adapterSpy = spy(new InputControlsValuesAdapter(sessionStorageMock, uri)); // When OperationResult<InputControlStateListWrapper> retrieved = adapterSpy .parameter("param1", "value1") .parameter("param2", "value2", "value3") .run(); // Then verifyStatic(); buildRequest( eq(sessionStorageMock), eq(InputControlStateListWrapper.class), eq(new String[]{"reports", uri, "inputControls", "param1;param2", "values"}), any(DefaultErrorHandler.class)); Mockito.verify(requestMock).post(anyObject()); Mockito.verify(requestMock).post(anyObject()); assertNotNull(retrieved); assertSame(retrieved, operationResultMock); } @Test public void should_invoke_include_full_structure() { // Given mockStatic(JerseyRequest.class); when(buildRequest( eq(sessionStorageMock), eq(InputControlStateListWrapper.class), eq(new String[]{"reports", uri, "inputControls", "", "values"}), any(DefaultErrorHandler.class)) ).thenReturn(requestMock); doReturn(operationResultMock) .when(requestMock) .post(anyObject()); InputControlsValuesAdapter adapterSpy = spy(new InputControlsValuesAdapter(sessionStorageMock, uri)); // When OperationResult<InputControlStateListWrapper> retrieved = adapterSpy .parameter("param1", "value1") .parameter("param2", "value2") .includeFullStructure(true) .run(); // Then verifyStatic(); buildRequest( eq(sessionStorageMock), eq(InputControlStateListWrapper.class), eq(new String[]{"reports", uri, "inputControls", "", "values"}), any(DefaultErrorHandler.class)); Mockito.verify(requestMock).post(anyObject()); assertEquals(Whitebox.getInternalState(adapterSpy, "includeFullStructure"), Boolean.TRUE); assertNotNull(retrieved); assertSame(retrieved, operationResultMock); } @AfterMethod public void after() { reset(sessionStorageMock, requestMock, operationResultMock); } }