/*
* 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.popovers;
import java.util.ArrayList;
import java.util.HashSet;
import com.ait.lienzo.client.core.event.NodeMouseMoveEvent;
import com.ait.lienzo.client.core.shape.Group;
import com.ait.lienzo.client.core.shape.Viewport;
import com.ait.lienzo.client.core.types.Point2D;
import com.ait.lienzo.test.LienzoMockitoTestRunner;
import org.drools.workbench.screens.guided.dtable.client.widget.table.GuidedDecisionTableModellerView;
import org.drools.workbench.screens.guided.dtable.client.widget.table.GuidedDecisionTableView;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.uberfire.ext.wires.core.grids.client.model.GridColumn;
import org.uberfire.ext.wires.core.grids.client.model.GridData;
import org.uberfire.ext.wires.core.grids.client.widget.grid.renderers.grids.GridRenderer;
import org.uberfire.ext.wires.core.grids.client.widget.grid.renderers.grids.impl.BaseGridRendererHelper;
import org.uberfire.ext.wires.core.grids.client.widget.layer.impl.DefaultGridLayer;
import static org.mockito.Mockito.*;
@RunWith(LienzoMockitoTestRunner.class)
public class ColumnHeaderPopOverHandlerTest {
@Mock
private GuidedDecisionTableModellerView.Presenter modellerPresenter;
@Mock
private ColumnHeaderPopOver columnPopOverPresenter;
@Mock
private Group header;
@Mock
private Viewport viewport;
@Mock
private DefaultGridLayer layer;
@Mock
private GuidedDecisionTableView.Presenter dtPresenter1;
@Mock
private GuidedDecisionTableView.Presenter dtPresenter2;
@Mock
private GuidedDecisionTableView dtView1;
@Mock
private GuidedDecisionTableView dtView2;
@Mock
private GridData uiModel;
@Mock
private GridColumn uiColumn;
@Mock
private GridRenderer renderer;
@Mock
private BaseGridRendererHelper helper;
@Mock
private BaseGridRendererHelper.ColumnInformation columnInformation;
@Mock
private NodeMouseMoveEvent event;
private ColumnHeaderPopOverHandler handler;
@Before
public void setup() {
when( renderer.getHeaderHeight() ).thenReturn( 64.0 );
when( renderer.getHeaderRowHeight() ).thenReturn( 32.0 );
when( helper.getColumnInformation( any( Double.class ) ) ).thenReturn( columnInformation );
when( columnInformation.getColumn() ).thenReturn( uiColumn );
when( uiModel.getHeaderRowCount() ).thenReturn( 2 );
when( uiModel.getColumnCount() ).thenReturn( 1 );
when( uiModel.getColumns() ).thenReturn( new ArrayList<GridColumn<?>>() {{
add( uiColumn );
}} );
when( uiColumn.getWidth() ).thenReturn( 100.0 );
setupDecisionTable( dtPresenter1,
dtView1 );
setupDecisionTable( dtPresenter2,
dtView2 );
this.handler = new ColumnHeaderPopOverHandler( modellerPresenter,
columnPopOverPresenter );
}
private void setupDecisionTable( final GuidedDecisionTableView.Presenter dtPresenter,
final GuidedDecisionTableView dtView ) {
when( dtPresenter.getView() ).thenReturn( dtView );
when( dtView.isVisible() ).thenReturn( true );
when( dtView.getViewport() ).thenReturn( viewport );
when( dtView.getModel() ).thenReturn( uiModel );
when( dtView.getRenderer() ).thenReturn( renderer );
when( dtView.getRendererHelper() ).thenReturn( helper );
when( dtView.getLayer() ).thenReturn( layer );
when( dtView.getHeader() ).thenReturn( header );
when( dtView.getWidth() ).thenReturn( 100.0 );
}
@Test
public void popOverHiddenOnMouseMoveEvent() {
handler.onNodeMouseMove( event );
verify( columnPopOverPresenter,
times( 1 ) ).hide();
}
@Test
public void noPopOverWhenNoDecisionTables() {
handler.onNodeMouseMove( event );
verify( columnPopOverPresenter,
never() ).show( any( GuidedDecisionTableModellerView.class ),
any( GuidedDecisionTableView.Presenter.class ),
any( Integer.class ) );
}
@Test
public void noPopOverWhenEventNotOverDecisionTableHeader() {
when( modellerPresenter.getAvailableDecisionTables() ).thenReturn( new HashSet<GuidedDecisionTableView.Presenter>() {{
add( dtPresenter1 );
}} );
when( event.getX() ).thenReturn( 50 );
when( event.getY() ).thenReturn( 100 );
when( dtView1.getLocation() ).thenReturn( new Point2D( 0,
0 ) );
handler.onNodeMouseMove( event );
verify( columnPopOverPresenter,
never() ).show( any( GuidedDecisionTableModellerView.class ),
any( GuidedDecisionTableView.Presenter.class ),
any( Integer.class ) );
}
@Test
public void noPopOverWhenEventNotOverDecisionTableColumn() {
when( modellerPresenter.getAvailableDecisionTables() ).thenReturn( new HashSet<GuidedDecisionTableView.Presenter>() {{
add( dtPresenter1 );
}} );
when( event.getX() ).thenReturn( 150 );
when( event.getY() ).thenReturn( 50 );
when( dtView1.getLocation() ).thenReturn( new Point2D( 0,
0 ) );
handler.onNodeMouseMove( event );
verify( columnPopOverPresenter,
never() ).show( any( GuidedDecisionTableModellerView.class ),
any( GuidedDecisionTableView.Presenter.class ),
any( Integer.class ) );
}
@Test
public void popOverWhenEventOverDecisionTableHeaderAndColumn() {
when( modellerPresenter.getAvailableDecisionTables() ).thenReturn( new HashSet<GuidedDecisionTableView.Presenter>() {{
add( dtPresenter1 );
}} );
when( event.getX() ).thenReturn( 50 );
when( event.getY() ).thenReturn( 50 );
when( dtView1.getLocation() ).thenReturn( new Point2D( 0,
0 ) );
handler.onNodeMouseMove( event );
verify( columnPopOverPresenter,
times( 1 ) ).show( any( GuidedDecisionTableModellerView.class ),
eq( dtPresenter1 ),
eq( 0 ) );
}
@Test
public void popOverWhenEventOverDecisionTableHeaderAndColumnWithMultipleTables() {
when( modellerPresenter.getAvailableDecisionTables() ).thenReturn( new HashSet<GuidedDecisionTableView.Presenter>() {{
add( dtPresenter1 );
add( dtPresenter2 );
}} );
when( dtView1.getLocation() ).thenReturn( new Point2D( 0,
0 ) );
when( dtView2.getLocation() ).thenReturn( new Point2D( 200,
200 ) );
when( event.getX() ).thenReturn( 50 );
when( event.getY() ).thenReturn( 50 );
handler.onNodeMouseMove( event );
verify( columnPopOverPresenter,
times( 1 ) ).show( any( GuidedDecisionTableModellerView.class ),
eq( dtPresenter1 ),
eq( 0 ) );
when( event.getX() ).thenReturn( 250 );
when( event.getY() ).thenReturn( 250 );
handler.onNodeMouseMove( event );
verify( columnPopOverPresenter,
times( 1 ) ).show( any( GuidedDecisionTableModellerView.class ),
eq( dtPresenter2 ),
eq( 0 ) );
}
}