/*
* 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.wizard.column.plugins;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import com.google.gwtmockito.GwtMockitoTestRunner;
import com.google.gwtmockito.WithClassesToStub;
import org.drools.workbench.models.datamodel.oracle.FieldAccessorsAndMutators;
import org.drools.workbench.models.datamodel.rule.BaseSingleFieldConstraint;
import org.drools.workbench.models.datamodel.workitems.PortableParameterDefinition;
import org.drools.workbench.models.datamodel.workitems.PortableWorkDefinition;
import org.drools.workbench.models.guided.dtable.shared.model.ActionCol52;
import org.drools.workbench.models.guided.dtable.shared.model.ActionInsertFactCol52;
import org.drools.workbench.models.guided.dtable.shared.model.BRLRuleModel;
import org.drools.workbench.models.guided.dtable.shared.model.GuidedDecisionTable52;
import org.drools.workbench.models.guided.dtable.shared.model.Pattern52;
import org.drools.workbench.screens.guided.dtable.client.resources.i18n.GuidedDecisionTableErraiConstants;
import org.drools.workbench.screens.guided.dtable.client.widget.table.GuidedDecisionTableView;
import org.drools.workbench.screens.guided.dtable.client.wizard.column.pages.AdditionalInfoPage;
import org.drools.workbench.screens.guided.dtable.client.wizard.column.pages.FieldPage;
import org.drools.workbench.screens.guided.dtable.client.wizard.column.pages.PatternPage;
import org.drools.workbench.screens.guided.dtable.client.wizard.column.pages.WorkItemPage;
import org.drools.workbench.screens.guided.dtable.client.wizard.column.plugins.commons.ActionWorkItemWrapper;
import org.drools.workbench.screens.guided.dtable.client.wizard.column.plugins.commons.PatternWrapper;
import org.jboss.errai.ui.client.local.spi.TranslationService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.workbench.common.widgets.client.datamodel.AsyncPackageDataModelOracle;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.uberfire.ext.widgets.core.client.wizards.WizardPageStatusChangeEvent;
import org.uberfire.mocks.EventSourceMock;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith(GwtMockitoTestRunner.class)
@WithClassesToStub(BRLRuleModel.class)
public class ActionWorkItemSetFieldPluginTest {
@Mock
private GuidedDecisionTableView.Presenter presenter;
@Mock
private PatternPage patternPage;
@Mock
private FieldPage fieldPage;
@Mock
private AdditionalInfoPage additionalInfoPage;
@Mock
private WorkItemPage workItemPage;
@Mock
private ActionWorkItemWrapper editingWrapper;
@Mock
private TranslationService translationService;
@Mock
private AsyncPackageDataModelOracle oracle;
@Mock
private GuidedDecisionTable52 model;
@Mock
private EventSourceMock<WizardPageStatusChangeEvent> changeEvent;
@InjectMocks
private ActionWorkItemSetFieldPlugin plugin = spy(new ActionWorkItemSetFieldPlugin(patternPage,
fieldPage,
additionalInfoPage,
workItemPage,
changeEvent,
translationService));
@Test
public void testSetWorkItem() throws Exception {
final String workItemKey = "workItem";
final PortableWorkDefinition workDefinition = mock(PortableWorkDefinition.class);
final PortableParameterDefinition parameterDefinition = mock(PortableParameterDefinition.class);
final ActionWorkItemSetFieldPlugin.WorkItemParameter parameter = mock(ActionWorkItemSetFieldPlugin.WorkItemParameter.class);
final HashMap<String, ActionWorkItemSetFieldPlugin.WorkItemParameter> workItems = new HashMap<String, ActionWorkItemSetFieldPlugin.WorkItemParameter>() {{
put(workItemKey,
parameter);
}};
doReturn("workName").when(workDefinition).getName();
doReturn("parameterName").when(parameterDefinition).getName();
doReturn("parameterClassName").when(parameterDefinition).getClassName();
doReturn(workItems).when(plugin).getWorkItems();
doReturn(workDefinition).when(parameter).getWorkDefinition();
doReturn(parameterDefinition).when(parameter).getWorkParameterDefinition();
plugin.setWorkItem(workItemKey);
assertEquals(workItemKey,
plugin.getWorkItem());
verify(editingWrapper).setWorkItemName("workName");
verify(editingWrapper).setWorkItemResultParameterName("parameterName");
verify(editingWrapper).setParameterClassName("parameterClassName");
verify(plugin).fireChangeEvent(workItemPage);
}
@Test
public void testEditingCol() throws Exception {
final ActionCol52 expectedAction = mock(ActionCol52.class);
doReturn(expectedAction).when(editingWrapper).getActionCol52();
final ActionCol52 actualAction = plugin.editingCol();
assertEquals(expectedAction,
actualAction);
}
@Test
public void testIsWorkItemSetWhenItIsSet() throws Exception {
plugin.setWorkItemPageAsCompleted();
final Boolean workItemSet = plugin.isWorkItemSet();
assertTrue(workItemSet);
}
@Test
public void testIsWorkItemSetWhenItIsNotSet() throws Exception {
final Boolean workItemSet = plugin.isWorkItemSet();
assertFalse(workItemSet);
}
@Test
public void testSetWorkItemPageAsCompletedWhenItIsCompleted() throws Exception {
doReturn(true).when(plugin).isWorkItemPageCompleted();
plugin.setWorkItemPageAsCompleted();
verify(plugin,
never()).setWorkItemPageCompleted();
verify(plugin,
never()).fireChangeEvent(workItemPage);
}
@Test
public void testSetWorkItemPageAsCompletedWhenItIsNotCompleted() throws Exception {
doReturn(false).when(plugin).isWorkItemPageCompleted();
plugin.setWorkItemPageAsCompleted();
verify(plugin).setWorkItemPageCompleted();
verify(plugin).fireChangeEvent(workItemPage);
}
@Test
public void testGetHeader() throws Exception {
final String expectedHeader = "header";
doReturn(expectedHeader).when(editingWrapper).getHeader();
final String actualHeader = plugin.getHeader();
assertEquals(expectedHeader,
actualHeader);
}
@Test
public void testSetHeader() throws Exception {
final String header = "header";
plugin.setHeader(header);
verify(editingWrapper).setHeader(header);
verify(plugin).fireChangeEvent(additionalInfoPage);
}
@Test
public void testSetInsertLogical() throws Exception {
final boolean isInsertLogical = false;
plugin.setInsertLogical(isInsertLogical);
verify(editingWrapper).setInsertLogical(isInsertLogical);
}
@Test
public void testSetUpdate() throws Exception {
final boolean isUpdate = false;
plugin.setUpdate(isUpdate);
verify(editingWrapper).setUpdate(isUpdate);
}
@Test
public void testGetTitle() {
final String errorKey = GuidedDecisionTableErraiConstants.ActionWorkItemSetFieldPlugin_SetValue;
final String errorMessage = "Title";
when(translationService.format(errorKey)).thenReturn(errorMessage);
final String title = plugin.getTitle();
assertEquals(errorMessage,
title);
}
@Test
public void testGetPages() throws Exception {
assertEquals(4,
plugin.getPages().size());
}
@Test
public void testGenerateColumnWhenFactTypeIsInvalid() throws Exception {
doReturn(true).when(plugin).isNewFactPattern();
doReturn("").when(editingWrapper).getFactType();
doReturn(editingWrapper).when(plugin).editingWrapper();
final Boolean success = plugin.generateColumn();
assertFalse(success);
verify(translationService).format(GuidedDecisionTableErraiConstants.ActionWorkItemSetFieldPlugin_YouMustEnterAColumnFact);
}
@Test
public void testGenerateColumnWhenFactFieldIsInvalid() throws Exception {
doReturn("").when(editingWrapper).getFactField();
doReturn("factType").when(editingWrapper).getFactType();
doReturn(editingWrapper).when(plugin).editingWrapper();
final Boolean success = plugin.generateColumn();
assertFalse(success);
verify(translationService).format(GuidedDecisionTableErraiConstants.ActionWorkItemSetFieldPlugin_YouMustEnterAColumnField);
}
@Test
public void testGenerateColumnWhenHeaderIsInvalid() throws Exception {
doReturn("").when(editingWrapper).getHeader();
doReturn("factField").when(editingWrapper).getFactField();
doReturn("factType").when(editingWrapper).getFactType();
doReturn(editingWrapper).when(plugin).editingWrapper();
final Boolean success = plugin.generateColumn();
assertFalse(success);
verify(translationService).format(GuidedDecisionTableErraiConstants.ActionWorkItemSetFieldPlugin_YouMustEnterAColumnHeaderValueDescription);
}
@Test
public void testGenerateColumnWhenHeaderIsNotUnique() throws Exception {
final String header = "header";
doReturn(header).when(editingWrapper).getHeader();
doReturn("factField").when(editingWrapper).getFactField();
doReturn("factType").when(editingWrapper).getFactType();
doReturn(editingWrapper).when(plugin).editingWrapper();
doReturn(false).when(plugin).unique(header);
final Boolean success = plugin.generateColumn();
assertFalse(success);
verify(translationService).format(GuidedDecisionTableErraiConstants.ActionWorkItemSetFieldPlugin_ThatColumnNameIsAlreadyInUsePleasePickAnother);
}
@Test
public void testGenerateColumnWhenItIsValid() throws Exception {
final ActionCol52 actionCol52 = mock(ActionCol52.class);
final String header = "header";
doReturn(header).when(editingWrapper).getHeader();
doReturn("factField").when(editingWrapper).getFactField();
doReturn("factType").when(editingWrapper).getFactType();
doReturn(editingWrapper).when(plugin).editingWrapper();
doReturn(actionCol52).when(editingWrapper).getActionCol52();
doReturn(true).when(plugin).unique(header);
final Boolean success = plugin.generateColumn();
assertTrue(success);
verify(presenter).appendColumn(actionCol52);
verify(translationService,
never()).format(any());
}
@Test
public void testSetEditingPattern() throws Exception {
final PatternWrapper patternWrapper = mock(PatternWrapper.class);
plugin.setEditingPattern(patternWrapper);
verify(editingWrapper).setFactField(null);
verify(editingWrapper).setFactType(null);
verify(editingWrapper).setBoundName(null);
verify(editingWrapper).setType(null);
verify(plugin).fireChangeEvent(patternPage);
verify(plugin).fireChangeEvent(fieldPage);
verify(plugin).fireChangeEvent(additionalInfoPage);
assertEquals(patternWrapper,
plugin.patternWrapper());
}
@Test
public void testGetPatterns() throws Exception {
final List<ActionInsertFactCol52> actions = new ArrayList<ActionInsertFactCol52>() {{
add(mock(ActionInsertFactCol52.class));
}};
final List<Pattern52> patterns = new ArrayList<Pattern52>() {{
add(mock(Pattern52.class));
}};
doReturn(model).when(presenter).getModel();
doReturn(actions).when(model).getActionCols();
doReturn(patterns).when(model).getPatterns();
final List<PatternWrapper> result = plugin.getPatterns();
assertEquals(2,
result.size());
}
@Test
public void testConstraintValue() throws Exception {
assertEquals(BaseSingleFieldConstraint.TYPE_UNDEFINED,
plugin.constraintValue());
}
@Test
public void testGetAccessor() throws Exception {
assertEquals(FieldAccessorsAndMutators.ACCESSOR,
plugin.getAccessor());
}
@Test
public void testGetFactField() throws Exception {
final String expectedFactField = "factField";
doReturn(expectedFactField).when(editingWrapper).getFactField();
final String actualFactField = plugin.getFactField();
assertEquals(expectedFactField,
actualFactField);
}
@Test
public void testSetFactFieldWhenFactPattern() throws Exception {
final PatternWrapper patternWrapper = mock(PatternWrapper.class);
final String factField = "factField";
final String factType = "factType";
final String boundName = "boundName";
final String type = "type";
doReturn(factType).when(patternWrapper).getFactType();
doReturn(boundName).when(patternWrapper).getBoundName();
doReturn(GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY).when(model).getTableFormat();
doReturn(editingWrapper).when(plugin).editingWrapper();
doReturn(patternWrapper).when(plugin).patternWrapper();
doReturn(model).when(presenter).getModel();
doReturn(oracle).when(presenter).getDataModelOracle();
doReturn(true).when(plugin).isNewFactPattern();
doReturn(type).when(oracle).getFieldType(any(),
any());
plugin.setFactField(factField);
verify(editingWrapper).setFactField(factField);
verify(editingWrapper).setFactType(factType);
verify(editingWrapper).setBoundName(boundName);
verify(editingWrapper).setType(type);
verify(plugin).fireChangeEvent(fieldPage);
}
@Test
public void testShowUpdateEngineWithChangesWhenFactPatternIsNew() throws Exception {
doReturn(true).when(plugin).isNewFactPattern();
final boolean updateEngineWithChanges = plugin.showUpdateEngineWithChanges();
assertFalse(updateEngineWithChanges);
}
@Test
public void testShowUpdateEngineWithChangesWhenFactPatternIsNotNew() throws Exception {
doReturn(false).when(plugin).isNewFactPattern();
final boolean updateEngineWithChanges = plugin.showUpdateEngineWithChanges();
assertTrue(updateEngineWithChanges);
}
@Test
public void testShowLogicallyInsertWhenFactPatternIsNew() throws Exception {
doReturn(true).when(plugin).isNewFactPattern();
final boolean logicallyInsert = plugin.showLogicallyInsert();
assertTrue(logicallyInsert);
}
@Test
public void testShowLogicallyInsertWhenFactPatternIsNotNew() throws Exception {
doReturn(false).when(plugin).isNewFactPattern();
final boolean logicallyInsert = plugin.showLogicallyInsert();
assertFalse(logicallyInsert);
}
@Test
public void testInitializedPatternPage() throws Exception {
plugin.initializedPatternPage();
verify(patternPage).disableEntryPoint();
verify(patternPage).disableNegatedPatterns();
}
@Test
public void testInitializedAdditionalInfoPage() throws Exception {
plugin.initializedAdditionalInfoPage();
verify(additionalInfoPage).enableHeader();
verify(additionalInfoPage).enableLogicallyInsert();
verify(additionalInfoPage).enableUpdateEngineWithChanges();
verify(additionalInfoPage).enableHideColumn();
}
}