package com.jaspersoft.jasperserver.jaxrs.client.apiadapters.reporting; import com.jaspersoft.jasperserver.jaxrs.client.core.Callback; import com.jaspersoft.jasperserver.jaxrs.client.core.JerseyRequest; import com.jaspersoft.jasperserver.jaxrs.client.core.RequestExecution; import com.jaspersoft.jasperserver.jaxrs.client.core.SessionStorage; import com.jaspersoft.jasperserver.jaxrs.client.core.operationresult.OperationResult; import com.jaspersoft.jasperserver.jaxrs.client.dto.reports.ReportExecutionDescriptor; import com.jaspersoft.jasperserver.jaxrs.client.dto.reports.ReportExecutionRequest; import java.util.TimeZone; import org.mockito.Mock; import org.powermock.api.mockito.PowerMockito; 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 java.lang.String; import java.util.concurrent.atomic.AtomicInteger; import static com.jaspersoft.jasperserver.jaxrs.client.core.JerseyRequest.buildRequest; 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.MockitoAnnotations.initMocks; import static org.powermock.api.mockito.PowerMockito.doReturn; import static org.powermock.api.mockito.PowerMockito.mock; import static org.powermock.api.mockito.PowerMockito.mockStatic; import static org.powermock.api.mockito.PowerMockito.spy; import static org.powermock.api.mockito.PowerMockito.verifyNew; 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.testng.Assert.assertNotNull; import static org.testng.Assert.assertNotSame; import static org.testng.Assert.assertSame; /** * Unit tests for {@link ReportingService} */ @PrepareForTest({JerseyRequest.class, ReportingService.class}) public class ReportingServiceTest extends PowerMockTestCase { @Mock private SessionStorage sessionStorageMock; @Mock private JerseyRequest<ReportExecutionDescriptor> requestMock; @Mock private ReportExecutionRequest executionRequestMock; @Mock private OperationResult<ReportExecutionDescriptor> resultMock; @BeforeMethod public void before() { initMocks(this); } @Test /** * for {@link ReportingService#asyncNewReportExecutionRequest(ReportExecutionRequest, com.jaspersoft.jasperserver.jaxrs.client.core.Callback)} */ public void should_return_wrapped_ReportExecutionDescriptor() throws InterruptedException { // Given final AtomicInteger newThreadId = new AtomicInteger(); int currentThreadId = (int) Thread.currentThread().getId(); mockStatic(JerseyRequest.class); when(buildRequest(eq(sessionStorageMock), eq(ReportExecutionDescriptor.class), eq(new String[]{"reportExecutions"}))).thenReturn(requestMock); ReportingService serviceSpy = PowerMockito.spy(new ReportingService(sessionStorageMock)); Callback<OperationResult<ReportExecutionDescriptor>, Void> callback = spy(new Callback<OperationResult<ReportExecutionDescriptor>, Void>() { @Override public Void execute(OperationResult<ReportExecutionDescriptor> data) { newThreadId.set((int) Thread.currentThread().getId()); synchronized (this) { this.notify(); } return null; } }); doReturn(resultMock).when(requestMock).post(executionRequestMock); doReturn(null).when(callback).execute(resultMock); // When RequestExecution retrieved = serviceSpy.asyncNewReportExecutionRequest(executionRequestMock, callback); // Wait synchronized (callback) { callback.wait(1000); } // Then assertNotNull(retrieved); assertNotSame(currentThreadId, newThreadId.get()); verify(callback, times(1)).execute(resultMock); verify(requestMock, times(1)).post(executionRequestMock); } @Test /** * for {@link ReportingService#newReportExecutionRequest(ReportExecutionRequest)} */ public void should_return_operation_result_with_proper_object() { // Given mockStatic(JerseyRequest.class); when(buildRequest(eq(sessionStorageMock), eq(ReportExecutionDescriptor.class), eq(new String[]{"reportExecutions"}))).thenReturn(requestMock); doReturn(resultMock).when(requestMock).post(executionRequestMock); ReportingService serviceSpy = PowerMockito.spy(new ReportingService(sessionStorageMock)); // When OperationResult<ReportExecutionDescriptor> retrieved = serviceSpy.newReportExecutionRequest(executionRequestMock); // Then assertNotNull(retrieved); assertSame(retrieved, resultMock); verifyStatic(times(1)); buildRequest(eq(sessionStorageMock), eq(ReportExecutionDescriptor.class), eq(new String[]{"reportExecutions"})); } @Test /** * for {@link ReportingService#newReportExecutionRequest(ReportExecutionRequest)} */ public void should_set_time_zone_and_return_operation_result_with_proper_object() { // Given mockStatic(JerseyRequest.class); when(buildRequest(eq(sessionStorageMock), eq(ReportExecutionDescriptor.class), eq(new String[]{"reportExecutions"}))).thenReturn(requestMock); doReturn(TimeZone.getTimeZone("America/Los_Angeles")).when(executionRequestMock).getTimeZone(); doReturn(requestMock).when(requestMock).addHeader("Accept-Timezone", "America/Los_Angeles"); doReturn(resultMock).when(requestMock).post(executionRequestMock); ReportingService serviceSpy = PowerMockito.spy(new ReportingService(sessionStorageMock)); // When OperationResult<ReportExecutionDescriptor> retrieved = serviceSpy.newReportExecutionRequest(executionRequestMock); // Then assertNotNull(retrieved); assertSame(retrieved, resultMock); verifyStatic(times(1)); buildRequest(eq(sessionStorageMock), eq(ReportExecutionDescriptor.class), eq(new String[]{"reportExecutions"})); verify(requestMock).addHeader("Accept-Timezone", "America/Los_Angeles"); } @Test /** * for {@link ReportingService#reportExecutionRequest(String)} */ public void should_return_proper_builder_instance() throws Exception { // Given ReportExecutionRequestBuilder builderMock = mock(ReportExecutionRequestBuilder.class); whenNew(ReportExecutionRequestBuilder.class).withArguments(sessionStorageMock, "id").thenReturn(builderMock); ReportingService serviceSpy = PowerMockito.spy(new ReportingService(sessionStorageMock)); // When ReportExecutionRequestBuilder retrieved = serviceSpy.reportExecutionRequest("id"); // Then assertNotNull(retrieved); assertSame(retrieved, builderMock); verifyNew(ReportExecutionRequestBuilder.class).withArguments(sessionStorageMock, "id"); } @Test /** * for {@link ReportingService#runningReportsAndJobs()} */ public void should_return_proper_ReportsAndJobsSearch_instance() throws Exception { // Given ReportsAndJobsSearchAdapter adapterMock = mock(ReportsAndJobsSearchAdapter.class); whenNew(ReportsAndJobsSearchAdapter.class).withArguments(sessionStorageMock).thenReturn(adapterMock); ReportingService serviceSpy = PowerMockito.spy(new ReportingService(sessionStorageMock)); // When ReportsAndJobsSearchAdapter retrieved = serviceSpy.runningReportsAndJobs(); // Then assertNotNull(retrieved); assertSame(retrieved, adapterMock); verifyNew(ReportsAndJobsSearchAdapter.class).withArguments(sessionStorageMock); } @Test /** * for {@link ReportingService#report(String)} */ public void should_return_proper_ReportsAdapter_instance() throws Exception { // Given ReportsAdapter adapterMock = mock(ReportsAdapter.class); whenNew(ReportsAdapter.class).withArguments(sessionStorageMock, "reportUnitUri").thenReturn(adapterMock); ReportingService serviceSpy = PowerMockito.spy(new ReportingService(sessionStorageMock)); // When ReportsAdapter retrieved = serviceSpy.report("reportUnitUri"); // Then assertNotNull(retrieved); assertSame(retrieved, adapterMock); verifyNew(ReportsAdapter.class).withArguments(sessionStorageMock, "reportUnitUri"); } @AfterMethod public void after() { reset(sessionStorageMock, requestMock, executionRequestMock, resultMock); } }