/* * 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.kie.workbench.common.screens.examples.client.wizard.pages.organizationalunit; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.enterprise.event.Event; import org.gwtbootstrap3.client.ui.constants.ValidationState; import org.jboss.errai.common.client.api.Caller; import org.jboss.errai.ui.client.local.spi.TranslationService; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.kie.workbench.common.screens.examples.client.wizard.model.ExamplesWizardModel; import org.kie.workbench.common.screens.examples.model.ExampleOrganizationalUnit; import org.kie.workbench.common.screens.examples.model.ExampleTargetRepository; import org.kie.workbench.common.screens.examples.service.ExamplesService; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.Spy; import org.mockito.runners.MockitoJUnitRunner; import org.uberfire.client.callbacks.Callback; import org.uberfire.ext.widgets.core.client.wizards.WizardPageStatusChangeEvent; import org.uberfire.mocks.CallerMock; import org.uberfire.mocks.EventSourceMock; import static org.junit.Assert.*; import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) public class OUPageTest { private static final String EXAMPLE_REPOSITORY = "https://github.com/guvnorngtestuser1/guvnorng-playground.git"; @Mock private OUPageView view; @Mock private TranslationService translator; private ExamplesService examplesService = mock( ExamplesService.class ); private Caller<ExamplesService> examplesServiceCaller = new CallerMock<ExamplesService>( examplesService ); @Spy private Event<WizardPageStatusChangeEvent> pageStatusChangedEvent = new EventSourceMock<WizardPageStatusChangeEvent>() { @Override public void fire( final WizardPageStatusChangeEvent event ) { //Do nothing. Default implementation throws an exception. } }; @Captor private ArgumentCaptor<List<ExampleOrganizationalUnit>> organizationalUnitsArgumentCaptor; @Captor private ArgumentCaptor<ExampleOrganizationalUnit> organizationalUnitArgumentCaptor; private OUPage page; private ExamplesWizardModel model; @Before public void setup() { page = new OUPage( view, translator, examplesServiceCaller, pageStatusChangedEvent ); model = new ExamplesWizardModel(); page.setModel( model ); } @Test public void testInit() { page.init(); verify( view, times( 1 ) ).init( eq( page ) ); verify( view, times( 1 ) ).setTargetRepositoryPlaceHolder( any( String.class ) ); verify( view, times( 1 ) ).setOrganizationalUnitsPlaceHolder( any( String.class ) ); } @Test public void testInitialise() { page.initialise(); verify( view, times( 1 ) ).initialise(); } @Test public void testAsWidget() { page.asWidget(); verify( view, times( 1 ) ).asWidget(); } @Test public void testSetOrganizationalUnits_Null() { page.setOrganizationalUnits( null ); verify( view, times( 1 ) ).setOrganizationalUnits( eq( Collections.<ExampleOrganizationalUnit>emptyList() ) ); } @Test public void testSetOrganizationalUnits_Empty() { page.setOrganizationalUnits( Collections.<ExampleOrganizationalUnit>emptySet() ); verify( view, times( 1 ) ).setOrganizationalUnits( eq( Collections.<ExampleOrganizationalUnit>emptyList() ) ); } @Test public void testSetOrganizationalUnits() { final Set<ExampleOrganizationalUnit> organizationalUnits = new HashSet<ExampleOrganizationalUnit>() {{ add( new ExampleOrganizationalUnit( "ou1" ) ); add( new ExampleOrganizationalUnit( "ou2" ) ); }}; page.setOrganizationalUnits( organizationalUnits ); verify( view, times( 1 ) ).setOrganizationalUnits(organizationalUnitsArgumentCaptor.capture() ); verify( view, times( 1 ) ).setOrganizationalUnit(organizationalUnitArgumentCaptor.capture() ); final List<ExampleOrganizationalUnit> sortedOrganizationalUnits = organizationalUnitsArgumentCaptor.getValue(); final ExampleOrganizationalUnit selectedOrganizationalUnit = organizationalUnitArgumentCaptor.getValue(); assertEquals(sortedOrganizationalUnits.get( 0 ).getName(), selectedOrganizationalUnit.getName()); assertNotNull( sortedOrganizationalUnits ); assertEquals( 2, sortedOrganizationalUnits.size() ); assertEquals( "ou1", sortedOrganizationalUnits.get( 0 ).getName() ); assertEquals( "ou2", sortedOrganizationalUnits.get( 1 ).getName() ); } @Test public void testSetOrganizationalUnits_Custom() { final Set<ExampleOrganizationalUnit> organizationalUnits = new HashSet<ExampleOrganizationalUnit>() {{ add( new ExampleOrganizationalUnit( "ou1" ) ); add( new ExampleOrganizationalUnit( "ou2" ) ); }}; model.setTargetOrganizationalUnit(new ExampleOrganizationalUnit( "ou2" )); page.setOrganizationalUnits( organizationalUnits ); verify( view, times( 1 ) ).setOrganizationalUnits(organizationalUnitsArgumentCaptor.capture() ); verify( view, times( 1 ) ).setOrganizationalUnit(organizationalUnitArgumentCaptor.capture() ); final List<ExampleOrganizationalUnit> sortedOrganizationalUnits = organizationalUnitsArgumentCaptor.getValue(); final ExampleOrganizationalUnit selectedOrganizationalUnit = organizationalUnitArgumentCaptor.getValue(); assertEquals(sortedOrganizationalUnits.get( 1 ).getName(), selectedOrganizationalUnit.getName()); assertNotNull( sortedOrganizationalUnits ); assertEquals( 2, sortedOrganizationalUnits.size() ); assertEquals( "ou1", sortedOrganizationalUnits.get( 0 ).getName() ); assertEquals( "ou2", sortedOrganizationalUnits.get( 1 ).getName() ); } @Test public void testSetTargetRepository() { page.setTargetRepository( new ExampleTargetRepository( "target" ) ); verify( pageStatusChangedEvent, times( 1 ) ).fire( any( WizardPageStatusChangeEvent.class ) ); } @Test public void testSetTargetOrganizationalUnit() { page.setTargetOrganizationalUnit( new ExampleOrganizationalUnit( "ou1" ) ); verify( pageStatusChangedEvent, times( 1 ) ).fire( any( WizardPageStatusChangeEvent.class ) ); } @Test @SuppressWarnings("unchecked") public void testIsComplete_NullOU_NullRepository() { final Callback<Boolean> callback = mock( Callback.class ); page.isComplete( callback ); verify( callback, times( 1 ) ).callback( eq( false ) ); verify( view, times( 1 ) ).setTargetRepositoryGroupType( eq( ValidationState.ERROR ) ); verify( view, times( 1 ) ).showTargetRepositoryHelpMessage( any( String.class ) ); verify( view, times( 1 ) ).setTargetOrganizationalUnitGroupType( eq( ValidationState.ERROR ) ); verify( view, times( 1 ) ).showTargetOrganizationalUnitHelpMessage( any( String.class ) ); verify( examplesService, never() ).validateRepositoryName( any( String.class ) ); } @Test @SuppressWarnings("unchecked") public void testIsComplete_EmptyOU_NullRepository() { model.setTargetOrganizationalUnit( new ExampleOrganizationalUnit( "" ) ); final Callback<Boolean> callback = mock( Callback.class ); page.isComplete( callback ); verify( callback, times( 1 ) ).callback( eq( false ) ); verify( view, times( 1 ) ).setTargetRepositoryGroupType( eq( ValidationState.ERROR ) ); verify( view, times( 1 ) ).showTargetRepositoryHelpMessage( any( String.class ) ); verify( view, times( 1 ) ).setTargetOrganizationalUnitGroupType( eq( ValidationState.ERROR ) ); verify( view, times( 1 ) ).showTargetOrganizationalUnitHelpMessage( any( String.class ) ); verify( examplesService, never() ).validateRepositoryName( any( String.class ) ); } @Test @SuppressWarnings("unchecked") public void testIsComplete_ValidOU_NullRepository() { model.setTargetOrganizationalUnit( new ExampleOrganizationalUnit( "demo" ) ); final Callback<Boolean> callback = mock( Callback.class ); page.isComplete( callback ); verify( callback, times( 1 ) ).callback( eq( false ) ); verify( view, times( 1 ) ).setTargetRepositoryGroupType( eq( ValidationState.ERROR ) ); verify( view, times( 1 ) ).showTargetRepositoryHelpMessage( any( String.class ) ); verify( view, times( 1 ) ).setTargetOrganizationalUnitGroupType( eq( ValidationState.NONE ) ); verify( view, times( 1 ) ).hideTargetOrganizationalUnitHelpMessage(); verify( examplesService, never() ).validateRepositoryName( any( String.class ) ); } @Test @SuppressWarnings("unchecked") public void testIsComplete_ValidOU_EmptyRepository() { model.setTargetRepository( new ExampleTargetRepository( "" ) ); model.setTargetOrganizationalUnit( new ExampleOrganizationalUnit( "demo" ) ); final Callback<Boolean> callback = mock( Callback.class ); page.isComplete( callback ); verify( callback, times( 1 ) ).callback( eq( false ) ); verify( view, times( 1 ) ).setTargetRepositoryGroupType( eq( ValidationState.ERROR ) ); verify( view, times( 1 ) ).showTargetRepositoryHelpMessage( any( String.class ) ); verify( view, times( 1 ) ).setTargetOrganizationalUnitGroupType( eq( ValidationState.NONE ) ); verify( view, times( 1 ) ).hideTargetOrganizationalUnitHelpMessage(); verify( examplesService, never() ).validateRepositoryName( any( String.class ) ); } @Test @SuppressWarnings("unchecked") public void testIsComplete_ValidOU_InvalidRepository() { model.setTargetRepository( new ExampleTargetRepository( "%$£" ) ); model.setTargetOrganizationalUnit( new ExampleOrganizationalUnit( "demo" ) ); when( examplesService.validateRepositoryName( any( String.class ) ) ).thenReturn( false ); final Callback<Boolean> callback = mock( Callback.class ); page.isComplete( callback ); verify( callback, times( 1 ) ).callback( eq( false ) ); verify( view, times( 1 ) ).setTargetRepositoryGroupType( eq( ValidationState.ERROR ) ); verify( view, times( 1 ) ).showTargetRepositoryHelpMessage( any( String.class ) ); verify( view, times( 1 ) ).setTargetOrganizationalUnitGroupType( eq( ValidationState.NONE ) ); verify( view, times( 1 ) ).hideTargetOrganizationalUnitHelpMessage(); verify( examplesService, times( 1 ) ).validateRepositoryName( any( String.class ) ); } @Test @SuppressWarnings("unchecked") public void testIsComplete_ValidOU_ValidRepository() { model.setTargetRepository( new ExampleTargetRepository( "target" ) ); model.setTargetOrganizationalUnit( new ExampleOrganizationalUnit( "demo" ) ); when( examplesService.validateRepositoryName( any( String.class ) ) ).thenReturn( true ); final Callback<Boolean> callback = mock( Callback.class ); page.isComplete( callback ); verify( callback, times( 1 ) ).callback( eq( true ) ); verify( view, times( 1 ) ).setTargetRepositoryGroupType( eq( ValidationState.NONE ) ); verify( view, times( 1 ) ).hideTargetRepositoryHelpMessage(); verify( view, times( 1 ) ).setTargetOrganizationalUnitGroupType( eq( ValidationState.NONE ) ); verify( view, times( 1 ) ).hideTargetOrganizationalUnitHelpMessage(); verify( examplesService, times( 1 ) ).validateRepositoryName( any( String.class ) ); } }