/* * Zed Attack Proxy (ZAP) and its related class files. * * ZAP is an HTTP/HTTPS proxy for assessing web application security. * * Copyright 2016 The ZAP Development Team * * 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.zaproxy.zap.view.widgets; import static org.hamcrest.Matchers.arrayContaining; import static org.hamcrest.Matchers.emptyArray; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.nullValue; import static org.hamcrest.Matchers.sameInstance; import static org.junit.Assert.assertThat; import static org.mockito.BDDMockito.given; import static org.mockito.Matchers.anyObject; import static org.mockito.Matchers.anyString; import java.util.ArrayList; import java.util.List; import javax.swing.event.ListDataListener; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.MockitoAnnotations; import org.mockito.internal.util.reflection.Whitebox; import org.parosproxy.paros.Constant; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.zaproxy.zap.extension.users.UsersTableModel; import org.zaproxy.zap.users.User; import org.zaproxy.zap.utils.I18N; import org.zaproxy.zap.view.ListModelTestUtils; /** * Unit test for {@code UsersListModel}. */ @RunWith(PowerMockRunner.class) @PrepareForTest(Constant.class) public class UsersListModelUnitTest extends ListModelTestUtils { @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); mockConstantClass(); } private void mockConstantClass() { Constant constant = PowerMockito.mock(Constant.class); I18N i18n = PowerMockito.mock(I18N.class); given(i18n.getString(anyString())).willReturn(""); given(i18n.getString(anyString(), anyObject())).willReturn(""); Whitebox.setInternalState(constant, "messages", i18n); } @Test(expected = NullPointerException.class) public void shouldFailToCreateInstanceWithUndefinedUsersTableModel() { // Given UsersTableModel undefinedTableModel = null; // When UsersListModel usersListModel = new UsersListModel(undefinedTableModel); // Then = NullPointerException } @Test public void shouldAddListDataListeners() { // Given ListDataListener listener = createTestListDataListener(); UsersListModel usersListModel = new UsersListModel(createUsersTableModel(0)); // When usersListModel.addListDataListener(listener); // Then assertThat(usersListModel.getListDataListeners(), is(arrayContaining(listener))); } @Test public void shouldRemoveListDataListeners() { // Given TestListDataListener listener = createTestListDataListener(); UsersListModel usersListModel = new UsersListModel(createUsersTableModel(0)); usersListModel.addListDataListener(listener); // When usersListModel.removeListDataListener(listener); // Then assertThat(usersListModel.getListDataListeners(), is(emptyArray())); } @Test public void shouldGetNullElementIfNoTableUsersNorCustomUsers() { // Given UsersListModel usersListModel = new UsersListModel(createUsersTableModel(0)); // When User user = usersListModel.getElementAt(0); // Then assertThat(user, is(nullValue())); } @Test(expected = ArrayIndexOutOfBoundsException.class) public void shouldFailToGetCustomUserIfIndexIsMoreThanAvailableCustomUsers() { // Given UsersListModel usersListModel = new UsersListModel(createUsersTableModel(0)); usersListModel.setCustomUsers(new User[] { createUser(), createUser() }); // When User user = usersListModel.getElementAt(2); // Then = ArrayIndexOutOfBoundsException } @Test public void shouldGetTableUsers() { // Given UsersTableModel tableModel = createUsersTableModel(2); UsersListModel usersListModel = new UsersListModel(tableModel); // When User user = usersListModel.getElementAt(0); // Then assertThat(user, is(equalTo(tableModel.getUsers().get(0)))); } @Test public void shouldSetCustomUsersEvenWithoutExistingTableUsers() { // Given TestListDataListener listener = createTestListDataListener(); UsersListModel usersListModel = new UsersListModel(createUsersTableModel(0)); usersListModel.addListDataListener(listener); User customUser1 = createUser(); User customUser2 = createUser(); User[] customUsers = new User[] { customUser1, customUser2 }; // When usersListModel.setCustomUsers(customUsers); // Then assertThat(usersListModel.getElementAt(0), is(equalTo(customUser1))); assertThat(usersListModel.getElementAt(1), is(equalTo(customUser2))); assertThat(listener.getNumberOfEvents(), is(equalTo(1))); assertThat(listener.isListItemAdded(0), is(equalTo(true))); assertThat(listener.isListItemAdded(1), is(equalTo(true))); assertThat(listener.isListItemAdded(2), is(equalTo(false))); } @Test public void shouldSetCustomUsersEvenWithExistingTableUsers() { // Given TestListDataListener listener = createTestListDataListener(); UsersListModel usersListModel = new UsersListModel(createUsersTableModel(2)); usersListModel.addListDataListener(listener); User customUser1 = createUser(); User customUser2 = createUser(); User[] customUsers = new User[] { customUser1, customUser2 }; // When usersListModel.setCustomUsers(customUsers); // Then assertThat(usersListModel.getElementAt(2), is(equalTo(customUser1))); assertThat(usersListModel.getElementAt(3), is(equalTo(customUser2))); assertThat(listener.getNumberOfEvents(), is(equalTo(1))); assertThat(listener.isListItemAdded(1), is(equalTo(false))); assertThat(listener.isListItemAdded(2), is(equalTo(true))); assertThat(listener.isListItemAdded(3), is(equalTo(true))); assertThat(listener.isListItemAdded(4), is(equalTo(false))); } @Test public void shouldReplaceCustomUsersEvenWithoutExistingTableUsers() { // Given UsersListModel usersListModel = new UsersListModel(createUsersTableModel(0)); usersListModel.setCustomUsers(new User[] { createUser(), createUser(), createUser() }); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); User customUser1 = createUser(); User customUser2 = createUser(); User[] customUsers = new User[] { customUser1, customUser2 }; // When usersListModel.setCustomUsers(customUsers); // Then assertThat(usersListModel.getElementAt(0), is(equalTo(customUser1))); assertThat(usersListModel.getElementAt(1), is(equalTo(customUser2))); assertThat(listener.getNumberOfEvents(), is(equalTo(1))); assertThat(listener.isListItemChanged(0), is(equalTo(true))); assertThat(listener.isListItemChanged(1), is(equalTo(true))); assertThat(listener.isListItemChanged(2), is(equalTo(true))); } @Test public void shouldReplaceCustomUsersEvenWithExistingTableUsers() { // Given UsersListModel usersListModel = new UsersListModel(createUsersTableModel(2)); usersListModel.setCustomUsers(new User[] { createUser(), createUser(), createUser() }); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); User customUser1 = createUser(); User customUser2 = createUser(); User[] customUsers = new User[] { customUser1, customUser2 }; // When usersListModel.setCustomUsers(customUsers); // Then assertThat(usersListModel.getElementAt(2), is(equalTo(customUser1))); assertThat(usersListModel.getElementAt(3), is(equalTo(customUser2))); assertThat(listener.getNumberOfEvents(), is(equalTo(1))); assertThat(listener.isListItemChanged(1), is(equalTo(false))); assertThat(listener.isListItemChanged(2), is(equalTo(true))); assertThat(listener.isListItemChanged(3), is(equalTo(true))); assertThat(listener.isListItemChanged(4), is(equalTo(true))); } @Test public void shouldHaveNoEffectToSetNoCustomUsersIfNoneExist() { // Given UsersListModel usersListModel = new UsersListModel(createUsersTableModel(0)); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); // When usersListModel.setCustomUsers(null); // Then assertThat(listener.getNumberOfEvents(), is(equalTo(0))); } @Test public void shouldHaveNoEffectToSetNoCustomUsersIfNoneWerePreviouslySet() { // Given UsersListModel usersListModel = new UsersListModel(createUsersTableModel(0)); usersListModel.setCustomUsers(new User[] {}); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); // When usersListModel.setCustomUsers(null); // Then assertThat(listener.getNumberOfEvents(), is(equalTo(0))); } @Test public void shouldRemoveCustomUsersEvenWithoutExistingTableUsers() { // Given UsersListModel usersListModel = new UsersListModel(createUsersTableModel(0)); usersListModel.setCustomUsers(new User[] { createUser(), createUser() }); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); // When usersListModel.setCustomUsers(null); // Then assertThat(listener.getNumberOfEvents(), is(equalTo(1))); assertThat(listener.isListItemRemoved(0), is(equalTo(true))); assertThat(listener.isListItemRemoved(1), is(equalTo(true))); assertThat(listener.isListItemRemoved(2), is(equalTo(false))); } @Test public void shouldRemoveCustomUsersEvenWithExistingTableUsers() { // Given UsersListModel usersListModel = new UsersListModel(createUsersTableModel(2)); usersListModel.setCustomUsers(new User[] { createUser(), createUser() }); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); // When usersListModel.setCustomUsers(null); // Then assertThat(listener.getNumberOfEvents(), is(equalTo(1))); assertThat(listener.isListItemRemoved(1), is(equalTo(false))); assertThat(listener.isListItemRemoved(2), is(equalTo(true))); assertThat(listener.isListItemRemoved(3), is(equalTo(true))); assertThat(listener.isListItemRemoved(4), is(equalTo(false))); } @Test public void shouldRemoveCustomUsersWithEmptyArrayEvenWithExistingTableUsers() { // Given UsersListModel usersListModel = new UsersListModel(createUsersTableModel(2)); usersListModel.setCustomUsers(new User[] { createUser(), createUser() }); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); // When usersListModel.setCustomUsers(new User[] {}); // Then assertThat(listener.getNumberOfEvents(), is(equalTo(1))); assertThat(listener.isListItemRemoved(1), is(equalTo(false))); assertThat(listener.isListItemRemoved(2), is(equalTo(true))); assertThat(listener.isListItemRemoved(3), is(equalTo(true))); assertThat(listener.isListItemRemoved(4), is(equalTo(false))); } @Test public void shouldGetSizeAsNumberOfTableUsersIfNoCustomUsers() { // Given UsersListModel usersListModel = new UsersListModel(createUsersTableModel(3)); // When int size = usersListModel.getSize(); // Then assertThat(size, is(equalTo(3))); } @Test public void shouldGetSizeAsNumberOfTableUsersAndCustomUsersSet() { // Given UsersListModel usersListModel = new UsersListModel(createUsersTableModel(3)); usersListModel.setCustomUsers(new User[] { createUser(), createUser() }); // When int size = usersListModel.getSize(); // Then assertThat(size, is(equalTo(5))); } @Test public void shouldGetSizeAsNumberOfCustomUsersIfNoTableUsers() { // Given UsersListModel usersListModel = new UsersListModel(createUsersTableModel(0)); usersListModel.setCustomUsers(new User[] { createUser(), createUser() }); // When int size = usersListModel.getSize(); // Then assertThat(size, is(equalTo(2))); } @Test public void shouldGetInvalidIndexIfUserNotFound() { // Given UsersListModel usersListModel = new UsersListModel(createUsersTableModel(0)); // When int index = usersListModel.getIndexOf(createUser()); // Then assertThat(index, is(equalTo(-1))); } @Test public void shouldGetIndexOfTableUsers() { // Given UsersTableModel tableModel = createUsersTableModel(2); UsersListModel usersListModel = new UsersListModel(tableModel); // When int index = usersListModel.getIndexOf(tableModel.getUsers().get(1)); // Then assertThat(index, is(equalTo(1))); } @Test public void shouldGetIndexOfCustomUsersWithoutTableUsers() { // Given UsersListModel usersListModel = new UsersListModel(createUsersTableModel(0)); User customUser = createUser(); usersListModel.setCustomUsers(new User[] { customUser, createUser() }); // When int index = usersListModel.getIndexOf(customUser); // Then assertThat(index, is(equalTo(0))); } @Test public void shouldGetIndexOfCustomUsersWithTableUsers() { // Given UsersListModel usersListModel = new UsersListModel(createUsersTableModel(2)); User customUser = createUser(); usersListModel.setCustomUsers(new User[] { customUser, createUser() }); // When int index = usersListModel.getIndexOf(customUser); // Then assertThat(index, is(equalTo(2))); } @Test public void shouldNotHaveSelectedUserByDefault() { // Given UsersListModel usersListModel = new UsersListModel(createUsersTableModel(1)); // When Object user = usersListModel.getSelectedItem(); // Then assertThat(user, is(nullValue())); } @Test public void shouldNotSetSelectedItemIfNotFound() { // Given UsersListModel usersListModel = new UsersListModel(createUsersTableModel(0)); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); // When usersListModel.setSelectedItem(createUser()); // Then assertThat(usersListModel.getSelectedItem(), is(nullValue())); assertThat(listener.getNumberOfEvents(), is(equalTo(0))); assertThat(listener.isListItemChanged(-1), is(equalTo(false))); } @Test public void shouldNotSetSelectedItemIfNotAUser() { // Given UsersListModel usersListModel = new UsersListModel(createUsersTableModel(0)); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); // When usersListModel.setSelectedItem(new Object()); // Then assertThat(usersListModel.getSelectedItem(), is(nullValue())); assertThat(listener.getNumberOfEvents(), is(equalTo(0))); assertThat(listener.isListItemChanged(-1), is(equalTo(false))); } @Test public void shouldSetSelectedItemUser() { // Given UsersTableModel tableModel = createUsersTableModel(2); UsersListModel usersListModel = new UsersListModel(tableModel); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); // When usersListModel.setSelectedItem(tableModel.getUsers().get(1)); // Then assertThat(usersListModel.getSelectedItem(), is(equalTo((Object) tableModel.getUsers().get(1)))); assertThat(listener.getNumberOfEvents(), is(equalTo(1))); assertThat(listener.isListItemChanged(-1), is(equalTo(true))); } @Test public void shouldHaveNoEffectReselectSameUser() { // Given UsersTableModel tableModel = createUsersTableModel(2); UsersListModel usersListModel = new UsersListModel(tableModel); usersListModel.setSelectedItem(tableModel.getUsers().get(1)); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); // When usersListModel.setSelectedItem(tableModel.getUsers().get(1)); // Then assertThat(usersListModel.getSelectedItem(), is(equalTo((Object) tableModel.getUsers().get(1)))); assertThat(listener.getNumberOfEvents(), is(equalTo(0))); assertThat(listener.isListItemChanged(-1), is(equalTo(false))); } @Test public void shouldSetSelectedItemUserEvenIfOneWasPreviouslySelected() { // Given UsersTableModel tableModel = createUsersTableModel(2); UsersListModel usersListModel = new UsersListModel(tableModel); usersListModel.setSelectedItem(tableModel.getUsers().get(1)); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); // When usersListModel.setSelectedItem(tableModel.getUsers().get(0)); // Then assertThat(usersListModel.getSelectedItem(), is(equalTo((Object) tableModel.getUsers().get(0)))); assertThat(listener.getNumberOfEvents(), is(equalTo(1))); assertThat(listener.isListItemChanged(-1), is(equalTo(true))); } @Test public void shouldRemoveSelectionWithSelectedItem() { // Given UsersTableModel tableModel = createUsersTableModel(2); UsersListModel usersListModel = new UsersListModel(tableModel); usersListModel.setSelectedItem(tableModel.getUsers().get(1)); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); // When usersListModel.setSelectedItem(null); // Then assertThat(usersListModel.getSelectedItem(), is(nullValue())); assertThat(listener.getNumberOfEvents(), is(equalTo(1))); assertThat(listener.isListItemChanged(-1), is(equalTo(true))); } @Test public void shouldHaveNoEffectRemoveSelectionIfNoSelectedUser() { // Given UsersTableModel tableModel = createUsersTableModel(2); UsersListModel usersListModel = new UsersListModel(tableModel); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); // When usersListModel.setSelectedItem(null); // Then assertThat(usersListModel.getSelectedItem(), is(nullValue())); assertThat(listener.getNumberOfEvents(), is(equalTo(0))); assertThat(listener.isListItemChanged(-1), is(equalTo(false))); } @Test public void shouldRemoveSelectionIfNoUsersAndSetSelectedInternalUserIsNotFound() { // Given UsersListModel usersListModel = new UsersListModel(createUsersTableModel(0)); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); // When usersListModel.setSelectedInternalItem(createUser()); // Then assertThat(usersListModel.getSelectedItem(), is(nullValue())); assertThat(listener.getNumberOfEvents(), is(equalTo(1))); assertThat(listener.isListItemChanged(-1), is(equalTo(true))); } @Test public void shouldFallbackToFirstExistingUserIfSetSelectedInternalUserIsNotFound() { // Given UsersTableModel tableModel = createUsersTableModel(2); UsersListModel usersListModel = new UsersListModel(tableModel); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); // When usersListModel.setSelectedInternalItem(createUser()); // Then assertThat(usersListModel.getSelectedItem(), is(equalTo((Object) tableModel.getUsers().get(0)))); assertThat(listener.getNumberOfEvents(), is(equalTo(1))); assertThat(listener.isListItemChanged(-1), is(equalTo(true))); } @Test public void shouldSetSelectedInternalTableUsers() { // Given UsersTableModel tableModel = createUsersTableModel(2); UsersListModel usersListModel = new UsersListModel(tableModel); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); // When usersListModel.setSelectedInternalItem(copyUser(tableModel.getUsers().get(1))); // Then assertThat(usersListModel.getSelectedItem(), is(equalTo((Object) tableModel.getUsers().get(1)))); assertThat(listener.getNumberOfEvents(), is(equalTo(1))); assertThat(listener.isListItemChanged(-1), is(equalTo(true))); } @Test public void shouldSetSelectedInternalCustomUsersWithoutTableUsers() { // Given UsersListModel usersListModel = new UsersListModel(createUsersTableModel(0)); User customUser = createUser(); usersListModel.setCustomUsers(new User[] { customUser, createUser() }); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); // When usersListModel.setSelectedInternalItem(copyUser(customUser)); // Then assertThat(usersListModel.getSelectedItem(), is(equalTo((Object) customUser))); assertThat(listener.getNumberOfEvents(), is(equalTo(1))); assertThat(listener.isListItemChanged(-1), is(equalTo(true))); } @Test public void shouldSetSelectedInternalCustomUsersWithTableUsers() { // Given UsersListModel usersListModel = new UsersListModel(createUsersTableModel(2)); User customUser = createUser(); usersListModel.setCustomUsers(new User[] { customUser, createUser() }); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); // When usersListModel.setSelectedInternalItem(copyUser(customUser)); // Then assertThat(usersListModel.getSelectedItem(), is(equalTo((Object) customUser))); assertThat(listener.getNumberOfEvents(), is(equalTo(1))); assertThat(listener.isListItemChanged(-1), is(equalTo(true))); } // TODO test tableChanged @Test public void shouldReflectAddedTableUserAndSelectFirstTableUserIfNoneSelected() { // Given UsersTableModel tableModel = createUsersTableModel(2); UsersListModel usersListModel = new UsersListModel(tableModel); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); User user = createUser(); // When tableModel.addElement(user); // Then assertThat(usersListModel.getSize(), is(equalTo(3))); assertThat(usersListModel.getElementAt(2), is(equalTo((Object) user))); assertThat(usersListModel.getSelectedItem(), is(equalTo((Object) tableModel.getUsers().get(0)))); assertThat(listener.getNumberOfEvents(), is(equalTo(2))); assertThat(listener.isListItemAdded(2), is(equalTo(true))); assertThat(listener.isListItemChanged(-1), is(equalTo(true))); } @Test public void shouldReflectAddedTableUserAndNotSelectFirstTableUserIfOneAlreadySelected() { // Given UsersTableModel tableModel = createUsersTableModel(2); UsersListModel usersListModel = new UsersListModel(tableModel); usersListModel.setSelectedItem(tableModel.getUsers().get(0)); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); User user = createUser(); // When tableModel.addElement(user); // Then assertThat(usersListModel.getSize(), is(equalTo(3))); assertThat(usersListModel.getElementAt(2), is(equalTo((Object) user))); assertThat(usersListModel.getSelectedItem(), is(equalTo((Object) tableModel.getUsers().get(0)))); assertThat(listener.getNumberOfEvents(), is(equalTo(1))); assertThat(listener.isListItemAdded(2), is(equalTo(true))); } @Test public void shouldReflectChangesToTableUsersAndSelectFirstTableUserIfNoneSelected() { // Given UsersTableModel tableModel = createUsersTableModel(2); UsersListModel usersListModel = new UsersListModel(tableModel); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); User user = createUser(); // When tableModel.modifyElement(1, user); // Then assertThat(usersListModel.getElementAt(1), is(equalTo((Object) user))); assertThat(usersListModel.getSelectedItem(), is(equalTo((Object) tableModel.getUsers().get(0)))); assertThat(listener.getNumberOfEvents(), is(equalTo(2))); assertThat(listener.isListItemChanged(1), is(equalTo(true))); assertThat(listener.isListItemChanged(-1), is(equalTo(true))); } @Test public void shouldReflectChangesToTableUsersAndNotSelectFirstTableUserIfOneAlreadySelected() { // Given UsersTableModel tableModel = createUsersTableModel(3); UsersListModel usersListModel = new UsersListModel(tableModel); usersListModel.setSelectedItem(tableModel.getUsers().get(2)); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); User user = createUser(); // When tableModel.modifyElement(1, user); // Then assertThat(usersListModel.getElementAt(1), is(equalTo((Object) user))); assertThat(usersListModel.getSelectedItem(), is(equalTo((Object) tableModel.getUsers().get(2)))); assertThat(listener.getNumberOfEvents(), is(equalTo(1))); assertThat(listener.isListItemChanged(1), is(equalTo(true))); } @Test public void shouldReflectChangesToSelectedTableUser() { // Given UsersTableModel tableModel = createUsersTableModel(2); UsersListModel usersListModel = new UsersListModel(tableModel); usersListModel.setSelectedItem(tableModel.getUsers().get(1)); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); User user = copyUser(tableModel.getUsers().get(1)); // When tableModel.modifyElement(1, user); // Then assertThat(usersListModel.getElementAt(1), is(equalTo((Object) user))); assertThat(usersListModel.getSelectedItem(), is(equalTo((Object) user))); assertThat(usersListModel.getSelectedItem(), is(sameInstance((Object) user))); assertThat(listener.getNumberOfEvents(), is(equalTo(2))); assertThat(listener.isListItemChanged(1), is(equalTo(true))); } @Test public void shouldReflectClearedTableUsersAndRemoveSelectionOfClearedUser() { // Given UsersTableModel tableModel = createUsersTableModel(2); UsersListModel usersListModel = new UsersListModel(tableModel); usersListModel.setSelectedItem(tableModel.getUsers().get(1)); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); User user = createUser(); // When tableModel.clear(); // Then assertThat(usersListModel.getSize(), is(equalTo(0))); assertThat(usersListModel.getSelectedItem(), is(nullValue())); assertThat(listener.getNumberOfEvents(), is(equalTo(2))); assertThat(listener.isListItemChanged(0), is(equalTo(true))); assertThat(listener.isListItemChanged(1), is(equalTo(true))); assertThat(listener.isListItemChanged(-1), is(equalTo(true))); } @Test public void shouldReflectClearedTableUsersAndSelectFirstCustomUser() { // Given UsersTableModel tableModel = createUsersTableModel(2); UsersListModel usersListModel = new UsersListModel(tableModel); usersListModel.setSelectedItem(tableModel.getUsers().get(1)); User customUser = createUser(); usersListModel.setCustomUsers(new User[] { customUser, createUser() }); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); // When tableModel.clear(); // Then assertThat(usersListModel.getSize(), is(equalTo(2))); assertThat(usersListModel.getSelectedItem(), is(equalTo((Object) customUser))); assertThat(listener.getNumberOfEvents(), is(equalTo(2))); assertThat(listener.isListItemChanged(0), is(equalTo(true))); assertThat(listener.isListItemChanged(1), is(equalTo(true))); assertThat(listener.isListItemChanged(-1), is(equalTo(true))); } @Test public void shouldReflectClearedTableUsersAndNotChangeSelectionIfNoUserSelectedNorAvailable() { // Given UsersTableModel tableModel = createUsersTableModel(2); UsersListModel usersListModel = new UsersListModel(tableModel); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); User user = createUser(); // When tableModel.clear(); // Then assertThat(usersListModel.getSize(), is(equalTo(0))); assertThat(usersListModel.getSelectedItem(), is(nullValue())); assertThat(listener.getNumberOfEvents(), is(equalTo(1))); assertThat(listener.isListItemChanged(0), is(equalTo(true))); assertThat(listener.isListItemChanged(1), is(equalTo(true))); assertThat(listener.isListItemChanged(-1), is(equalTo(false))); } @Test public void shouldReflectRemovedTableUserAndRemoveSelectionOfClearedUserToAvailableUser() { // Given UsersTableModel tableModel = createUsersTableModel(2); UsersListModel usersListModel = new UsersListModel(tableModel); usersListModel.setSelectedItem(tableModel.getUsers().get(1)); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); User user = createUser(); // When tableModel.removeElement(1); // Then assertThat(usersListModel.getSize(), is(equalTo(1))); assertThat(usersListModel.getSelectedItem(), is(equalTo((Object) tableModel.getUsers().get(0)))); assertThat(listener.getNumberOfEvents(), is(equalTo(2))); assertThat(listener.isListItemRemoved(1), is(equalTo(true))); assertThat(listener.isListItemChanged(-1), is(equalTo(true))); } @Test public void shouldReflectRemovedTableUserAndSelectFirstCustomUser() { // Given UsersTableModel tableModel = createUsersTableModel(1); UsersListModel usersListModel = new UsersListModel(tableModel); usersListModel.setSelectedItem(tableModel.getUsers().get(0)); User customUser = createUser(); usersListModel.setCustomUsers(new User[] { customUser, createUser() }); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); // When tableModel.removeElement(0); // Then assertThat(usersListModel.getSize(), is(equalTo(2))); assertThat(usersListModel.getSelectedItem(), is(equalTo((Object) customUser))); assertThat(listener.getNumberOfEvents(), is(equalTo(2))); assertThat(listener.isListItemRemoved(0), is(equalTo(true))); assertThat(listener.isListItemChanged(-1), is(equalTo(true))); } @Test public void shouldReflectRemovedTableUserAndNotChangeSelectionIfNotTheSelectedUser() { // Given UsersTableModel tableModel = createUsersTableModel(2); UsersListModel usersListModel = new UsersListModel(tableModel); usersListModel.setSelectedItem(tableModel.getUsers().get(1)); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); User user = createUser(); // When tableModel.removeElement(0); // Then assertThat(usersListModel.getSize(), is(equalTo(1))); assertThat(usersListModel.getSelectedItem(), is(equalTo((Object) tableModel.getUsers().get(0)))); assertThat(listener.getNumberOfEvents(), is(equalTo(1))); assertThat(listener.isListItemRemoved(0), is(equalTo(true))); assertThat(listener.isListItemChanged(-1), is(equalTo(false))); } @Test public void shouldReflectRemovedTableUserAndNotChangeSelectionIfNoUserSelectedNorAvailable() { // Given UsersTableModel tableModel = createUsersTableModel(1); UsersListModel usersListModel = new UsersListModel(tableModel); TestListDataListener listener = createTestListDataListener(); usersListModel.addListDataListener(listener); User user = createUser(); // When tableModel.removeElement(0); // Then assertThat(usersListModel.getSize(), is(equalTo(0))); assertThat(usersListModel.getSelectedItem(), is(nullValue())); assertThat(listener.getNumberOfEvents(), is(equalTo(1))); assertThat(listener.isListItemRemoved(0), is(equalTo(true))); assertThat(listener.isListItemChanged(-1), is(equalTo(false))); } private static UsersTableModel createUsersTableModel(int numberOfUsers) { List<User> users = new ArrayList<>(); for (int i = 0; i < numberOfUsers; i++) { users.add(createUser("User " + i)); } return new UsersTableModel(users); } private static User copyUser(User user) { return new User(user.getContextId(), user.getName(), user.getId()); } private static User createUser() { return createUser("User"); } private static User createUser(String name) { return new User(1, name); } }