/*
* Copyright 2012 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;
import org.kie.workbench.common.services.shared.kmodule.KBaseModel;
import org.kie.workbench.common.services.shared.kmodule.KModuleModel;
import org.junit.Before;
import org.junit.Test;
import org.kie.workbench.common.screens.projecteditor.client.widgets.ListFormComboPanelView;
import org.kie.workbench.common.widgets.client.popups.text.PopupSetFieldCommand;
import org.kie.workbench.common.widgets.client.popups.text.TextBoxFormPopup;
import org.mockito.ArgumentCaptor;
import static junit.framework.Assert.*;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.*;
public class KModuleEditorPanelTest {
private KModuleEditorPanelView view;
private KModuleEditorPanel screenK;
private ListFormComboPanelView.Presenter presenter;
private TextBoxFormPopup nameNamePopup;
private KBaseForm form;
@Before
public void setUp() throws Exception {
view = mock(KModuleEditorPanelView.class);
nameNamePopup = mock(TextBoxFormPopup.class);
form = mock(KBaseForm.class);
screenK = new KModuleEditorPanel( form, nameNamePopup, view);
presenter = screenK;
}
@Test
public void testShowEmptyModel() throws Exception {
verify(view, never()).addItem(anyString());
}
@Test
public void testShowModelWithSessions() throws Exception {
KModuleModel kModuleModel = new KModuleModel();
kModuleModel.add(createKBaseConfiguration("First"));
kModuleModel.add(createKBaseConfiguration("Second"));
kModuleModel.add(createKBaseConfiguration("Third"));
screenK.setData(kModuleModel, false);
verify(view).addItem("First");
verify(view).addItem("Second");
verify(view).addItem("Third");
verify(view, times(3)).addItem(anyString());
}
@Test
public void testSelectKBase() throws Exception {
KModuleModel kModuleModel = new KModuleModel();
KBaseModel theOne = createKBaseConfiguration("TheOne");
kModuleModel.add(theOne);
screenK.setData(kModuleModel, false);
presenter.onSelect("TheOne");
verify(form).setModel(theOne);
}
@Test
public void testAddKBase() throws Exception {
KModuleModel kModuleModel = new KModuleModel();
screenK.setData(kModuleModel, false);
presenter.onAdd();
ArgumentCaptor<PopupSetFieldCommand> addKBaseCommandArgumentCaptor = ArgumentCaptor.forClass(PopupSetFieldCommand.class);
verify(nameNamePopup).show(addKBaseCommandArgumentCaptor.capture());
addKBaseCommandArgumentCaptor.getValue().setName("TheOne");
verify(nameNamePopup).setOldName(""); // Old name should be "" since there is no old name.
assertNotNull(kModuleModel.get("TheOne"));
verify(view).addItem("TheOne");
verify(view).setSelected("TheOne");
verify(form).setModel(kModuleModel.get("TheOne"));
}
@Test
public void testRemoveKBase() throws Exception {
KModuleModel kModuleModel = new KModuleModel();
kModuleModel.add(createKBaseConfiguration("RemoveMe"));
screenK.setData(kModuleModel, false);
presenter.onSelect("RemoveMe");
presenter.onRemove();
assertNull(kModuleModel.get("RemoveMe"));
verify(view).remove("RemoveMe");
}
@Test
public void testRename() throws Exception {
KModuleModel kModuleModel = new KModuleModel();
kModuleModel.add(createKBaseConfiguration("RenameMe"));
screenK.setData(kModuleModel, false);
presenter.onSelect("RenameMe");
presenter.onRename();
ArgumentCaptor<PopupSetFieldCommand> addKBaseCommandArgumentCaptor = ArgumentCaptor.forClass(PopupSetFieldCommand.class);
verify(nameNamePopup).show(addKBaseCommandArgumentCaptor.capture());
addKBaseCommandArgumentCaptor.getValue().setName("NewName");
verify(nameNamePopup).setOldName("RenameMe");
assertNull(kModuleModel.get("RenameMe"));
assertNotNull(kModuleModel.get("NewName"));
}
@Test
public void testRemoveKBaseNoItemSelected() throws Exception {
KModuleModel kModuleModel = new KModuleModel();
kModuleModel.add(createKBaseConfiguration("CantRemoveMe"));
screenK.setData(kModuleModel, false);
presenter.onRemove();
verify(view).showPleaseSelectAnItem();
assertNotNull(kModuleModel.get("CantRemoveMe"));
verify(view, never()).remove("CantRemoveMe");
}
@Test
public void testDoubleClickRemoveSecondTimeWithoutATarget() throws Exception {
KModuleModel kModuleModel = new KModuleModel();
kModuleModel.add(createKBaseConfiguration("RemoveMe"));
kModuleModel.add(createKBaseConfiguration("CantRemoveMe"));
screenK.setData(kModuleModel, false);
// Select one and remove.
presenter.onSelect("RemoveMe");
presenter.onRemove();
// Click again, nothing is selected.
presenter.onRemove();
verify(view).showPleaseSelectAnItem();
assertNotNull(kModuleModel.get("CantRemoveMe"));
verify(view, never()).remove("CantRemoveMe");
}
private KBaseModel createKBaseConfiguration(String name) {
KBaseModel knowledgeBaseConfiguration = new KBaseModel();
knowledgeBaseConfiguration.setName(name);
return knowledgeBaseConfiguration;
}
}