/*
* 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.widgets;
import java.util.HashMap;
import org.guvnor.common.services.project.model.HasListFormComboPanelProperties;
import org.junit.Before;
import org.junit.Test;
import org.kie.workbench.common.widgets.client.popups.text.FormPopup;
import org.kie.workbench.common.widgets.client.popups.text.PopupSetFieldCommand;
import org.mockito.ArgumentCaptor;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
public class ListFormComboPanelTest {
private ListFormComboPanel<HasListFormComboPanelProperties> panel;
private ListFormComboPanelView view;
private ListFormComboPanelView.Presenter presenter;
private Form form;
private FormPopup namePopup;
private HashMap<String, HasListFormComboPanelProperties> items;
@Before
public void setUp() throws Exception {
view = mock(ListFormComboPanelView.class);
form = mock(Form.class);
namePopup = mock(FormPopup.class);
panel = new ListFormComboPanel<HasListFormComboPanelProperties>(view, form, namePopup) {
@Override
protected HasListFormComboPanelProperties createNew(String name) {
return newItem(name);
}
};
items = new HashMap<String, HasListFormComboPanelProperties>();
presenter = panel;
panel.setItems(items);
}
@Test
public void testDefault() throws Exception {
items.put("a", createItem("a", false));
items.put("b", createItem("b", true));
items.put("c", createItem("c", false));
presenter.onSelect("a");
presenter.onSelect("b");
presenter.onSelect("c");
verify(view, times(2)).enableMakeDefault();
verify(view).disableMakeDefault();
}
@Test
public void testAddNew() throws Exception {
addItem("kbase1");
verify(view).addItem("kbase1");
ArgumentCaptor<HasListFormComboPanelProperties> propertiesArgumentCaptor = ArgumentCaptor.forClass(HasListFormComboPanelProperties.class);
verify(form).setModel(propertiesArgumentCaptor.capture());
assertEquals("kbase1", propertiesArgumentCaptor.getValue().getName());
verify(view).enableItemEditingButtons();
verify(view).enableMakeDefault();
verify(view).setSelected("kbase1");
assertTrue(items.containsKey("kbase1"));
}
@Test
public void testAddNewInvalidName() throws Exception {
addItem("123kbase");
verify(view).showXsdIDError();
verify(view, never()).addItem("kbase1");
verify(form, never()).setModel(any());
verify(view, never()).enableItemEditingButtons();
verify(view, never()).enableMakeDefault();
assertFalse(items.containsKey("123kbase1"));
}
@Test
public void testDelete() throws Exception {
items.put("kbase", newItem("kbase"));
presenter.onSelect("kbase");
presenter.onRemove();
verify(view).disableMakeDefault();
verify(view).disableItemEditingButtons();
verify(view).remove("kbase");
verify(form).clear();
verify(form).makeReadOnly();
assertTrue(items.isEmpty());
}
@Test
public void testRename() throws Exception {
items.put("kbase", newItem("kbase"));
presenter.onSelect("kbase");
presenter.onRename();
ArgumentCaptor<PopupSetFieldCommand> commandArgumentCaptor = ArgumentCaptor.forClass(PopupSetFieldCommand.class);
verify(namePopup).show(commandArgumentCaptor.capture());
commandArgumentCaptor.getValue().setName("my_kbase");
assertFalse(items.containsKey("kbase1"));
assertTrue(items.containsKey("my_kbase"));
}
@Test
public void testRenameInvalidName() throws Exception {
items.put("kbase", newItem("kbase"));
presenter.onSelect("kbase");
presenter.onRename();
ArgumentCaptor<PopupSetFieldCommand> commandArgumentCaptor = ArgumentCaptor.forClass(PopupSetFieldCommand.class);
verify(namePopup).show(commandArgumentCaptor.capture());
commandArgumentCaptor.getValue().setName("123kbase");
verify(view).showXsdIDError();
assertTrue(items.containsKey("kbase"));
assertFalse(items.containsKey("my_kbase"));
}
private void addItem(String kbaseName) {
presenter.onAdd();
ArgumentCaptor<PopupSetFieldCommand> commandArgumentCaptor = ArgumentCaptor.forClass(PopupSetFieldCommand.class);
verify(namePopup).show(commandArgumentCaptor.capture());
commandArgumentCaptor.getValue().setName(kbaseName);
}
private HasListFormComboPanelProperties createItem(final String name, final boolean b) {
HasListFormComboPanelProperties item = new HasListFormComboPanelProperties() {
String theName;
boolean theDefault;
@Override
public String getName() {
return theName;
}
@Override
public void setName(String theName) {
this.theName = theName;
}
@Override
public boolean isDefault() {
return theDefault;
}
@Override
public void setDefault(boolean theDefault) {
this.theDefault = theDefault;
}
};
item.setName(name);
item.setDefault(b);
return item;
}
private HasListFormComboPanelProperties newItem(String name) {
HasListFormComboPanelProperties result = new HasListFormComboPanelProperties() {
String name;
boolean isDefault;
@Override public String getName() {
return name;
}
@Override public void setName(String name) {
this.name = name;
}
@Override public boolean isDefault() {
return isDefault;
}
@Override public void setDefault(boolean theDefault) {
isDefault = theDefault;
}
};
result.setName(name);
return result;
}
}