/*
* Copyright 2017 Red Hat, Inc. and/or its affiliates.
*
* Licensed 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.kie.workbench.common.stunner.client.widgets.palette.categories;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jboss.errai.ioc.client.api.ManagedInstance;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.workbench.common.stunner.client.widgets.palette.categories.group.DefinitionPaletteGroupWidget;
import org.kie.workbench.common.stunner.client.widgets.palette.categories.items.DefinitionPaletteItemWidget;
import org.kie.workbench.common.stunner.client.widgets.palette.factory.icons.IconRenderer;
import org.kie.workbench.common.stunner.core.client.components.palette.model.definition.DefinitionPaletteCategory;
import org.kie.workbench.common.stunner.core.client.components.palette.model.definition.DefinitionPaletteGroup;
import org.kie.workbench.common.stunner.core.client.components.palette.model.definition.DefinitionPaletteItem;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class DefinitionPaletteCategoryWidgetTest extends AbstractPaletteRenderingTest {
public static final String CATEGORY_ID = "category";
public static int MAX_ELEMENTS_SIZE = 4;
@Mock
private DefinitionPaletteCategory item;
@Mock
private DefinitionPaletteCategoryWidgetView view;
@Mock
private ManagedInstance<DefinitionPaletteItemWidget> definitionPaletteItemWidgetInstance;
@Mock
private ManagedInstance<DefinitionPaletteGroupWidget> definitionPaletteGroupWidgetInstance;
private List<DefinitionPaletteGroupWidget> groupWidgets = new ArrayList<>();
private List<DefinitionPaletteItem> groups = new ArrayList<>();
private Map<String, List<DefinitionPaletteItem>> groupItems = new HashMap<>();
private DefinitionPaletteCategoryWidget widget;
@Before
public void init() {
super.init();
when(definitionPaletteGroupWidgetInstance.get()).thenAnswer(invocationOnMock -> {
DefinitionPaletteGroupWidget widget = getDefinitionPaletteGroupWidget();
groupWidgets.add(widget);
return widget;
});
widget = new DefinitionPaletteCategoryWidget(view,
definitionPaletteItemWidgetInstance,
definitionPaletteGroupWidgetInstance);
widget.setUp();
verify(view).init(widget);
groups.clear();
groupItems.clear();
for (int i = 0; i < MAX_ELEMENTS_SIZE; i++) {
String groupId = "group_" + i;
DefinitionPaletteGroup group = mock(DefinitionPaletteGroup.class);
groups.add(group);
when(group.getId()).thenReturn(groupId);
List<DefinitionPaletteItem> items = new ArrayList<>();
groupItems.put(groupId,
items);
for (int j = 0; j < MAX_ELEMENTS_SIZE; j++) {
DefinitionPaletteItem item = mock(DefinitionPaletteItem.class);
String itemId = groupId + "_item_" + j;
when(item.getId()).thenReturn(itemId);
items.add(item);
}
when(group.getItems()).thenReturn(items);
}
widget.getCategory();
widget.getElement();
verify(view).getElement();
when(item.getId()).thenReturn(CATEGORY_ID);
when(item.getItems()).thenReturn(groups);
}
@Test
public void testFunctionallity() {
widget.initialize(
item,
iconRendererProvider,
itemMouseDownCallback
);
verify(iconRendererProvider).getCategoryIconRenderer(item);
verify(iconRenderer).resize(IconRenderer.Size.LARGE);
verify(view).render(iconRenderer);
verify(definitionPaletteGroupWidgetInstance,
times(MAX_ELEMENTS_SIZE)).get();
assertEquals(MAX_ELEMENTS_SIZE,
groupWidgets.size());
for (int i = 0; i < MAX_ELEMENTS_SIZE; i++) {
DefinitionPaletteGroupWidget groupWidget = groupWidgets.get(i);
verify(groupWidget).initialize((DefinitionPaletteGroup) groups.get(i),
iconRendererProvider,
itemMouseDownCallback);
verify(view).addGroup(groupWidget);
}
widget.onMouseDown(0,
0,
0,
0);
verify(itemMouseDownCallback).onItemMouseDown(CATEGORY_ID,
0,
0,
0,
0);
}
@After
public void destroy() {
widget.destroy();
verify(definitionPaletteItemWidgetInstance).destroyAll();
verify(definitionPaletteGroupWidgetInstance).destroyAll();
}
}