package com.jaspersoft.jasperserver.jaxrs.client.apiadapters.bundles; import com.jaspersoft.jasperserver.jaxrs.client.apiadapters.serverInfo.ServerInfoService; import com.jaspersoft.jasperserver.jaxrs.client.core.JerseyRequest; 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.Locale; import java.util.Map; import javax.ws.rs.core.GenericType; import javax.ws.rs.core.MediaType; import org.codehaus.jettison.json.JSONObject; 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 org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Matchers.isA; import static org.mockito.Mockito.doReturn; 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.Mockito.when; 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.testng.Assert.assertEquals; import static org.testng.Assert.assertSame; /** * @author Tetiana Iefimenko */ @PrepareForTest({JerseyRequest.class, ServerInfoService.class}) public class BundlesServiceTest extends PowerMockTestCase { @Mock private SessionStorage sessionStorageMock; @Mock private JerseyRequest<JSONObject> requestMock; @Mock private OperationResult<JSONObject> operationResultMock; @BeforeMethod public void before() { initMocks(this); } @Test public void should_return_proper_bundles_for_default_locale() throws Exception { //given String defaultLocale = Locale.getDefault().toString(); mockStatic(JerseyRequest.class); when(JerseyRequest.buildRequest(eq(sessionStorageMock), any(GenericType.class), isA(String[].class), any(DefaultErrorHandler.class))).thenReturn(requestMock); doReturn(Locale.getDefault()).when(sessionStorageMock).getUserLocale(); doReturn(requestMock).when(requestMock).addParam(anyString(), anyString()); doReturn(requestMock).when(requestMock).addHeader(anyString(), anyString()); doReturn(requestMock).when(requestMock).setAccept(anyString()); doReturn(operationResultMock).when(requestMock).get(); //when BundlesService service = new BundlesService(sessionStorageMock); OperationResult<Map<String, Map<String, String>>> bundles = service.allBundles(); //then assertSame(bundles, operationResultMock); verify(requestMock).setAccept(MediaType.APPLICATION_JSON); verify(requestMock).addParam("expanded", "true"); verify(requestMock).addHeader("Accept-Language", defaultLocale.replace('_', '-')); verify(requestMock).get(); verifyStatic(times(1)); JerseyRequest.buildRequest(eq(sessionStorageMock), eq(new GenericType<Map<String, Map<String, String>>>() { }), eq(new String[]{"bundles"}), any(DefaultErrorHandler.class)); Locale locale = (Locale) Whitebox.getInternalState(service, "locale"); assertEquals(locale.toString(), defaultLocale); } @Test public void should_return_proper_bundles_for_string_locale() throws Exception { //given BundlesService service = new BundlesService(sessionStorageMock); mockStatic(JerseyRequest.class); when(JerseyRequest.buildRequest(eq(sessionStorageMock), any(GenericType.class), isA(String[].class), any(DefaultErrorHandler.class))).thenReturn(requestMock); doReturn(requestMock).when(requestMock).addParam(anyString(), anyString()); doReturn(requestMock).when(requestMock).addHeader(anyString(), anyString()); doReturn(requestMock).when(requestMock).setAccept(anyString()); doReturn(operationResultMock).when(requestMock).get(); //when OperationResult<Map<String, Map<String, String>>> bundles = service.forLocale("de").allBundles(); //then assertSame(bundles, operationResultMock); verify(requestMock).setAccept(MediaType.APPLICATION_JSON); verify(requestMock).addParam("expanded", "true"); verify(requestMock).addHeader("Accept-Language", "de"); verify(requestMock).get(); verifyStatic(times(1)); JerseyRequest.buildRequest(eq(sessionStorageMock), eq(new GenericType<Map<String, Map<String, String>>>() { }), eq(new String[]{"bundles"}), any(DefaultErrorHandler.class)); Locale locale = (Locale) Whitebox.getInternalState(service, "locale"); assertEquals(locale.toString(), "de"); } @Test public void should_return_proper_bundles_for_locale() throws Exception { //given BundlesService service = new BundlesService(sessionStorageMock); mockStatic(JerseyRequest.class); when(JerseyRequest.buildRequest(eq(sessionStorageMock),any(GenericType.class), isA(String[].class), any(DefaultErrorHandler.class))).thenReturn(requestMock); doReturn(requestMock).when(requestMock).addParam(anyString(), anyString()); doReturn(requestMock).when(requestMock).addHeader(anyString(), anyString()); doReturn(requestMock).when(requestMock).setAccept(anyString()); doReturn(operationResultMock).when(requestMock).get(); //when OperationResult<Map<String, Map<String, String>>> bundles = service.forLocale(Locale.GERMAN).allBundles(); //then assertSame(bundles, operationResultMock); verify(requestMock).setAccept(MediaType.APPLICATION_JSON); verify(requestMock).addParam("expanded", "true"); verify(requestMock).addHeader("Accept-Language", "de"); verify(requestMock).get(); verifyStatic(times(1)); JerseyRequest.buildRequest(eq(sessionStorageMock), eq(new GenericType<Map<String, Map<String, String>>>() { }), eq(new String[]{"bundles"}), any(DefaultErrorHandler.class)); Locale locale = (Locale) Whitebox.getInternalState(service, "locale"); assertEquals(locale.toString(), "de"); } @Test public void should_return_proper_bundles_by_name_for_string_locale() throws Exception { //given BundlesService service = new BundlesService(sessionStorageMock); mockStatic(JerseyRequest.class); when(JerseyRequest.buildRequest(eq(sessionStorageMock), any(GenericType.class), isA(String[].class), any(DefaultErrorHandler.class))).thenReturn(requestMock); doReturn(requestMock).when(requestMock).addHeader(anyString(), anyString()); doReturn(requestMock).when(requestMock).setAccept(anyString()); doReturn(operationResultMock).when(requestMock).get(); //when OperationResult<Map<String, String>> bundle = service.forLocale("de").bundle("jasperserver_messages"); //then assertSame(bundle, operationResultMock); verify(requestMock).setAccept(MediaType.APPLICATION_JSON); verify(requestMock,never()).addParam("expanded", "true"); verify(requestMock).addHeader("Accept-Language", "de"); verify(requestMock).get(); verifyStatic(times(1)); JerseyRequest.buildRequest(eq(sessionStorageMock), eq(new GenericType<Map<String, String>>() { }), eq(new String[]{"bundles", "jasperserver_messages"}), any(DefaultErrorHandler.class)); } @Test public void should_return_proper_bundles_by_name_for_locale() throws Exception { //given BundlesService service = new BundlesService(sessionStorageMock); mockStatic(JerseyRequest.class); when(JerseyRequest.buildRequest(eq(sessionStorageMock), any(GenericType.class), isA(String[].class), any(DefaultErrorHandler.class))).thenReturn(requestMock); doReturn(requestMock).when(requestMock).addHeader(anyString(), anyString()); doReturn(requestMock).when(requestMock).setAccept(anyString()); doReturn(operationResultMock).when(requestMock).get(); //when OperationResult<Map<String, String>> bundle = service.forLocale(Locale.US).bundle("jasperserver_messages"); //then assertSame(bundle, operationResultMock); verify(requestMock).setAccept(MediaType.APPLICATION_JSON); verify(requestMock,never()).addParam("expanded", "true"); verify(requestMock).addHeader("Accept-Language", "en-US"); verify(requestMock).get(); verifyStatic(times(1)); JerseyRequest.buildRequest(eq(sessionStorageMock), eq(new GenericType<Map<String, String>>() { }), eq(new String[]{"bundles", "jasperserver_messages"}), any(DefaultErrorHandler.class)); } @Test public void should_return_proper_bundles_by_name_for_default_locale() throws Exception { //given doReturn(Locale.getDefault()).when(sessionStorageMock).getUserLocale(); mockStatic(JerseyRequest.class); when(JerseyRequest.buildRequest(eq(sessionStorageMock), any(GenericType.class), isA(String[].class), any(DefaultErrorHandler.class))).thenReturn(requestMock); doReturn(requestMock).when(requestMock).addHeader(anyString(), anyString()); doReturn(requestMock).when(requestMock).setAccept(anyString()); doReturn(operationResultMock).when(requestMock).get(); //when BundlesService service = new BundlesService(sessionStorageMock); OperationResult<Map<String, String>> bundle = service.bundle("jasperserver_messages"); //then assertSame(bundle, operationResultMock); verify(requestMock).setAccept(MediaType.APPLICATION_JSON); verify(requestMock,never()).addParam("expanded", "true"); verify(requestMock).addHeader("Accept-Language", Locale.getDefault().toString().replace('_', '-')); verify(requestMock).get(); verifyStatic(times(1)); JerseyRequest.buildRequest(eq(sessionStorageMock), eq(new GenericType<Map<String, String>>() { }), eq(new String[]{"bundles", "jasperserver_messages"}), any(DefaultErrorHandler.class)); } @Test public void should_not_invoke_adding_language_by_empty_locale() throws Exception { //given BundlesService service = new BundlesService(sessionStorageMock); mockStatic(JerseyRequest.class); when(JerseyRequest.buildRequest(eq(sessionStorageMock), any(GenericType.class), isA(String[].class), any(DefaultErrorHandler.class))).thenReturn(requestMock); doReturn(requestMock).when(requestMock).addHeader(anyString(), anyString()); doReturn(requestMock).when(requestMock).setAccept(anyString()); doReturn(operationResultMock).when(requestMock).get(); //when OperationResult<Map<String, String>> bundle = service.forLocale(new Locale("")).bundle("jasperserver_messages"); //then assertSame(bundle, operationResultMock); verify(requestMock).setAccept(MediaType.APPLICATION_JSON); verify(requestMock,never()).addParam("expanded", "true"); verify(requestMock, never()).addHeader("Accept-Language", Locale.getDefault().toString().replace('_', '-')); verify(requestMock).get(); verifyStatic(times(1)); JerseyRequest.buildRequest(eq(sessionStorageMock), eq(new GenericType<Map<String, String>>() { }), eq(new String[]{"bundles", "jasperserver_messages"}), any(DefaultErrorHandler.class)); } @Test public void should_set_default_locale_if_string_locale_is_null() throws Exception { //given doReturn(Locale.getDefault()).when(sessionStorageMock).getUserLocale(); BundlesService service = new BundlesService(sessionStorageMock); Locale defaultLocale = Locale.getDefault(); //when service.forLocale((String) null); //then assertEquals(Whitebox.getInternalState(service, "locale"), defaultLocale); } @Test public void should_set_default_locale_if_instance_locale_is_null() throws Exception { //given doReturn(Locale.getDefault()).when(sessionStorageMock).getUserLocale(); BundlesService service = new BundlesService(sessionStorageMock); Locale defaultLocale = Locale.getDefault(); //when service.forLocale((Locale)null); //then assertEquals(Whitebox.getInternalState(service, "locale"), defaultLocale); } @Test public void should_locale_if_authentication_locale_is_different() throws Exception { //given doReturn(Locale.getDefault()).when(sessionStorageMock).getUserLocale(); BundlesService service = new BundlesService(sessionStorageMock); Locale locale = new Locale("de"); //when service.forLocale(locale); //then assertEquals(Whitebox.getInternalState(service, "locale"), locale); } @AfterMethod public void afetr() { reset(sessionStorageMock, requestMock, operationResultMock); } }