blob: 2d7dbe50f987afd7ce1204d77268194a3f6365bb [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.dashbuilder.displayer.client;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import com.google.gwtmockito.GwtMockitoTestRunner;
import org.dashbuilder.displayer.DisplayerSettings;
import org.dashbuilder.displayer.DisplayerSubType;
import org.dashbuilder.displayer.DisplayerType;
import org.dashbuilder.displayer.client.resources.i18n.CommonConstants;
import org.jboss.errai.ioc.client.container.SyncBeanDef;
import org.jboss.errai.ioc.client.container.SyncBeanManager;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.stubbing.Answer;
import static org.dashbuilder.displayer.DisplayerSubType.AREA;
import static org.dashbuilder.displayer.DisplayerSubType.BAR;
import static org.dashbuilder.displayer.DisplayerSubType.BAR_STACKED;
import static org.dashbuilder.displayer.DisplayerSubType.LINE;
import static org.dashbuilder.displayer.DisplayerSubType.MAP_MARKERS;
import static org.dashbuilder.displayer.DisplayerSubType.MAP_REGIONS;
import static org.dashbuilder.displayer.DisplayerSubType.SMOOTH;
import static org.dashbuilder.displayer.DisplayerType.AREACHART;
import static org.dashbuilder.displayer.DisplayerType.BARCHART;
import static org.dashbuilder.displayer.DisplayerType.LINECHART;
import static org.dashbuilder.displayer.DisplayerType.MAP;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.RETURNS_DEFAULTS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@RunWith(GwtMockitoTestRunner.class)
public class RendererManagerTest {
private static final String REND2_NAME = "renderer 2";
private static final String REND1_NAME = "renderer 1";
private static final String REND2_UUID = "rend2";
private static final String REND1_UUID = "rend1";
private static final String DEFAULT_REND_FOR_BARCHART_UUID = REND1_UUID;
@Mock
SyncBeanManager beanManager;
@Mock
DisplayerSettings displayerSettings;
RendererManager rendererManager;
int totalBeans;
@Before
public void setUp() {
rendererManager = new RendererManager(beanManager);
mockConstants();
Map<DisplayerType, List<DisplayerSubType>> typesAndSubTypes1 = new HashMap<>();
typesAndSubTypes1.put(BARCHART, Arrays.asList(BAR));
typesAndSubTypes1.put(AREACHART, Arrays.asList(AREA));
typesAndSubTypes1.put(LINECHART, Arrays.asList(LINE));
Map<DisplayerType, List<DisplayerSubType>> typesAndSubTypes2 = new HashMap<>();
typesAndSubTypes2.put(LINECHART, Arrays.asList(LINE, SMOOTH));
typesAndSubTypes2.put(BARCHART, Arrays.asList(BAR, BAR_STACKED));
List<SyncBeanDef<RendererLibrary>> rendererLibrariesBeans = Arrays.asList(
mockSyncBeanForRendererLib(REND1_NAME, REND1_UUID, Arrays.asList(BARCHART, AREACHART), typesAndSubTypes1, true),
mockSyncBeanForRendererLib(REND2_NAME, REND2_UUID, Collections.emptyList(), typesAndSubTypes2, false)
);
totalBeans = rendererLibrariesBeans.size();
when(beanManager.lookupBeans(RendererLibrary.class))
.thenReturn(rendererLibrariesBeans);
rendererManager.init();
}
@Test
public void renderersForType2Test() {
List<RendererLibrary> renderersForType = rendererManager.getRenderersForType(null, null);
assertEquals(totalBeans, renderersForType.size());
renderersForType = rendererManager.getRenderersForType(BARCHART, null);
assertEquals(2, renderersForType.size());
renderersForType = rendererManager.getRenderersForType(AREACHART, AREA);
assertEquals(1, renderersForType.size());
renderersForType = rendererManager.getRenderersForType(BARCHART, BAR);
assertEquals(2, renderersForType.size());
renderersForType = rendererManager.getRenderersForType(MAP, null);
assertEquals(0, renderersForType.size());
renderersForType = rendererManager.getRenderersForType(MAP, MAP_REGIONS);
assertEquals(0, renderersForType.size());
}
@Test
public void renderersForType2SubTypesTest() {
List<RendererLibrary> renderersForSubType = rendererManager.getRenderersForType(null, AREA);
assertEquals(1, renderersForSubType.size());
renderersForSubType = rendererManager.getRenderersForType(null, LINE);
assertEquals(2, renderersForSubType.size());
renderersForSubType = rendererManager.getRenderersForType(null, MAP_REGIONS);
assertEquals(0, renderersForSubType.size());
}
@Test
public void rendererForTypeTest() {
List<RendererLibrary> renderers = rendererManager.getRenderers();
assertEquals(totalBeans, renderers.size());
assertEquals(2, rendererManager.getRenderersForType(BARCHART).size());
assertEquals(1, rendererManager.getRenderersForType(AREACHART).size());
}
@Test
public void rendererForSubTypeTest() {
assertEquals(2, rendererManager.getRenderersForType(BARCHART).size());
assertEquals(1, rendererManager.getRenderersForType(AREACHART).size());
}
@Test
public void rendererByNameTest() {
assertNotNull(rendererManager.getRendererByName(REND1_NAME));
}
@Test(expected=RuntimeException.class)
public void rendererByNameNotFoundTest() {
assertNotNull(rendererManager.getRendererByName("NO NAME"));
}
@Test
public void rendererByUUIDTest() {
assertNotNull(rendererManager.getRendererByUUID(REND1_UUID));
}
@Test(expected=RuntimeException.class)
public void rendererByUUIDNotFoundTest() {
assertNotNull(rendererManager.getRendererByUUID("NO UUID"));
}
@Test
public void typeSupportedTest() {
assertTrue(rendererManager.isTypeSupported(BARCHART));
assertTrue(!rendererManager.isTypeSupported(MAP));
}
@Test
public void rendererByDisplayerTest() {
DisplayerSettings settings = mock(DisplayerSettings.class);
when(settings.getRenderer()).thenReturn(REND1_UUID);
when(settings.getType()).thenReturn(BARCHART);
when(settings.getSubtype()).thenReturn(BAR);
RendererLibrary lib = rendererManager.getRendererForDisplayer(settings);
assertNotNull(lib);
assertEquals(REND1_UUID, lib.getUUID());
}
@Test
public void rendererByDisplayerWithoutUUIDTest() {
DisplayerSettings settings = mock(DisplayerSettings.class);
when(settings.getType()).thenReturn(BARCHART);
when(settings.getSubtype()).thenReturn(BAR);
RendererLibrary lib = rendererManager.getRendererForDisplayer(settings);
assertNotNull(lib);
assertEquals(DEFAULT_REND_FOR_BARCHART_UUID, lib.getUUID());
}
@Test(expected=RuntimeException.class)
public void rendererByDisplayerTypeNotSupportedTest() {
DisplayerSettings settings = mock(DisplayerSettings.class);
when(settings.getType()).thenReturn(MAP);
when(settings.getSubtype()).thenReturn(MAP_MARKERS);
rendererManager.getRendererForDisplayer(settings);
}
@Test
public void defaultRendererTest() {
assertNotNull(rendererManager.getDefaultRenderer(BARCHART));
assertNull(rendererManager.getDefaultRenderer(LINECHART));
}
@Test
public void defaultRendererWithUserBadSettingTest() {
rendererManager.init();
defaultRendererTest();
}
private SyncBeanDef<RendererLibrary> mockSyncBeanForRendererLib(String name,
String uuid,
List<DisplayerType> defaultTypes,
Map<DisplayerType, List<DisplayerSubType>> typesAndSubTypes,
boolean offline) {
SyncBeanDef<RendererLibrary> libBean = mock(SyncBeanDef.class);
RendererLibrary lib = mock(RendererLibrary.class);
when(lib.getName()).thenReturn(name);
when(lib.getUUID()).thenReturn(uuid);
when(lib.isOffline()).thenReturn(offline);
List<DisplayerType> supportedTypesList = typesAndSubTypes.keySet().stream().collect(Collectors.toList());
when(lib.getSupportedTypes()).thenReturn(supportedTypesList);
typesAndSubTypes.forEach((type, subTypes) -> when(lib.getSupportedSubtypes(type)).thenReturn(subTypes));
defaultTypes.forEach(type -> when(lib.isDefault(type)).thenReturn(true));
when(libBean.getInstance()).thenReturn(lib);
return libBean;
}
private void mockConstants() {
rendererManager.i18n = mock(CommonConstants.class,
(Answer) invocation -> {
return RETURNS_DEFAULTS.answer(invocation);
});
}
}