/* * 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.server.management.client.remote; import java.util.Collections; import java.util.List; import javax.enterprise.event.Event; import org.jboss.errai.common.client.api.Caller; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.kie.server.api.model.Message; import org.kie.server.controller.api.model.events.ServerInstanceUpdated; import org.kie.server.controller.api.model.runtime.Container; import org.kie.server.controller.api.model.runtime.ServerInstance; import org.kie.server.controller.api.model.runtime.ServerInstanceKey; import org.kie.workbench.common.screens.server.management.client.events.ServerInstanceSelected; import org.kie.workbench.common.screens.server.management.client.remote.empty.RemoteEmptyPresenter; import org.kie.workbench.common.screens.server.management.client.remote.empty.RemoteEmptyView; import org.kie.workbench.common.screens.server.management.service.RuntimeManagementService; import org.kie.workbench.common.screens.server.management.service.SpecManagementService; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.Spy; import org.mockito.runners.MockitoJUnitRunner; import org.slf4j.Logger; import org.uberfire.mocks.CallerMock; import org.uberfire.mocks.EventSourceMock; import org.uberfire.workbench.events.NotificationEvent; import static org.junit.Assert.*; import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) public class RemotePresenterTest { @Mock Logger logger; @Mock RemoteStatusPresenter remoteStatusPresenter; @Mock RemoteEmptyPresenter remoteEmptyPresenter; Caller<RuntimeManagementService> runtimeManagementServiceCaller; @Mock RuntimeManagementService runtimeManagementService; Caller<SpecManagementService> specManagementServiceCaller; @Mock SpecManagementService specManagementService; @Spy Event<NotificationEvent> notification = new EventSourceMock<NotificationEvent>(); @Mock RemotePresenter.View view; RemotePresenter presenter; @Before public void setup() { runtimeManagementServiceCaller = new CallerMock<RuntimeManagementService>( runtimeManagementService ); specManagementServiceCaller = new CallerMock<SpecManagementService>( specManagementService ); doNothing().when( notification ).fire( any( NotificationEvent.class ) ); presenter = new RemotePresenter( logger, view, remoteStatusPresenter, remoteEmptyPresenter, runtimeManagementServiceCaller, specManagementServiceCaller, notification ); } @Test public void testInit() { presenter.init(); verify( view ).init( presenter ); assertEquals( view, presenter.getView() ); } @Test public void testRemove() { final ServerInstanceKey serverInstanceKey = new ServerInstanceKey( "templateId", "serverName", "serverInstanceId", "url" ); presenter.onSelect( new ServerInstanceSelected( serverInstanceKey ) ); presenter.remove(); verify( specManagementService ).deleteServerInstance( serverInstanceKey ); verify( notification ).fire( any( NotificationEvent.class ) ); } @Test public void testRemoveError() { final ServerInstanceKey serverInstanceKey = new ServerInstanceKey( "templateId", "serverName", "serverInstanceId", "url" ); presenter.onSelect( new ServerInstanceSelected( serverInstanceKey ) ); doThrow( new RuntimeException() ).when( specManagementService ).deleteServerInstance( serverInstanceKey ); presenter.remove(); final ArgumentCaptor<NotificationEvent> notificationCaptor = ArgumentCaptor.forClass( NotificationEvent.class ); verify( notification ).fire( notificationCaptor.capture() ); assertEquals( NotificationEvent.NotificationType.ERROR, notificationCaptor.getValue().getType() ); } @Test public void testSelectAndRefresh() { final ServerInstanceKey serverInstanceKey = new ServerInstanceKey( "templateId", "serverName", "serverInstanceId", "url" ); final Container container = new Container( "containerSpecId", "containerName", serverInstanceKey, Collections.<Message>emptyList(), null, null ); final List<Container> containers = Collections.singletonList( container ); when( runtimeManagementService.getContainersByServerInstance( serverInstanceKey.getServerTemplateId(), serverInstanceKey.getServerInstanceId() ) ).thenReturn( containers ); presenter.onSelect( new ServerInstanceSelected( serverInstanceKey ) ); verify( view ).clear(); verify( view ).setServerName( serverInstanceKey.getServerName() ); verify( view ).setServerURL( serverInstanceKey.getUrl() ); verify( remoteStatusPresenter ).setup( containers ); verify( view ).setStatusPresenter( remoteStatusPresenter.getView() ); } @Test public void testSelectAndRefreshEmptyContainers() { final ServerInstanceKey serverInstanceKey = new ServerInstanceKey( "templateId", "serverName", "serverInstanceId", "url" ); when( runtimeManagementService.getContainersByServerInstance( serverInstanceKey.getServerTemplateId(), serverInstanceKey.getServerInstanceId() ) ).thenReturn( Collections.<Container>emptyList() ); presenter.onSelect( new ServerInstanceSelected( serverInstanceKey ) ); verify( view ).clear(); verify( view ).setServerName( serverInstanceKey.getServerName() ); verify( view ).setServerURL( serverInstanceKey.getUrl() ); verify( view ).setEmptyView( remoteEmptyPresenter.getView() ); } @Test public void testOnInstanceUpdate() { final ServerInstance serverInstance = new ServerInstance( "templateId", "serverName", "serverInstanceId", "url", "1.0", Collections.<Message>emptyList(), Collections.<Container>emptyList() ); presenter.onSelect( new ServerInstanceSelected( serverInstance ) ); presenter.onInstanceUpdate( new ServerInstanceUpdated( serverInstance ) ); verify( view, times( 2 ) ).clear(); verify( view, times( 2 ) ).setServerName( serverInstance.getServerName() ); verify( view, times( 2 ) ).setServerURL( serverInstance.getUrl() ); verify( view, times( 2 ) ).setEmptyView( remoteEmptyPresenter.getView() ); } @Test public void testOnInstanceUpdateDifferentServer() { final ServerInstance serverInstance = new ServerInstance( "templateId", "serverName", "serverInstanceId", "url", "1.0", Collections.<Message>emptyList(), Collections.<Container>emptyList() ); presenter.onSelect( new ServerInstanceSelected( serverInstance ) ); final ServerInstance serverInstance2 = new ServerInstance( "templateId2", "serverName2", "serverInstanceId2", "url", "1.0", Collections.<Message>emptyList(), Collections.<Container>emptyList() ); presenter.onInstanceUpdate( new ServerInstanceUpdated( serverInstance2 ) ); verify( view ).clear(); verify( view ).setServerName( serverInstance.getServerName() ); verify( view ).setServerURL( serverInstance.getUrl() ); verify( view ).setEmptyView( remoteEmptyPresenter.getView() ); } @Test public void testOnInstanceUpdateWithoutSelect() { final ServerInstance serverInstance = new ServerInstance( "templateId", "serverName", "serverInstanceId", "url", "1.0", Collections.<Message>emptyList(), Collections.<Container>emptyList() ); presenter.onInstanceUpdate( new ServerInstanceUpdated( serverInstance ) ); verify( view, never() ).clear(); verify( view, never() ).setServerName( anyString() ); verify( view, never() ).setServerURL( anyString() ); verify( view, never() ).setEmptyView( any(RemoteEmptyView.class) ); } }