/* * 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.editor.menu; import java.util.ArrayList; import java.util.HashSet; import org.drools.workbench.models.guided.dtable.shared.model.DTCellValue52; import org.drools.workbench.models.guided.dtable.shared.model.GuidedDecisionTable52; import org.drools.workbench.models.guided.dtable.shared.model.MetadataCol52; import org.drools.workbench.screens.guided.dtable.client.editor.clipboard.Clipboard; import org.drools.workbench.screens.guided.dtable.client.editor.clipboard.impl.DefaultClipboard; import org.drools.workbench.screens.guided.dtable.client.widget.table.GuidedDecisionTablePresenter; import org.drools.workbench.screens.guided.dtable.client.widget.table.GuidedDecisionTableView; import org.drools.workbench.screens.guided.dtable.client.widget.table.events.cdi.DecisionTableSelectedEvent; import org.drools.workbench.screens.guided.dtable.client.widget.table.events.cdi.DecisionTableSelectionsChangedEvent; import org.drools.workbench.screens.guided.dtable.client.widget.table.model.GuidedDecisionTableUiModel; import org.drools.workbench.screens.guided.dtable.client.widget.table.model.synchronizers.ModelSynchronizer; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.uberfire.ext.wires.core.grids.client.model.GridColumn; import org.uberfire.ext.wires.core.grids.client.model.impl.BaseGridColumn; import org.uberfire.ext.wires.core.grids.client.model.impl.BaseGridRow; import org.uberfire.ext.wires.core.grids.client.widget.grid.renderers.columns.GridColumnRenderer; import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) public class CellContextMenuTest { private CellContextMenu menu; private GuidedDecisionTable52 model; private GuidedDecisionTableUiModel uiModel; private Clipboard clipboard; @Mock private CellContextMenuView view; @Mock private GuidedDecisionTableView.Presenter dtPresenter; private GuidedDecisionTablePresenter.Access access = new GuidedDecisionTablePresenter.Access(); @Mock private GuidedDecisionTableView dtPresenterView; @Before @SuppressWarnings("unchecked") public void setup() { model = new GuidedDecisionTable52(); uiModel = new GuidedDecisionTableUiModel( mock( ModelSynchronizer.class ) ); clipboard = new DefaultClipboard(); when( dtPresenter.getView() ).thenReturn( dtPresenterView ); when( dtPresenter.getModel() ).thenReturn( model ); when( dtPresenter.getAccess() ).thenReturn( access ); when( dtPresenterView.getModel() ).thenReturn( uiModel ); uiModel.appendColumn( new BaseGridColumn<String>( mock( GridColumn.HeaderMetaData.class ), mock( GridColumnRenderer.class ), 100 ) ); uiModel.appendColumn( new BaseGridColumn<String>( mock( GridColumn.HeaderMetaData.class ), mock( GridColumnRenderer.class ), 100 ) ); uiModel.appendColumn( new BaseGridColumn<String>( mock( GridColumn.HeaderMetaData.class ), mock( GridColumnRenderer.class ), 100 ) ); uiModel.appendRow( new BaseGridRow() ); menu = new CellContextMenu( view, clipboard ); menu.setup(); } @Test public void testOnDecisionTableSelectedEventWithNoSelections() { menu.onDecisionTableSelectedEvent( new DecisionTableSelectedEvent( dtPresenter ) ); verify( view, times( 1 ) ).enableCutMenuItem( eq( false ) ); verify( view, times( 1 ) ).enableCopyMenuItem( eq( false ) ); verify( view, times( 1 ) ).enablePasteMenuItem( eq( false ) ); verify( view, times( 1 ) ).enableDeleteCellMenuItem( eq( false ) ); } @Test public void testOnDecisionTableSelectedEventWithSelections() { model.getMetadataCols().add( new MetadataCol52() ); model.getData().add( new ArrayList<DTCellValue52>() {{ add( new DTCellValue52( 1 ) ); add( new DTCellValue52( "descr" ) ); add( new DTCellValue52( "md" ) ); }} ); uiModel.selectCell( 0, 2 ); menu.onDecisionTableSelectedEvent( new DecisionTableSelectedEvent( dtPresenter ) ); verify( view, times( 1 ) ).enableCutMenuItem( eq( true ) ); verify( view, times( 1 ) ).enableCopyMenuItem( eq( true ) ); verify( view, times( 1 ) ).enablePasteMenuItem( eq( false ) ); verify( view, times( 1 ) ).enableDeleteCellMenuItem( eq( true ) ); } @Test public void testOnDecisionTableSelectedEventWithSelectionsWithClipboardPopulated() { model.getMetadataCols().add( new MetadataCol52() ); model.getData().add( new ArrayList<DTCellValue52>() {{ add( new DTCellValue52( 1 ) ); add( new DTCellValue52( "descr" ) ); add( new DTCellValue52( "md" ) ); }} ); uiModel.selectCell( 0, 2 ); clipboard.setData( new HashSet<Clipboard.ClipboardData>() {{ add( new DefaultClipboard.ClipboardDataImpl( 0, 2, model.getData().get( 0 ).get( 2 ) ) ); }} ); menu.onDecisionTableSelectedEvent( new DecisionTableSelectedEvent( dtPresenter ) ); verify( view, times( 1 ) ).enableCutMenuItem( eq( true ) ); verify( view, times( 1 ) ).enableCopyMenuItem( eq( true ) ); verify( view, times( 1 ) ).enablePasteMenuItem( eq( true ) ); verify( view, times( 1 ) ).enableDeleteCellMenuItem( eq( true ) ); } @Test public void testOnDecisionTableSelectionsChangedEventWithNoSelections() { menu.onDecisionTableSelectionsChangedEvent( new DecisionTableSelectionsChangedEvent( dtPresenter ) ); verify( view, times( 1 ) ).enableCutMenuItem( eq( false ) ); verify( view, times( 1 ) ).enableCopyMenuItem( eq( false ) ); verify( view, times( 1 ) ).enablePasteMenuItem( eq( false ) ); verify( view, times( 1 ) ).enableDeleteCellMenuItem( eq( false ) ); } @Test public void testOnDecisionTableSelectionsChangedEventWithSelections() { model.getMetadataCols().add( new MetadataCol52() ); model.getData().add( new ArrayList<DTCellValue52>() {{ add( new DTCellValue52( 1 ) ); add( new DTCellValue52( "descr" ) ); add( new DTCellValue52( "md" ) ); }} ); uiModel.selectCell( 0, 2 ); menu.onDecisionTableSelectionsChangedEvent( new DecisionTableSelectionsChangedEvent( dtPresenter ) ); verify( view, times( 1 ) ).enableCutMenuItem( eq( true ) ); verify( view, times( 1 ) ).enableCopyMenuItem( eq( true ) ); verify( view, times( 1 ) ).enablePasteMenuItem( eq( false ) ); verify( view, times( 1 ) ).enableDeleteCellMenuItem( eq( true ) ); } @Test public void testOnDecisionTableSelectionsChangedEventWithSelectionsWithClipboardPopulated() { model.getMetadataCols().add( new MetadataCol52() ); model.getData().add( new ArrayList<DTCellValue52>() {{ add( new DTCellValue52( 1 ) ); add( new DTCellValue52( "descr" ) ); add( new DTCellValue52( "md" ) ); }} ); uiModel.selectCell( 0, 2 ); clipboard.setData( new HashSet<Clipboard.ClipboardData>() {{ add( new DefaultClipboard.ClipboardDataImpl( 0, 2, model.getData().get( 0 ).get( 2 ) ) ); }} ); menu.onDecisionTableSelectionsChangedEvent( new DecisionTableSelectionsChangedEvent( dtPresenter ) ); verify( view, times( 1 ) ).enableCutMenuItem( eq( true ) ); verify( view, times( 1 ) ).enableCopyMenuItem( eq( true ) ); verify( view, times( 1 ) ).enablePasteMenuItem( eq( true ) ); verify( view, times( 1 ) ).enableDeleteCellMenuItem( eq( true ) ); } @Test public void testOnDecisionTableSelectedEventReadOnly() { dtPresenter.getAccess().setReadOnly( true ); menu.onDecisionTableSelectedEvent( new DecisionTableSelectedEvent( dtPresenter ) ); verify( view, times( 1 ) ).enableCutMenuItem( eq( false ) ); verify( view, times( 1 ) ).enableCopyMenuItem( eq( false ) ); verify( view, times( 1 ) ).enablePasteMenuItem( eq( false ) ); verify( view, times( 1 ) ).enableDeleteCellMenuItem( eq( false ) ); } }