/* * 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.widgets.client.widget; import java.util.List; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.kie.workbench.common.services.shared.kmodule.KBaseModel; import org.kie.workbench.common.services.shared.kmodule.KModuleModel; import org.kie.workbench.common.services.shared.kmodule.KModuleService; import org.kie.workbench.common.services.shared.kmodule.KSessionModel; import org.kie.workbench.common.services.shared.project.KieProject; import org.kie.workbench.common.services.shared.project.KieProjectService; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.uberfire.backend.vfs.Path; import org.uberfire.mocks.CallerMock; import org.uberfire.mvp.Command; import static org.junit.Assert.*; import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) public class KSessionSelectorTest { @Mock private Path path; @Mock private Path kmodulePath; private KieProject kieProject; @Mock private KieProjectService kieProjectService; @Mock private KModuleService kModuleService; private KSessionSelector selector; private KSessionSelectorView view; private KModuleModel kModule; @Before public void setUp() throws Exception { kieProject = spy(new KieProject()); when(kieProject.getKModuleXMLPath()).thenReturn(kmodulePath); kModule = new KModuleModel(); kModule.getKBases().put("kbase1", getKBase("kbase1", "ksession1")); kModule.getKBases().put("kbase2", getKBase("kbase2", "ksession2", "ksession3")); kModule.getKBases().put("kbase3", getKBase("kbase3")); view = mock(KSessionSelectorView.class); when(kieProjectService.resolveProject(path)).thenReturn(kieProject); when(kModuleService.load(kmodulePath)).thenReturn(kModule); selector = new KSessionSelector( view, new CallerMock<>(kieProjectService), new CallerMock<>(kModuleService)); } @Test public void testSetPresenter() throws Exception { view.setPresenter(selector); } @Test public void clearPreviousSetUp() throws Exception { selector.init(path, "first"); verify(view).clear(); selector.init(path, "second"); verify(view, times(2)).clear(); } @Test public void testSetKBaseAndKSession() throws Exception { selector.init(path, "ksession2"); ArgumentCaptor<List> listArgumentCaptor = ArgumentCaptor.forClass(List.class); verify(view).setKSessions(listArgumentCaptor.capture()); List ksessionNamesList = listArgumentCaptor.getValue(); assertEquals(2, ksessionNamesList.size()); verify(view).setSelected("kbase2", "ksession2"); } @Test public void testKBaseAndKSessionNotPreviouslySet() throws Exception { selector.init(path, null); verify(view).addKBase("kbase1"); ArgumentCaptor<List> listArgumentCaptor = ArgumentCaptor.forClass(List.class); verify(view).setKSessions(listArgumentCaptor.capture()); List ksessionNamesList = listArgumentCaptor.getValue(); assertEquals(1, ksessionNamesList.size()); verify(view).setSelected("kbase1", "ksession1"); } @Test public void testEmpty() throws Exception { // No kbases or ksessions defined in the kmodule.xml when(kModuleService.load(kmodulePath)).thenReturn(new KModuleModel()); selector.init(path, null); verify(view).addKBase("defaultKieBase"); ArgumentCaptor<List> listArgumentCaptor = ArgumentCaptor.forClass(List.class); verify(view).setKSessions(listArgumentCaptor.capture()); verify(view).setSelected(eq("defaultKieBase"), eq("defaultKieSession")); List ksessionNamesList = listArgumentCaptor.getValue(); assertEquals(1, ksessionNamesList.size()); assertEquals("defaultKieSession", ksessionNamesList.iterator().next()); } @Test public void testKSessionDefinedInScenarioNoLongerExists() throws Exception { selector.init(path, "ksessionThatHasBeenRemovedFromKModuleXML"); verify(view).addKBase("kbase1"); verify(view).addKBase("kbase2"); verify(view).addKBase("kbase3"); verify(view).addKBase("---"); ArgumentCaptor<List> listArgumentCaptor = ArgumentCaptor.forClass(List.class); verify(view).setKSessions(listArgumentCaptor.capture()); verify(view).setSelected(eq("---"), eq("ksessionThatHasBeenRemovedFromKModuleXML")); verify(view).showWarningSelectedKSessionDoesNotExist(); List ksessionNamesList = listArgumentCaptor.getValue(); assertEquals(1, ksessionNamesList.size()); assertEquals("ksessionThatHasBeenRemovedFromKModuleXML", ksessionNamesList.get(0)); } @Test public void testKSessionDefinedInScenarioNoLongerExistsAndKModuleIsEmpty() throws Exception { // No kbases or ksessions defined in the kmodule.xml when(kModuleService.load(kmodulePath)).thenReturn(new KModuleModel()); selector.init(path, "ksessionThatHasBeenRemovedFromKModuleXML"); verify(view).addKBase("defaultKieBase"); verify(view).addKBase("---"); ArgumentCaptor<List> listArgumentCaptor = ArgumentCaptor.forClass(List.class); verify(view).setKSessions(listArgumentCaptor.capture()); verify(view).setSelected(eq("---"), eq("ksessionThatHasBeenRemovedFromKModuleXML")); verify(view).showWarningSelectedKSessionDoesNotExist(); List ksessionNamesList = listArgumentCaptor.getValue(); assertEquals(1, ksessionNamesList.size()); assertEquals("ksessionThatHasBeenRemovedFromKModuleXML", ksessionNamesList.get(0)); } @Test public void testChangeSelection() throws Exception { selector.init(path, "ksessionThatHasBeenRemovedFromKModuleXML"); reset(view); selector.onKBaseSelected("kbase2"); verify(view).setSelected("kbase2", "ksession2"); } @Test public void onSelectionChange() { Command command = mock(Command.class); selector.setSelectionChangeHandler(command); selector.onSelectionChange(); verify(command, times(1)).execute(); } private KBaseModel getKBase(final String kbaseName, final String... ksessionNames) { return new KBaseModel() {{ setName(kbaseName); for (final String ksessionName : ksessionNames) { getKSessions().add(new KSessionModel() {{ setName(ksessionName); }}); } }}; } }