package com.jaspersoft.jasperserver.jaxrs.client.apiadapters.authority.users;
import com.jaspersoft.jasperserver.dto.authority.UsersListWrapper;
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.exceptions.handling.DefaultErrorHandler;
import com.jaspersoft.jasperserver.jaxrs.client.core.operationresult.OperationResult;
import java.util.concurrent.atomic.AtomicInteger;
import javax.ws.rs.core.MultivaluedHashMap;
import javax.ws.rs.core.MultivaluedMap;
import org.mockito.Mock;
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.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
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.reflect.internal.WhiteboxImpl.getInternalState;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNotSame;
import static org.testng.AssertJUnit.assertSame;
import static org.testng.AssertJUnit.assertTrue;
/**
* Unit tests for {@link com.jaspersoft.jasperserver.jaxrs.client.apiadapters.authority.organizations.BatchOrganizationsAdapter}
*/
@SuppressWarnings("unchecked")
@PrepareForTest({BatchUsersRequestAdapter.class, JerseyRequest.class})
public class BatchUsersRequestAdapterTest extends PowerMockTestCase {
@Mock
private SessionStorage sessionStorageMock;
@Mock
private JerseyRequest<UsersListWrapper> requestMock;
@Mock
private OperationResult<UsersListWrapper> operationResultMock;
@BeforeMethod
public void before() {
initMocks(this);
}
@Test
public void should_pass_proper_session_storage_to_parent_class_and_set_own_fields() {
// When
BatchUsersRequestAdapter adapter = spy(new BatchUsersRequestAdapter(sessionStorageMock, null));
// Then
Assert.assertNotNull(adapter);
assertEquals(sessionStorageMock, getInternalState(adapter, "sessionStorage"));
}
@Test
/**
* for {@link com.jaspersoft.jasperserver.jaxrs.client.apiadapters.authority.organizations.BatchOrganizationsAdapter#asyncGet(com.jaspersoft.jasperserver.jaxrs.client.core.Callback)}
*/
public void should_run_get_method_asynchronously() throws Exception {
// Given
mockStatic(JerseyRequest.class);
when(buildRequest(eq(sessionStorageMock), eq(UsersListWrapper.class), eq(new String[]{"users"}), any(DefaultErrorHandler.class))).thenReturn(requestMock);
doReturn(operationResultMock).when(requestMock).get();
BatchUsersRequestAdapter adapterSpy = spy(new BatchUsersRequestAdapter(sessionStorageMock, null));
final AtomicInteger newThreadId = new AtomicInteger();
final int currentThreadId = (int) Thread.currentThread().getId();
final Callback<OperationResult<UsersListWrapper>, Void> callback = spy(new Callback<OperationResult<UsersListWrapper>, Void>() {
@Override
public Void execute(OperationResult<UsersListWrapper> data) {
newThreadId.set((int) Thread.currentThread().getId());
synchronized (this) {
this.notifyAll();
}
return null;
}
});
doReturn(null).when(callback).execute(operationResultMock);
// When
RequestExecution retrieved = adapterSpy.asyncGet(callback);
synchronized (callback) {
callback.wait(1000);
}
// Then
verify(requestMock).get();
verify(callback).execute(operationResultMock);
assertNotNull(retrieved);
assertNotSame(currentThreadId, newThreadId.get());
}
@Test
public void should_get_resource() {
// Given
MultivaluedMap<String, String> params = new MultivaluedHashMap<String, String>();
mockStatic(JerseyRequest.class);
when(buildRequest(eq(sessionStorageMock), eq(UsersListWrapper.class), eq(new String[]{"users"}), any(DefaultErrorHandler.class))).thenReturn(requestMock);
doReturn(operationResultMock).when(requestMock).get();
doReturn(requestMock).when(requestMock).addParams(params);
BatchUsersRequestAdapter adapterSpy = spy(new BatchUsersRequestAdapter(sessionStorageMock, null));
//When
OperationResult<UsersListWrapper> retrievedResult = adapterSpy.get();
// Then
assertSame(retrievedResult, operationResultMock);
verify(requestMock, times(1)).get();
verify(requestMock, times(1)).addParams(params);
}
@Test
public void should_refuse_wrong_organization_and_get_resource() {
// Given
MultivaluedMap<String, String> params = new MultivaluedHashMap<String, String>();
mockStatic(JerseyRequest.class);
when(buildRequest(eq(sessionStorageMock), eq(UsersListWrapper.class), eq(new String[]{"users"}), any(DefaultErrorHandler.class))).thenReturn(requestMock);
doReturn(operationResultMock).when(requestMock).get();
doReturn(requestMock).when(requestMock).addParams(params);
BatchUsersRequestAdapter adapterSpy = spy(new BatchUsersRequestAdapter(sessionStorageMock, ""));
//When
OperationResult<UsersListWrapper> retrievedResult = adapterSpy.get();
// Then
assertSame(retrievedResult, operationResultMock);
verify(requestMock, times(1)).get();
verify(requestMock, times(1)).addParams(params);
}
@Test
public void should_get_resource_with_params() {
// Given
BatchUsersRequestAdapter adapterSpy = spy(new BatchUsersRequestAdapter(sessionStorageMock, null));
mockStatic(JerseyRequest.class);
when(buildRequest(eq(sessionStorageMock), eq(UsersListWrapper.class), eq(new String[]{"users"}), any(DefaultErrorHandler.class))).thenReturn(requestMock);
doReturn(requestMock).when(requestMock).addParams(any(MultivaluedHashMap.class));
doReturn(operationResultMock).when(requestMock).get();
// When
OperationResult<UsersListWrapper> retrievedResult = adapterSpy.param(UsersParameter.INCLUDE_SUB_ORGS, "true").get();
// Then
assertSame(retrievedResult, operationResultMock);
verify(requestMock, times(1)).get();
assertTrue(((MultivaluedHashMap<String, String>)getInternalState(adapterSpy, "params")).size()== 1);
verify(requestMock, times(1)).addParams(any(MultivaluedHashMap.class));
}
@Test
public void should_get_resource_with_params_for_user_in_organization() {
// Given
BatchUsersRequestAdapter adapterSpy = spy(new BatchUsersRequestAdapter(sessionStorageMock, "myOrg"));
mockStatic(JerseyRequest.class);
when(buildRequest(eq(sessionStorageMock), eq(UsersListWrapper.class),
eq(new String[]{"organizations", "myOrg", "users"}),
any(DefaultErrorHandler.class))).thenReturn(requestMock);
doReturn(requestMock).when(requestMock).addParams(any(MultivaluedHashMap.class));
doReturn(operationResultMock).when(requestMock).get();
// When
OperationResult<UsersListWrapper> retrievedResult = adapterSpy.param(UsersParameter.INCLUDE_SUB_ORGS, "true").get();
// Then
assertSame(retrievedResult, operationResultMock);
verify(requestMock, times(1)).get();
assertTrue(((MultivaluedHashMap<String, String>)getInternalState(adapterSpy, "params")).size()== 1);
verify(requestMock, times(1)).addParams(any(MultivaluedHashMap.class));
}
@AfterMethod
public void after() {
sessionStorageMock = null;
requestMock = null;
operationResultMock = null;
}
}