/* * Copyright 2016 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.Collections; import java.util.List; import java.util.Map.Entry; import java.util.Set; import com.ait.lienzo.client.core.shape.Layer; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwtmockito.GwtMockitoTestRunner; import com.google.gwtmockito.WithClassesToStub; import org.drools.workbench.models.datamodel.workitems.PortableWorkDefinition; import org.drools.workbench.models.guided.dtable.shared.auditlog.UpdateColumnAuditLogEntry; import org.drools.workbench.models.guided.dtable.shared.model.ActionCol52; import org.drools.workbench.models.guided.dtable.shared.model.AttributeCol52; import org.drools.workbench.models.guided.dtable.shared.model.BaseColumn; import org.drools.workbench.models.guided.dtable.shared.model.BaseColumnFieldDiff; import org.drools.workbench.models.guided.dtable.shared.model.ConditionCol52; import org.drools.workbench.models.guided.dtable.shared.model.GuidedDecisionTable52; import org.drools.workbench.models.guided.dtable.shared.model.MetadataCol52; import org.drools.workbench.models.guided.dtable.shared.model.Pattern52; import org.drools.workbench.screens.guided.dtable.client.widget.analysis.DecisionTableAnalyzerProvider; import org.drools.workbench.screens.guided.dtable.client.widget.table.events.cdi.RefreshActionsPanelEvent; import org.drools.workbench.screens.guided.dtable.client.widget.table.events.cdi.RefreshAttributesPanelEvent; import org.drools.workbench.screens.guided.dtable.client.widget.table.events.cdi.RefreshConditionsPanelEvent; import org.drools.workbench.screens.guided.dtable.client.widget.table.events.cdi.RefreshMetaDataPanelEvent; import org.drools.workbench.screens.guided.dtable.client.widget.table.lockmanager.GuidedDecisionTableLockManager; import org.drools.workbench.screens.guided.dtable.client.widget.table.model.converters.column.GridWidgetColumnFactory; import org.drools.workbench.screens.guided.dtable.client.widget.table.model.converters.column.impl.GridWidgetColumnFactoryImpl; import org.drools.workbench.screens.guided.dtable.client.widget.table.model.synchronizers.ModelSynchronizer; import org.drools.workbench.screens.guided.dtable.client.widget.table.model.synchronizers.ModelSynchronizer.MoveColumnVetoException; import org.drools.workbench.screens.guided.dtable.client.widget.table.utilities.EnumLoaderUtilities; import org.drools.workbench.screens.guided.dtable.model.GuidedDecisionTableEditorContent; import org.guvnor.common.services.shared.metadata.model.Overview; import org.gwtbootstrap3.client.ui.html.Text; import org.jboss.errai.ioc.client.container.SyncBeanManager; import org.jboss.errai.security.shared.api.identity.User; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.kie.workbench.common.services.datamodel.model.PackageDataModelOracleBaselinePayload; import org.kie.workbench.common.widgets.client.datamodel.AsyncPackageDataModelOracle; import org.kie.workbench.common.widgets.client.datamodel.AsyncPackageDataModelOracleFactory; import org.mockito.Mock; import org.mockito.Mockito; import org.uberfire.backend.vfs.Path; import org.uberfire.mocks.EventSourceMock; import org.uberfire.mvp.PlaceRequest; import static org.junit.Assert.*; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.*; @WithClassesToStub({ Text.class, DateTimeFormat.class }) @RunWith(GwtMockitoTestRunner.class) public class GuidedDecisionTablePresenter_AuditLogTest { @Mock private User identity; @Mock private AsyncPackageDataModelOracleFactory oracleFactory; @Mock private ModelSynchronizer synchronizer; @Mock private SyncBeanManager beanManager; @Mock private GuidedDecisionTableModellerPresenter modellerPresenter; @Mock private GuidedDecisionTableLockManager lockManager; @Mock private GuidedDecisionTableView view; @Mock private EventSourceMock<RefreshAttributesPanelEvent> refreshAttributesPanelEvent; @Mock private EventSourceMock<RefreshMetaDataPanelEvent> refreshMetaDataPanelEvent; @Mock private EventSourceMock<RefreshConditionsPanelEvent> refreshConditionsPanelEvent; @Mock private EventSourceMock<RefreshActionsPanelEvent> refreshActionsPanelEvent; @Mock private DecisionTableAnalyzerProvider decisionTableAnalyzerProvider; @Mock private EnumLoaderUtilities enumLoaderUtilities; private GridWidgetColumnFactory gridWidgetColumnFactory = new GridWidgetColumnFactoryImpl(); private GuidedDecisionTablePresenter dtPresenter; private GuidedDecisionTableEditorContent dtContent; private GuidedDecisionTable52 model = spy( new GuidedDecisionTable52() ); private List<BaseColumnFieldDiff> diffs; @Before public void setup() throws MoveColumnVetoException { setupPresenter(); for ( Entry<String, Boolean> entry : model.getAuditLog().getAuditLogFilter().getAcceptedTypes().entrySet() ) { entry.setValue( Boolean.TRUE ); } Mockito.reset( model ); diffs = new ArrayList(); diffs.add( null ); when( synchronizer.updateColumn( any( BaseColumn.class ), any( BaseColumn.class ) ) ).thenReturn( diffs ); when( synchronizer.updateColumn( any( Pattern52.class ), any( ConditionCol52.class ), any( Pattern52.class ), any( ConditionCol52.class ) ) ).thenReturn( diffs ); } private void setupPresenter() { dtPresenter = new GuidedDecisionTablePresenter( identity, null, null, null, null, null, refreshAttributesPanelEvent, refreshMetaDataPanelEvent, refreshConditionsPanelEvent, refreshActionsPanelEvent, null, null, gridWidgetColumnFactory, oracleFactory, synchronizer, beanManager, lockManager, null, null, decisionTableAnalyzerProvider, enumLoaderUtilities ) { @Override void initialiseLockManager() { //Do nothing for tests } @Override GuidedDecisionTableView makeView( final Set<PortableWorkDefinition> workItemDefinitions ) { return view; } @Override void initialiseModels() { //Do nothing for tests } }; final AsyncPackageDataModelOracle dmo = mock( AsyncPackageDataModelOracle.class ); final PackageDataModelOracleBaselinePayload dmoBaseline = mock( PackageDataModelOracleBaselinePayload.class ); final Set<PortableWorkDefinition> workItemDefinitions = Collections.emptySet(); final Overview overview = mock( Overview.class ); dtContent = new GuidedDecisionTableEditorContent( model, workItemDefinitions, overview, dmoBaseline ); when( oracleFactory.makeAsyncPackageDataModelOracle( any( Path.class ), any( GuidedDecisionTable52.class ), eq( dmoBaseline ) ) ).thenReturn( dmo ); dtPresenter.setContent( null, mock( PlaceRequest.class ), dtContent, modellerPresenter, false ); when( view.getLayer() ).thenReturn( mock( Layer.class ) ); } @Test public void updateColumnAddsToLog() throws MoveColumnVetoException { dtPresenter.updateColumn( new ActionCol52(), new ActionCol52() ); dtPresenter.updateColumn( new AttributeCol52(), new AttributeCol52() ); dtPresenter.updateColumn( new ConditionCol52(), new ConditionCol52() ); dtPresenter.updateColumn( new MetadataCol52(), new MetadataCol52() ); dtPresenter.updateColumn( new Pattern52(), new ConditionCol52(), new Pattern52(), new ConditionCol52() ); verify( synchronizer, times( 4 ) ).updateColumn( any( BaseColumn.class ), any( BaseColumn.class ) ); verify( synchronizer ).updateColumn( any( Pattern52.class ), any( ConditionCol52.class ), any( Pattern52.class ), any( ConditionCol52.class ) ); verify( model, times( 5 ) ).getAuditLog(); assertEquals( 5, model.getAuditLog().size() ); for ( UpdateColumnAuditLogEntry entry : model.getAuditLog().toArray( new UpdateColumnAuditLogEntry[ 0 ] ) ) { assertEquals( diffs, entry.getDiffs() ); } } }