/*
* 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.List;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwtmockito.GwtMockitoTestRunner;
import com.google.gwtmockito.WithClassesToStub;
import org.drools.workbench.models.guided.dtable.shared.model.BRLConditionColumn;
import org.drools.workbench.models.guided.dtable.shared.model.BRLRuleModel;
import org.drools.workbench.models.guided.dtable.shared.model.GuidedDecisionTable52;
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.NewGuidedDecisionTableColumnWizard;
import org.drools.workbench.screens.guided.dtable.client.wizard.column.pages.AdditionalInfoPage;
import org.drools.workbench.screens.guided.dtable.client.wizard.column.pages.RuleModellerPage;
import org.jboss.errai.ui.client.local.spi.TranslationService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.uberfire.ext.widgets.core.client.wizards.WizardPage;
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 BRLConditionColumnPluginTest {
@Mock
private RuleModellerPage ruleModellerPage;
@Mock
private AdditionalInfoPage additionalInfoPage;
@Mock
private EventSourceMock<WizardPageStatusChangeEvent> changeEvent;
@Mock
private GuidedDecisionTableView.Presenter presenter;
@Mock
private GuidedDecisionTable52 model;
@Mock
private TranslationService translationService;
@Mock
private BRLConditionColumn editingCol;
@Mock
private HandlerRegistration registration;
@Mock
private NewGuidedDecisionTableColumnWizard wizard;
@InjectMocks
private BRLConditionColumnPlugin plugin = spy(new BRLConditionColumnPlugin(ruleModellerPage,
additionalInfoPage,
changeEvent,
translationService));
@Test
public void testGetTitle() throws Exception {
final String errorKey = GuidedDecisionTableErraiConstants.BRLConditionColumnPlugin_AddConditionBRL;
final String errorMessage = "Title";
when(translationService.format(errorKey)).thenReturn(errorMessage);
final String title = plugin.getTitle();
assertEquals(errorMessage,
title);
}
@Test
public void testInit() throws Exception {
doReturn(GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY).when(plugin).tableFormat();
doReturn(mock(EventBus.class)).when(presenter).getEventBus();
doReturn(presenter).when(wizard).getPresenter();
plugin.init(wizard);
verify(plugin).setupEditingCol();
verify(plugin).setupRuleModellerEvents();
}
@Test
public void testGetPages() throws Exception {
final List<WizardPage> pages = plugin.getPages();
assertEquals(2,
pages.size());
}
@Test
public void testOnClose() throws Exception {
plugin.onClose();
verify(plugin).teardownRuleModellerEvents();
}
@Test
public void testGenerateColumnWhenHeaderIsBlank() throws Exception {
doReturn("").when(editingCol).getHeader();
final Boolean success = plugin.generateColumn();
assertFalse(success);
verify(translationService).format(GuidedDecisionTableErraiConstants.BRLConditionColumnPlugin_YouMustEnterAColumnHeaderValueDescription);
}
@Test
public void testGenerateColumnWhenHeaderIsNotUnique() throws Exception {
final String header = "header";
doReturn(false).when(plugin).isHeaderUnique(header);
doReturn(model).when(presenter).getModel();
doReturn(header).when(editingCol).getHeader();
final Boolean success = plugin.generateColumn();
assertFalse(success);
verify(translationService).format(GuidedDecisionTableErraiConstants.BRLConditionColumnPlugin_ThatColumnNameIsAlreadyInUsePleasePickAnother);
}
@Test
public void testGenerateColumnWhenHeaderIsValid() throws Exception {
final String header = "header";
doReturn(true).when(plugin).isHeaderUnique(header);
doReturn(model).when(presenter).getModel();
doReturn(header).when(editingCol).getHeader();
final Boolean success = plugin.generateColumn();
assertTrue(success);
verify(plugin).getDefinedVariables(any());
verify(editingCol).setDefinition(any());
verify(presenter).appendColumn(editingCol);
verify(translationService,
never()).format(any());
}
@Test
public void testGetHeader() throws Exception {
plugin.getHeader();
verify(editingCol).getHeader();
}
@Test
public void testSetHeader() throws Exception {
final String header = "header";
plugin.setHeader(header);
verify(editingCol).setHeader(header);
verify(plugin).fireChangeEvent(additionalInfoPage);
}
@Test
public void testGetRuleModel() throws Exception {
assertNotNull(plugin.getRuleModel());
}
@Test
public void testSetRuleModellerPageAsCompletedWhenItIsCompleted() throws Exception {
doReturn(true).when(plugin).isRuleModellerPageCompleted();
plugin.setRuleModellerPageAsCompleted();
verify(plugin,
never()).setRuleModellerPageCompleted();
verify(plugin,
never()).fireChangeEvent(ruleModellerPage);
}
@Test
public void testSetRuleModellerPageAsCompletedWhenItIsNotCompleted() throws Exception {
doReturn(false).when(plugin).isRuleModellerPageCompleted();
plugin.setRuleModellerPageAsCompleted();
verify(plugin).setRuleModellerPageCompleted();
verify(plugin).fireChangeEvent(ruleModellerPage);
}
@Test
public void testTableFormat() throws Exception {
final GuidedDecisionTable52.TableFormat expectedTableFormat = GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY;
doReturn(expectedTableFormat).when(model).getTableFormat();
doReturn(model).when(presenter).getModel();
final GuidedDecisionTable52.TableFormat actualTableFormat = plugin.tableFormat();
assertEquals(expectedTableFormat,
actualTableFormat);
}
}