/* * 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.kie.workbench.common.stunner.client.widgets.presenters.session.impl; import java.lang.annotation.Annotation; import java.util.function.Consumer; import com.ait.lienzo.test.LienzoMockitoTestRunner; import org.jboss.errai.ioc.client.api.ManagedInstance; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.kie.workbench.common.stunner.client.widgets.presenters.AbstractCanvasHandlerViewerTest; import org.kie.workbench.common.stunner.client.widgets.presenters.session.SessionViewer; import org.kie.workbench.common.stunner.client.widgets.views.WidgetWrapperView; import org.kie.workbench.common.stunner.core.api.DefinitionManager; import org.kie.workbench.common.stunner.core.client.api.ShapeManager; import org.kie.workbench.common.stunner.core.client.canvas.AbstractCanvas; import org.kie.workbench.common.stunner.core.client.canvas.AbstractCanvasHandler; import org.kie.workbench.common.stunner.core.client.canvas.BaseCanvasHandler; import org.kie.workbench.common.stunner.core.client.canvas.CanvasFactory; import org.kie.workbench.common.stunner.core.client.canvas.controls.connection.ConnectionAcceptorControl; import org.kie.workbench.common.stunner.core.client.canvas.controls.containment.ContainmentAcceptorControl; import org.kie.workbench.common.stunner.core.client.canvas.controls.docking.DockingAcceptorControl; import org.kie.workbench.common.stunner.core.client.canvas.controls.select.SelectionControl; import org.kie.workbench.common.stunner.core.client.canvas.controls.zoom.ZoomControl; import org.kie.workbench.common.stunner.core.client.command.CanvasCommand; import org.kie.workbench.common.stunner.core.client.command.CanvasCommandFactory; import org.kie.workbench.common.stunner.core.client.command.CanvasCommandManager; import org.kie.workbench.common.stunner.core.client.session.impl.AbstractClientFullSession; import org.kie.workbench.common.stunner.core.client.session.impl.AbstractClientSession; import org.kie.workbench.common.stunner.core.definition.adapter.AdapterManager; import org.kie.workbench.common.stunner.core.definition.adapter.DefinitionSetRuleAdapter; import org.kie.workbench.common.stunner.core.diagram.Diagram; import org.kie.workbench.common.stunner.core.diagram.Metadata; import org.kie.workbench.common.stunner.core.graph.util.GraphUtils; import org.kie.workbench.common.stunner.core.registry.definition.TypeDefinitionSetRegistry; import org.kie.workbench.common.stunner.core.rule.EmptyRuleSet; import org.kie.workbench.common.stunner.core.rule.RuleSet; import org.kie.workbench.common.stunner.core.util.DefinitionUtils; import org.mockito.Mock; import static org.junit.Assert.*; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.*; @RunWith(LienzoMockitoTestRunner.class) public class SessionPreviewImplTest extends AbstractCanvasHandlerViewerTest { private static final String DEFINITION_SET_ID = "definitionSetId"; private static final RuleSet EMPTY_RULESET = new EmptyRuleSet(); @Mock private DefinitionManager definitionManager; @Mock private ShapeManager shapeManager; @Mock private CanvasCommandManager<AbstractCanvasHandler> canvasCommandManager; @Mock private DefinitionUtils definitionUtils; @Mock private GraphUtils graphUtils; @Mock private ManagedInstance<CanvasCommandFactory> canvasCommandFactories; @Mock private ManagedInstance<BaseCanvasHandler> canvasHandlerFactories; @Mock private SelectionControl<AbstractCanvasHandler, ?> selectionControl; @Mock private WidgetWrapperView view; @Mock private AbstractClientFullSession session; @Mock private SessionViewer.SessionViewerCallback<AbstractClientSession, Diagram> callback; @Mock private ZoomControl<AbstractCanvas> zoomControl; @Mock private ConnectionAcceptorControl<AbstractCanvasHandler> connectionAcceptorControl; @Mock private ContainmentAcceptorControl<AbstractCanvasHandler> containmentAcceptorControl; @Mock private DockingAcceptorControl<AbstractCanvasHandler> dockingAcceptorControl; @Mock private CanvasFactory canvasFactory; @Mock private Metadata metaData; @Mock private Annotation qualifier; @Mock private ManagedInstance customCanvasCommandFactoryInstance; @Mock private ManagedInstance defaultCanvasCommandFactoryInstance; @Mock private CanvasCommandFactory customCanvasCommandFactoryImplementation; @Mock private CanvasCommandFactory defaultCanvasCommandFactoryImplementation; @Mock private ManagedInstance customCanvasHandlerInstance; @Mock private ManagedInstance defaultCanvasHandlerInstance; @Mock private BaseCanvasHandler customCanvasHandlerImplementation; @Mock private BaseCanvasHandler defaultCanvasHandlerImplementation; @Mock private AdapterManager adapterManager; @Mock private DefinitionSetRuleAdapter ruleAdapter; @Mock private TypeDefinitionSetRegistry definitionSetRegistry; @Mock private Object defSet; private SessionPreviewImpl preview; @Before @SuppressWarnings("unchecked") public void setup() throws Exception { super.init(); when(canvasHandler.getDiagram()).thenReturn(diagram); when(session.getCanvasHandler()).thenReturn(canvasHandler); when(session.getCanvas()).thenReturn(canvas); when(session.getZoomControl()).thenReturn(zoomControl); when(session.getConnectionAcceptorControl()).thenReturn(connectionAcceptorControl); when(session.getContainmentAcceptorControl()).thenReturn(containmentAcceptorControl); when(session.getDockingAcceptorControl()).thenReturn(dockingAcceptorControl); when(definitionManager.adapters()).thenReturn(adapterManager); when(adapterManager.forRules()).thenReturn(ruleAdapter); when(ruleAdapter.getRuleSet(eq(defSet))).thenReturn(EMPTY_RULESET); when(definitionManager.definitionSets()).thenReturn(definitionSetRegistry); when(definitionSetRegistry.getDefinitionSetById(eq(DEFINITION_SET_ID))).thenReturn(defSet); when(shapeManager.getCanvasFactory(any(Diagram.class))).thenReturn(canvasFactory); when(canvasFactory.newCanvas()).thenReturn(canvas); when(canvasFactory.newControl(eq(ZoomControl.class))).thenReturn(zoomControl); when(diagram.getMetadata()).thenReturn(metaData); when(metaData.getDefinitionSetId()).thenReturn(DEFINITION_SET_ID); when(definitionUtils.getQualifier(eq(DEFINITION_SET_ID))).thenReturn(qualifier); when(customCanvasCommandFactoryInstance.get()).thenReturn(customCanvasCommandFactoryImplementation); when(defaultCanvasCommandFactoryInstance.get()).thenReturn(defaultCanvasCommandFactoryImplementation); when(canvasCommandFactories.select(eq(qualifier))).thenReturn(customCanvasCommandFactoryInstance); when(canvasCommandFactories.select(eq(DefinitionManager.DEFAULT_QUALIFIER))).thenReturn(defaultCanvasCommandFactoryInstance); when(customCanvasCommandFactoryImplementation.draw()).thenReturn(mock(CanvasCommand.class)); when(defaultCanvasCommandFactoryImplementation.draw()).thenReturn(mock(CanvasCommand.class)); when(customCanvasHandlerInstance.get()).thenReturn(customCanvasHandlerImplementation); when(defaultCanvasHandlerInstance.get()).thenReturn(defaultCanvasHandlerImplementation); when(canvasHandlerFactories.select(eq(qualifier))).thenReturn(customCanvasHandlerInstance); when(canvasHandlerFactories.select(eq(DefinitionManager.DEFAULT_QUALIFIER))).thenReturn(defaultCanvasHandlerInstance); this.preview = new SessionPreviewImpl(definitionManager, shapeManager, canvasCommandManager, definitionUtils, graphUtils, canvasHandlerFactories, canvasCommandFactories, selectionControl, view); } @Test public void checkGetCanvasHandlerWhenSatisfied() { checkCanvasHandler(false, (c) -> { assertTrue(c instanceof SessionPreviewCanvasHandlerProxy); assertEquals(((SessionPreviewCanvasHandlerProxy) c).getWrapped(), customCanvasHandlerImplementation); }); } @Test public void checkGetCanvasHandlerWhenUnsatisfied() { checkCanvasHandler(true, (c) -> { assertTrue(c instanceof SessionPreviewCanvasHandlerProxy); assertEquals(((SessionPreviewCanvasHandlerProxy) c).getWrapped(), defaultCanvasHandlerImplementation); }); } private void checkCanvasHandler(final boolean isQualifierUnsatisfied, final Consumer<AbstractCanvasHandler> assertion) { when(customCanvasHandlerInstance.isUnsatisfied()).thenReturn(isQualifierUnsatisfied); preview.open(session, callback); final AbstractCanvasHandler handler = preview.getCanvasHandler(); assertion.accept(handler); } @Test public void checkGetCanvasCommandFactoryWhenSatisfied() { checkCanvasFactory(false, (c) -> assertEquals(customCanvasCommandFactoryImplementation, c)); } @Test public void checkGetCanvasCommandFactoryWhenUnsatisfied() { checkCanvasFactory(true, (c) -> assertEquals(defaultCanvasCommandFactoryImplementation, c)); } private void checkCanvasFactory(final boolean isQualifierUnsatisfied, final Consumer<CanvasCommandFactory> assertion) { when(customCanvasCommandFactoryInstance.isUnsatisfied()).thenReturn(isQualifierUnsatisfied); preview.open(session, callback); final CanvasCommandFactory factory = preview.getCanvasCommandFactory(); assertion.accept(factory); } }