package com.jaspersoft.jasperserver.jaxrs.client.apiadapters.thumbnails;
import com.jaspersoft.jasperserver.dto.thumbnails.ResourceThumbnailsListWrapper;
import com.jaspersoft.jasperserver.jaxrs.client.core.JerseyRequest;
import com.jaspersoft.jasperserver.jaxrs.client.core.SessionStorage;
import com.jaspersoft.jasperserver.jaxrs.client.core.enums.RequestMethod;
import com.jaspersoft.jasperserver.jaxrs.client.core.exceptions.handling.DefaultErrorHandler;
import com.jaspersoft.jasperserver.jaxrs.client.core.operationresult.OperationResult;
import java.util.List;
import javax.ws.rs.core.MultivaluedHashMap;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.internal.util.reflection.Whitebox;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.testng.PowerMockTestCase;
import org.testng.Assert;
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.eq;
import static org.mockito.Mockito.never;
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.mockStatic;
import static org.powermock.api.mockito.PowerMockito.when;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertSame;
/**
* Unit tests for {@link BatchThumbnailAdapter}
*/
@SuppressWarnings("unchecked")
@PrepareForTest({JerseyRequest.class})
public class BatchThumbnailAdapterTest extends PowerMockTestCase {
@Mock
private SessionStorage sessionStorageMock;
@Mock
private JerseyRequest jerseyRequestMock;
@Mock
private OperationResult<ResourceThumbnailsListWrapper> operationResultMock;
@Captor
private ArgumentCaptor<MultivaluedHashMap> argument = ArgumentCaptor.forClass(MultivaluedHashMap.class);
@BeforeMethod
public void before() {
initMocks(this);
}
@Test
/**
* for {@link BatchThumbnailAdapter#BatchThumbnailAdapter(SessionStorage)}
*/
public void should_pass_session_storage_to_parent_adapter() {
BatchThumbnailAdapter thumbnailAdapter = new BatchThumbnailAdapter(sessionStorageMock);
SessionStorage retrieved = thumbnailAdapter.getSessionStorage();
assertSame(retrieved, sessionStorageMock);
}
@Test
/**
* for {@link BatchThumbnailAdapter#report(String)}
*/
public void should_set_report_uri() {
// Given
BatchThumbnailAdapter thumbnailAdapter = new BatchThumbnailAdapter(sessionStorageMock);
// When
BatchThumbnailAdapter retrieved = thumbnailAdapter.report("/public/Samples/Reports/07g.RevenueDetailReport");
// Then
MultivaluedHashMap<String, String> params =
(MultivaluedHashMap<String, String>) Whitebox.getInternalState(retrieved, "params");
List<String> list = params.get("uri");
assertSame(retrieved, thumbnailAdapter);
assertEquals(list.get(0), "/public/Samples/Reports/07g.RevenueDetailReport");
}
@Test
/**
* for {@link BatchThumbnailAdapter#defaultAllowed(Boolean)}
*/
public void should_set_thumbnails_parameter() {
// Given
BatchThumbnailAdapter thumbnailAdapter = new BatchThumbnailAdapter(sessionStorageMock);
// When
BatchThumbnailAdapter retrieved = thumbnailAdapter.defaultAllowed(true);
// Then /
Boolean param = (Boolean)Whitebox.getInternalState(retrieved, "defaultAllowed");
assertSame(retrieved, thumbnailAdapter);
assertEquals(param, Boolean.TRUE);
}
@Test
/**
* for {@link BatchThumbnailAdapter#get()}
*/
public void should_return_proper_operation_result_with_default_request_method() {
// Given
mockStatic(JerseyRequest.class);
when(buildRequest(eq(sessionStorageMock),
eq(ResourceThumbnailsListWrapper.class),
eq(new String[]{"thumbnails"}), any(DefaultErrorHandler.class))).thenReturn(jerseyRequestMock);
when(jerseyRequestMock.setContentType("application/x-www-form-urlencoded")).thenReturn(jerseyRequestMock);
when(jerseyRequestMock.addParam("defaultAllowed", "false")).thenReturn(jerseyRequestMock);
when(jerseyRequestMock.post(any(MultivaluedHashMap.class))).thenReturn(operationResultMock);
BatchThumbnailAdapter thumbnailAdapter = new BatchThumbnailAdapter(sessionStorageMock);
// When
OperationResult<ResourceThumbnailsListWrapper> retrieved = thumbnailAdapter
.reports("/public/Samples/Reports/07g.RevenueDetailReport", "/public/Samples/Reports/03._Store_Segment_Performance_Report")
.get();
// Then
Assert.assertNotNull(retrieved);
Assert.assertSame(retrieved, operationResultMock);
PowerMockito.verifyStatic(times(1));
buildRequest(eq(sessionStorageMock),
eq(ResourceThumbnailsListWrapper.class),
eq(new String[]{"thumbnails"}), any(DefaultErrorHandler.class));
verify(jerseyRequestMock).setContentType(eq("application/x-www-form-urlencoded"));
verify(jerseyRequestMock).post(any(MultivaluedHashMap.class));
verify(jerseyRequestMock, never()).addParams(argument.capture());
verify(jerseyRequestMock, never()).get();
verify(jerseyRequestMock).post(argument.capture());
Assert.assertNotNull(argument.getValue());
Assert.assertTrue(argument.getValue().containsKey("uri"));
Assert.assertSame(argument.getValue().get("uri").get(0), "/public/Samples/Reports/07g.RevenueDetailReport");
}
@Test
/**
* for {@link BatchThumbnailAdapter#get()}
*/
public void should_return_proper_operation_result_with_get_request_method() {
// Given
mockStatic(JerseyRequest.class);
when(buildRequest(eq(sessionStorageMock),
eq(ResourceThumbnailsListWrapper.class),
eq(new String[]{"thumbnails"}), any(DefaultErrorHandler.class))).thenReturn(jerseyRequestMock);
when(jerseyRequestMock.setContentType("application/x-www-form-urlencoded")).thenReturn(jerseyRequestMock);
when(jerseyRequestMock.addParams(any(MultivaluedHashMap.class))).thenReturn(jerseyRequestMock);
when(jerseyRequestMock.get()).thenReturn(operationResultMock);
BatchThumbnailAdapter thumbnailAdapter = new BatchThumbnailAdapter(sessionStorageMock);
// When
OperationResult<ResourceThumbnailsListWrapper> retrieved = thumbnailAdapter
.reports("/public/Samples/Reports/07g.RevenueDetailReport",
"/public/Samples/Reports/03._Store_Segment_Performance_Report")
.requestMethod(RequestMethod.GET)
.get();
// Then
Assert.assertNotNull(retrieved);
Assert.assertSame(retrieved, operationResultMock);
PowerMockito.verifyStatic(times(1));
buildRequest(eq(sessionStorageMock),
eq(ResourceThumbnailsListWrapper.class),
eq(new String[]{"thumbnails"}), any(DefaultErrorHandler.class));
verify(jerseyRequestMock, never()).setContentType(eq("application/x-www-form-urlencoded"));
verify(jerseyRequestMock, never()).post(argument.capture());
verify(jerseyRequestMock).addParams(argument.capture());
verify(jerseyRequestMock).get();
Assert.assertNotNull(argument.getValue());
Assert.assertTrue(argument.getValue().containsKey("uri"));
Assert.assertSame(argument.getValue().get("uri").get(0), "/public/Samples/Reports/07g.RevenueDetailReport");
}
@AfterMethod
public void after() {
reset(sessionStorageMock, jerseyRequestMock, operationResultMock);
}
}