/*
* 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.drools.workbench.screens.guided.dtable.client.widget.table;
import java.util.ArrayList;
import java.util.List;
import com.google.gwt.dev.util.collect.HashMap;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwtmockito.GwtMockitoTestRunner;
import com.google.gwtmockito.WithClassesToStub;
import org.drools.workbench.models.guided.dtable.shared.model.AttributeCol52;
import org.drools.workbench.models.guided.dtable.shared.model.DTCellValue52;
import org.drools.workbench.screens.guided.dtable.client.resources.GuidedDecisionTableResources;
import org.drools.workbench.screens.guided.dtable.client.widget.table.accordion.GuidedDecisionTableAccordion;
import org.drools.workbench.screens.guided.dtable.client.widget.table.accordion.GuidedDecisionTableAccordionItem;
import org.drools.workbench.screens.guided.dtable.client.widget.table.columns.control.AttributeColumnConfigRowView;
import org.gwtbootstrap3.client.ui.Button;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.workbench.common.services.shared.preferences.ApplicationPreferences;
import org.kie.workbench.common.widgets.client.ruleselector.RuleSelector;
import org.mockito.Mock;
import org.uberfire.ext.wires.core.grids.client.widget.grid.GridWidget;
import org.uberfire.ext.wires.core.grids.client.widget.layer.impl.DefaultGridLayer;
import org.uberfire.ext.wires.core.grids.client.widget.layer.impl.GridLienzoPanel;
import org.uberfire.ext.wires.core.grids.client.widget.layer.pinning.impl.RestrictedMousePanMediator;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith(GwtMockitoTestRunner.class)
@WithClassesToStub({GridLienzoPanel.class, DefaultGridLayer.class, GridWidget.class, RestrictedMousePanMediator.class})
public class GuidedDecisionTableModellerViewImplTest {
@Mock
FlowPanel flowPanel;
@Mock
GridLienzoPanel gridPanel;
@Mock
DefaultGridLayer gridLayer;
@Mock
DefaultGridLayer defaultGridLayer;
@Mock
RestrictedMousePanMediator restrictedMousePanMediator;
@Mock
VerticalPanel attributeConfigWidget;
@Mock
GuidedDecisionTableAccordion accordion;
@Mock
GuidedDecisionTableModellerView.Presenter presenter;
@Mock
GuidedDecisionTableView.Presenter viewPresenter;
GuidedDecisionTableModellerViewImpl view;
@Before
public void setup() {
view = spy(new GuidedDecisionTableModellerViewImplFake());
ApplicationPreferences.setUp(new HashMap<String, String>() {{
put(ApplicationPreferences.DATE_FORMAT,
"dd/mm/yy");
}});
}
@Test
public void testInit() throws Exception {
doNothing().when(view).setupAccordion(presenter);
view.init(presenter);
verify(view).setupAccordion(presenter);
}
@Test
public void testSetupAccordion() throws Exception {
final FlowPanel accordionContainer = mock(FlowPanel.class);
final Widget accordionWidget = mock(Widget.class);
final Widget ruleInheritanceWidget = mock(Widget.class);
doReturn(accordion).when(view).makeAccordion(presenter);
doReturn(accordionContainer).when(view).getAccordionContainer();
doReturn(accordionWidget).when(view).asWidget(accordion);
doReturn(ruleInheritanceWidget).when(view).ruleInheritanceWidget();
view.setupAccordion(presenter);
verify(accordionContainer).add(accordionWidget);
verify(accordionContainer).add(ruleInheritanceWidget);
}
@Test
public void testMakeAccordion() {
doReturn(accordion).when(view).getGuidedDecisionTableAccordion();
final GuidedDecisionTableAccordion actualAccordion = view.makeAccordion(presenter);
verify(accordion).addItem(GuidedDecisionTableAccordionItem.Type.ATTRIBUTE,
view.getAttributeConfigWidget());
verify(accordion).addItem(GuidedDecisionTableAccordionItem.Type.METADATA,
view.getMetaDataConfigWidget());
verify(accordion).addItem(GuidedDecisionTableAccordionItem.Type.CONDITION,
view.getConditionsConfigWidget());
verify(accordion).addItem(GuidedDecisionTableAccordionItem.Type.ACTION,
view.getActionsConfigWidget());
assertEquals(accordion,
actualAccordion);
}
@Test
public void testRuleInheritanceWidget() throws Exception {
final Label label = mock(Label.class);
final Widget widget = mock(Widget.class);
doReturn(flowPanel).when(view).makeFlowPanel();
doReturn(label).when(view).ruleInheritanceLabel();
doReturn(widget).when(view).ruleSelector();
final Widget ruleInheritanceWidget = view.ruleInheritanceWidget();
verify(flowPanel).setStyleName(GuidedDecisionTableResources.INSTANCE.css().ruleInheritance());
verify(flowPanel).add(label);
verify(flowPanel).add(widget);
assertEquals(flowPanel,
ruleInheritanceWidget);
}
@Test
public void testRuleSelector() throws Exception {
final RuleSelector ruleSelector = mock(RuleSelector.class);
doReturn(ruleSelector).when(view).getRuleSelector();
final Widget actualRuleSelector = view.ruleSelector();
verify(ruleSelector).setEnabled(false);
verify(ruleSelector).addValueChangeHandler(any());
verify(ruleSelector).setStyleName(GuidedDecisionTableResources.INSTANCE.css().ruleInheritanceDropdown());
assertEquals(ruleSelector,
actualRuleSelector);
}
@Test
public void testRuleInheritanceLabel() throws Exception {
final Label label = view.ruleInheritanceLabel();
assertNotNull(label);
}
@Test
public void testSetupSubMenu() throws Exception {
final Button addColumn = mock(Button.class);
final Button editColumns = mock(Button.class);
doReturn(addColumn).when(view).getAddColumn();
doReturn(editColumns).when(view).getEditColumns();
view.setupSubMenu();
verify(addColumn).addClickHandler(any());
verify(editColumns).addClickHandler(any());
}
@Test
public void testAddColumn() throws Exception {
doReturn(presenter).when(view).getPresenter();
view.addColumn();
verify(presenter).openNewGuidedDecisionTableColumnWizard();
}
@Test
public void testEditColumns() throws Exception {
final FlowPanel accordionContainer = mock(FlowPanel.class);
final Button editColumns = mock(Button.class);
doReturn(presenter).when(view).getPresenter();
doReturn(accordionContainer).when(view).getAccordionContainer();
doReturn(editColumns).when(view).getEditColumns();
doNothing().when(view).toggleClassName(any(),
any());
view.editColumns();
verify(view).toggleClassName(accordionContainer,
GuidedDecisionTableResources.INSTANCE.css().openedAccordion());
verify(view).toggleClassName(editColumns,
"active");
}
@Test
public void testRefreshAttributeWidgetEmpty() throws Exception {
final GuidedDecisionTableAccordionItem item = mock(GuidedDecisionTableAccordionItem.class);
final Label blankSlate = mock(Label.class);
final List<AttributeCol52> columns = new ArrayList<>();
doReturn(accordion).when(view).getAccordion();
doReturn(attributeConfigWidget).when(view).getAttributeConfigWidget();
doReturn(blankSlate).when(view).blankSlate();
doReturn(item).when(accordion).getItem(GuidedDecisionTableAccordionItem.Type.ATTRIBUTE);
view.refreshAttributeWidget(columns);
verify(attributeConfigWidget).clear();
verify(attributeConfigWidget).add(blankSlate);
verify(item).setOpen(false);
}
@Test
public void testRefreshAttributeWidget() throws Exception {
final GuidedDecisionTableAccordionItem item = mock(GuidedDecisionTableAccordionItem.class);
final Label blankSlate = mock(Label.class);
final List<AttributeCol52> columns = new ArrayList<AttributeCol52>() {{
add(attributeColumn());
}};
doReturn(presenter).when(view).getPresenter();
doReturn(accordion).when(view).getAccordion();
doReturn(attributeConfigWidget).when(view).getAttributeConfigWidget();
doReturn(blankSlate).when(view).blankSlate();
doReturn(item).when(accordion).getItem(GuidedDecisionTableAccordionItem.Type.ATTRIBUTE);
view.refreshAttributeWidget(columns);
verify(attributeConfigWidget).clear();
verify(attributeConfigWidget,
never()).add(blankSlate);
verify(item,
never()).setOpen(anyBoolean());
verify(attributeConfigWidget).add(any(AttributeColumnConfigRowView.class));
}
private AttributeCol52 attributeColumn() {
final AttributeCol52 attributeCol52 = mock(AttributeCol52.class);
final DTCellValue52 defaultValue = mock(DTCellValue52.class);
doReturn("salience").when(attributeCol52).getAttribute();
doReturn(defaultValue).when(attributeCol52).getDefaultValue();
return attributeCol52;
}
class GuidedDecisionTableModellerViewImplFake extends GuidedDecisionTableModellerViewImpl {
public GuidedDecisionTableModellerViewImplFake() {
/* do nothing */
}
DefaultGridLayer defaultGridLayer() {
return defaultGridLayer;
}
RestrictedMousePanMediator restrictedMousePanMediator() {
return restrictedMousePanMediator;
}
}
}