package de.unioninvestment.eai.portal.portlet.crud.mvp.views.ui; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.nullValue; import static org.junit.Assert.assertThat; import static org.mockito.Matchers.isA; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.LinkedHashMap; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.runners.MockitoJUnitRunner; import com.vaadin.data.Container.ItemSetChangeEvent; import com.vaadin.data.Container.ItemSetChangeListener; import com.vaadin.data.util.filter.Compare; import de.unioninvestment.eai.portal.portlet.crud.domain.events.OptionListChangeEvent; import de.unioninvestment.eai.portal.portlet.crud.domain.model.OptionList; import de.unioninvestment.eai.portal.portlet.crud.domain.model.SelectionContext; /** * Tests the behavior of {@link OptionListContainer} if the OptionList is * configured lazy. * * @author carsten.mjartan */ @RunWith(MockitoJUnitRunner.class) public class OptionListLazyContainerTest { @Mock private SelectionContext contextMock; @Mock private OptionList optionListMock; private OptionListContainer container; private LinkedHashMap<String, String> options; @Mock private ItemSetChangeListener listenerMock; @Before public void setUp() { MockitoAnnotations.initMocks(this); when(optionListMock.isLazy()).thenReturn(true); options = new LinkedHashMap<String, String>(); options.put("KEY", "TITLE"); options.put("OTHER", "OTHER"); when(optionListMock.getOptions(contextMock)).thenReturn(options); container = new OptionListContainer(optionListMock, contextMock); } @Test public void shouldReturnNotItemBeforeInitialization() { assertThat(container.getItem("KEY"), nullValue()); } @Test public void shouldReturnEmptyBeforeInitialization() { assertThat(container.size(), is(0)); } @Test public void shouldNotReturnItemPropertyBeforeInitialization() { assertThat(container.getContainerProperty("KEY", "title"), nullValue()); } @Test public void shouldNotReturnItemIDsBeforeInitialization() { assertThat(container.getItemIds().size(), is(0)); } @Test public void shouldReturnThatNothingIsContained() { assertThat(container.containsId("KEY"), is(false)); } @Test public void shouldFilterForKEY() { container.addContainerFilter(new Compare.Equal("title", "TITLE")); assertThat(container.containsId("KEY"), is(true)); assertThat(container.containsId("OTHER"), is(false)); } @Test public void shouldRemoveAllContainerFilters() { container.addContainerFilter(new Compare.Equal("title", "TITLE")); container.removeAllContainerFilters(); assertThat(container.containsId("OTHER"), is(true)); } @Test public void shouldRemoveSpecificContainerFilter() { Compare.Equal filter = new Compare.Equal("title", "TITLE"); container.addContainerFilter(filter); container.removeContainerFilter(filter); assertThat(container.containsId("OTHER"), is(true)); } @Test public void shouldRefreshOnInitializedEvent() { container.addListener(listenerMock); OptionListChangeEvent event = new OptionListChangeEvent(optionListMock, true); container.onOptionListChange(event); verify(listenerMock).containerItemSetChange( isA(ItemSetChangeEvent.class)); assertThat(container.containsId("KEY"), is(true)); } @Test public void shouldDelayRefreshIfContainerIsNotInitialized() { assertThat(container.containsId("KEY"), is(false)); OptionListChangeEvent event = new OptionListChangeEvent(optionListMock, false); container.onOptionListChange(event); assertThat(container.contentChanged, is(true)); assertThat(container.containsId("KEY"), is(true)); assertThat(container.contentChanged, is(false)); } }