package com.jaspersoft.jasperserver.jaxrs.client.apiadapters.thumbnails;
import com.jaspersoft.jasperserver.jaxrs.client.core.JerseyRequest;
import com.jaspersoft.jasperserver.jaxrs.client.core.RequestBuilder;
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.io.InputStream;
import org.mockito.Mock;
import org.mockito.internal.util.reflection.Whitebox;
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 com.jaspersoft.jasperserver.jaxrs.client.core.JerseyRequest.buildRequest;
import static org.junit.Assert.assertNull;
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.MockitoAnnotations.initMocks;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
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.assertSame;
import static org.testng.AssertJUnit.assertNotNull;
/**
* Unit tests for {@link SingleThumbnailAdapter}
*/
@SuppressWarnings("unchecked")
@PrepareForTest({JerseyRequest.class})
public class SingleThumbnailAdapterTest extends PowerMockTestCase {
@Mock
private SessionStorage sessionStorageMock;
@Mock
private JerseyRequest jerseyRequestMock;
@Mock
private RequestBuilder<InputStream> requestBuilderMock;
@Mock
private OperationResult<InputStream> operationResultMock;
@BeforeMethod
public void before() {
initMocks(this);
}
@Test
/**
* for {@link SingleThumbnailAdapter#SingleThumbnailAdapter(SessionStorage)}
*/
public void should_pass_session_storage_to_parent_adapter() {
//When
SingleThumbnailAdapter thumbnailAdapter = new SingleThumbnailAdapter(sessionStorageMock);
SessionStorage retrieved = thumbnailAdapter.getSessionStorage();
//Then
assertSame(retrieved, sessionStorageMock);
}
@Test
/**
* for {@link SingleThumbnailAdapter#report(String)}
*/
public void should_set_report_uri() {
// Given
SingleThumbnailAdapter thumbnailAdapter = new SingleThumbnailAdapter(sessionStorageMock);
// When
SingleThumbnailAdapter retrieved = thumbnailAdapter.report("/public/Samples/Reports/07g.RevenueDetailReport");
// Then
String reportName = (String) Whitebox.getInternalState(retrieved, "reportUri");
assertEquals(reportName, "/public/Samples/Reports/07g.RevenueDetailReport");
}
@Test
/**
* for {@link SingleThumbnailAdapter#report(String)}
*/
public void should_not_set_null_report_uri() {
// Given
SingleThumbnailAdapter thumbnailAdapter = new SingleThumbnailAdapter(sessionStorageMock);
// When
SingleThumbnailAdapter retrieved = thumbnailAdapter.report(null);
// Then
String reportName = (String) Whitebox.getInternalState(retrieved, "reportUri");
assertNull(reportName);
}
@Test(expectedExceptions = MandatoryParameterNotFoundException.class)
/**
* for {@link SingleThumbnailAdapter#report(String)}
*/
public void should_throw_exception_when_report_uri_is_null() {
// Given
SingleThumbnailAdapter thumbnailAdapter = new SingleThumbnailAdapter(sessionStorageMock);
// When
thumbnailAdapter.report(null).get();
// Then
}
@Test(expectedExceptions = MandatoryParameterNotFoundException.class)
/**
* for {@link SingleThumbnailAdapter#report(String)}
*/
public void should_throw_exception_when_report_uri_is_empty() {
// Given
SingleThumbnailAdapter thumbnailAdapter = new SingleThumbnailAdapter(sessionStorageMock);
// When
thumbnailAdapter.report("").get();
// Then
}
@Test
/**
* for {@link SingleThumbnailAdapter#report(String)}
*/
public void should_not_set_empty_report_uri() {
// Given
SingleThumbnailAdapter thumbnailAdapter = new SingleThumbnailAdapter(sessionStorageMock);
// When
SingleThumbnailAdapter retrieved = thumbnailAdapter.report("");
// Then
String reportName = (String) Whitebox.getInternalState(retrieved, "reportUri");
assertNull(reportName);
}
@Test
/**
* for {@link SingleThumbnailAdapter#report(String)}
*/
public void should_set_report_uri_with_default_allowed() {
// Given
SingleThumbnailAdapter thumbnailAdapter = new SingleThumbnailAdapter(sessionStorageMock);
// When
SingleThumbnailAdapter retrieved = thumbnailAdapter.defaultAllowed(true).report("/public/Samples/Reports/07g.RevenueDetailReport");
// Then
Boolean param = (Boolean) Whitebox.getInternalState(retrieved, "defaultAllowed");
assertSame(retrieved, thumbnailAdapter);
assertEquals(param, Boolean.TRUE);
}
@Test
/**
* for {@link SingleThumbnailAdapter#defaultAllowed(Boolean)}
*/
public void should_set_thumbnails_parameter() {
// Given
SingleThumbnailAdapter thumbnailAdapter = new SingleThumbnailAdapter(sessionStorageMock);
// When
SingleThumbnailAdapter retrieved = thumbnailAdapter.defaultAllowed(true);
// Then
Boolean param = (Boolean) Whitebox.getInternalState(retrieved, "defaultAllowed");
assertSame(retrieved, thumbnailAdapter);
assertEquals(param, Boolean.TRUE);
}
@Test
/**
* for {@link SingleThumbnailAdapter#get()}
*/
public void should_return_proper_operation_result() {
// Given
mockStatic(JerseyRequest.class);
when(buildRequest(
eq(sessionStorageMock),
eq(InputStream.class),
eq(new String[]{"thumbnails", "", "public", "Samples", "Reports", "07g.RevenueDetailReport"}),
any(DefaultErrorHandler.class))).thenReturn(jerseyRequestMock);
when(jerseyRequestMock.setAccept("image/jpeg")).thenReturn(jerseyRequestMock);
when(jerseyRequestMock.get()).thenReturn(operationResultMock);
SingleThumbnailAdapter thumbnailAdapter = new SingleThumbnailAdapter(sessionStorageMock);
thumbnailAdapter.report("/public/Samples/Reports/07g.RevenueDetailReport");
// When
OperationResult<InputStream> retrieved = thumbnailAdapter.get();
// Then
assertNotNull(retrieved);
assertSame(retrieved, operationResultMock);
verify(jerseyRequestMock).setAccept(eq("image/jpeg"));
verify(jerseyRequestMock).get();
verifyStatic(times(1));
buildRequest(
eq(sessionStorageMock),
eq(InputStream.class),
eq(new String[]{"thumbnails", "", "public", "Samples", "Reports", "07g.RevenueDetailReport"}),
any(DefaultErrorHandler.class));
}
@Test(expectedExceptions = MandatoryParameterNotFoundException.class)
/**
* for {@link SingleThumbnailAdapter#get()}
*/
public void should_throw_exception() {
// Given
SingleThumbnailAdapter thumbnailAdapter = new SingleThumbnailAdapter(sessionStorageMock);
thumbnailAdapter.report(null);
// When
OperationResult<InputStream> retrieved = thumbnailAdapter.get();
// Then
//An exception should be thrown
}
@AfterMethod
public void after() {
reset(sessionStorageMock, jerseyRequestMock, requestBuilderMock, operationResultMock);
}
}