/* * Copyright 2013 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.screens.projecteditor.client.forms.dependencies; import java.util.HashSet; import org.guvnor.common.services.project.model.Dependency; import org.guvnor.common.services.project.model.GAV; import org.guvnor.common.services.project.model.POM; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.kie.workbench.common.screens.projecteditor.client.forms.GAVSelectionHandler; import org.kie.workbench.common.services.shared.dependencies.EnhancedDependencies; import org.kie.workbench.common.services.shared.dependencies.NormalEnhancedDependency; import org.kie.workbench.common.services.shared.whitelist.WhiteList; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.uberfire.client.callbacks.Callback; import static org.junit.Assert.*; import static org.kie.workbench.common.screens.projecteditor.client.forms.DependencyTestUtils.*; import static org.mockito.Mockito.*; @RunWith( MockitoJUnitRunner.class ) public class DependencyGridTest { @Mock private DependencyGridView view; @Mock private DependencySelectorPopup dependencySelectorPopup; @Mock private NewDependencyPopup newDependencyPopup; @Mock private EnhancedDependenciesManager enhancedDependenciesManager; private DependencyGrid grid; @Before public void setUp() throws Exception { grid = new DependencyGrid( dependencySelectorPopup, newDependencyPopup, enhancedDependenciesManager, view ); } @Test public void testSetPresenter() throws Exception { verify( view ).setPresenter( grid ); } @Test public void testSetEnhancedDependencies() throws Exception { grid.setDependencies( new POM(), new WhiteList() ); ArgumentCaptor<Callback> callbackArgumentCaptor = ArgumentCaptor.forClass( Callback.class ); verify( enhancedDependenciesManager ).init( any( POM.class ), callbackArgumentCaptor.capture() ); final EnhancedDependencies enhancedDependencies = new EnhancedDependencies(); callbackArgumentCaptor.getValue().callback( enhancedDependencies ); verify( view ).hideBusyIndicator(); verify( view ).show( enhancedDependencies ); } @Test public void testShow() throws Exception { grid.show(); verify( enhancedDependenciesManager ).update(); } @Test public void testRemove() throws Exception { final NormalEnhancedDependency dependency = new NormalEnhancedDependency( makeDependency( "org.drools", "guvnor", "1.2", "compile" ), new HashSet<>( )); grid.onRemoveDependency( dependency ); verify( enhancedDependenciesManager ).delete( dependency ); } @Test public void testSetWhiteList() throws Exception { final WhiteList whiteList = new WhiteList(); grid.setDependencies( new POM(), whiteList ); verify( view ).setWhiteList( whiteList ); } @Test public void testShowDeps() throws Exception { final POM pom = new POM(); pom.getDependencies().add( makeDependency( "org.drools", "drools-core", "1.2", "compile" ) ); grid.setDependencies( pom, new WhiteList() ); verify( enhancedDependenciesManager ).init( eq( pom ), any( Callback.class ) ); } @Test public void testAdd() throws Exception { grid.onAddDependency(); final Dependency dependency = userCreatesANewDependencyUsingPopup(); verify( enhancedDependenciesManager ).addNew( dependency ); } private Dependency userCreatesANewDependencyUsingPopup() { ArgumentCaptor<Callback> callbackArgumentCaptor = ArgumentCaptor.forClass( Callback.class ); verify( newDependencyPopup ).show( callbackArgumentCaptor.capture() ); final Dependency dependency = new Dependency(); callbackArgumentCaptor.getValue().callback( dependency ); return dependency; } @Test public void testAddFromRepositoryPopupOpens() throws Exception { grid.onAddDependencyFromRepository(); verify( dependencySelectorPopup ).show(); } @Test public void testAddFromRepository() throws Exception { ArgumentCaptor<GAVSelectionHandler> gavSelectionHandlerArgumentCaptor = ArgumentCaptor.forClass( GAVSelectionHandler.class ); verify( dependencySelectorPopup ).addSelectionHandler( gavSelectionHandlerArgumentCaptor.capture() ); GAVSelectionHandler gavSelectionHandler = gavSelectionHandlerArgumentCaptor.getValue(); final GAV gav = new GAV( "junit", "junit", "4.11" ); gavSelectionHandler.onSelection( gav ); ArgumentCaptor<Dependency> dependencyArgumentCaptor = ArgumentCaptor.forClass( Dependency.class ); verify( enhancedDependenciesManager ).addNew( dependencyArgumentCaptor.capture() ); final Dependency dependency = dependencyArgumentCaptor.getValue(); assertTrue( dependency.isGAVEqual( gav ) ); assertEquals( "compile", dependency.getScope() ); } @Test public void testUpdateViewAfterWhiteListChange() throws Exception { grid.setDependencies( new POM(), new WhiteList() ); grid.onAddAll( new HashSet<>() ); verify( view ).redraw(); } @Test public void testAddPackagesToWhiteList() throws Exception { final WhiteList whiteList = new WhiteList(); grid.setDependencies( new POM(), whiteList ); final HashSet<String> packages = new HashSet<String>(); packages.add( "org.drools" ); packages.add( "org.guvnor" ); assertEquals( 0, whiteList.size() ); grid.onAddAll( packages ); assertEquals( 2, whiteList.size() ); } @Test public void testRemovePackagesFromWhiteList() throws Exception { final WhiteList whiteList = new WhiteList(); whiteList.add( "org.drools" ); whiteList.add( "org.guvnor" ); grid.setDependencies( new POM(), whiteList ); final HashSet<String> packages = new HashSet<String>(); packages.add( "org.drools" ); packages.add( "org.guvnor" ); assertEquals( 2, whiteList.size() ); grid.onRemoveAll( packages ); assertEquals( 0, whiteList.size() ); } }