/*******************************************************************************
* Copyright 2012 Geoscience Australia
*
* 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 au.gov.ga.earthsci.bookmark.model;
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.List;
import org.eclipse.core.databinding.observable.Realm;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import au.gov.ga.earthsci.test.util.DummyRealm;
/**
* Unit tests for the {@link Bookmarks} class
*
* @author James Navin (james.navin@ga.gov.au)
*/
public class BookmarksTest
{
private Bookmarks classUnderTest;
@BeforeClass
public static void init()
{
if (Realm.getDefault() == null)
{
DummyRealm.init();
}
}
@Before
public void setup()
{
classUnderTest = new Bookmarks();
}
@Test
public void testEmptyDefaultListExistsOnCreate()
{
assertNotNull(classUnderTest.getDefaultList());
assertTrue(classUnderTest.getDefaultList().getBookmarks().isEmpty());
assertTrue(classUnderTest.getLists().length == 1);
assertEquals(classUnderTest.getDefaultList(), classUnderTest.getLists()[0]);
assertEquals(classUnderTest.getDefaultList(),
classUnderTest.getListById(classUnderTest.getDefaultList().getId()));
assertEquals(classUnderTest.getDefaultList(),
classUnderTest.getListByName(classUnderTest.getDefaultList().getName()));
}
@Test
public void testAddListWithNull()
{
assertTrue(classUnderTest.getLists().length == 1);
classUnderTest.addList(null);
assertTrue(classUnderTest.getLists().length == 1);
}
@Test
public void testAddListWithNonNullNonDuplicateIdNonDuplicateName()
{
BookmarkList newList = new BookmarkList("id", "name");
assertTrue(classUnderTest.getLists().length == 1);
classUnderTest.addList(newList);
assertTrue(classUnderTest.getLists().length == 2);
assertEquals(newList, classUnderTest.getListById(newList.getId()));
assertEquals(newList, classUnderTest.getListByName(newList.getName()));
assertTrue(Arrays.asList(classUnderTest.getLists()).contains(newList));
}
@Test
public void testAddListWithNonNullNonDuplicateIdDuplicateName()
{
BookmarkList newList = new BookmarkList("id", "name");
BookmarkList sameNameList = new BookmarkList("id2", "name");
assertTrue(classUnderTest.getLists().length == 1);
classUnderTest.addList(newList);
classUnderTest.addList(sameNameList);
assertTrue(classUnderTest.getLists().length == 3);
assertEquals(newList, classUnderTest.getListById(newList.getId()));
assertEquals(sameNameList, classUnderTest.getListById(sameNameList.getId()));
assertEquals(newList, classUnderTest.getListByName(newList.getName()));
assertTrue(Arrays.asList(classUnderTest.getLists()).contains(newList));
assertTrue(Arrays.asList(classUnderTest.getLists()).contains(sameNameList));
}
@Test
public void testAddListWithNonNullDuplicateId()
{
BookmarkList newList = new BookmarkList("id", "name");
BookmarkList sameIdList = new BookmarkList("id", "name2");
assertTrue(classUnderTest.getLists().length == 1);
classUnderTest.addList(newList);
classUnderTest.addList(sameIdList);
assertTrue(classUnderTest.getLists().length == 2);
assertEquals(sameIdList, classUnderTest.getListById(sameIdList.getId()));
assertEquals(sameIdList, classUnderTest.getListById(newList.getId()));
assertEquals(null, classUnderTest.getListByName(newList.getName()));
assertEquals(sameIdList, classUnderTest.getListByName(sameIdList.getName()));
assertFalse(Arrays.asList(classUnderTest.getLists()).contains(newList));
assertTrue(Arrays.asList(classUnderTest.getLists()).contains(sameIdList));
}
@Test
public void testAddListWithDefaultListDuplicateId()
{
IBookmarkList originalDefaultList = classUnderTest.getDefaultList();
BookmarkList newDefaultList = new BookmarkList(originalDefaultList.getId(), "new default");
assertTrue(classUnderTest.getLists().length == 1);
classUnderTest.addList(newDefaultList);
assertTrue(classUnderTest.getLists().length == 1);
assertEquals(newDefaultList, classUnderTest.getDefaultList());
assertEquals(newDefaultList, classUnderTest.getListById(newDefaultList.getId()));
assertEquals(newDefaultList, classUnderTest.getListById(originalDefaultList.getId()));
assertEquals(null, classUnderTest.getListByName(originalDefaultList.getName()));
assertEquals(newDefaultList, classUnderTest.getListByName(newDefaultList.getName()));
assertFalse(Arrays.asList(classUnderTest.getLists()).contains(originalDefaultList));
assertTrue(Arrays.asList(classUnderTest.getLists()).contains(newDefaultList));
}
@Test
public void testRemoveListWithNull()
{
IBookmarkList[] lists =
new IBookmarkList[] { new BookmarkList("id0", "name0"), new BookmarkList("id1", "name1") };
classUnderTest.setLists(lists);
assertTrue(classUnderTest.getLists().length == 3);
assertFalse(classUnderTest.removeList(null));
assertTrue(classUnderTest.getLists().length == 3);
}
@Test
public void testRemoveListWithIncluded()
{
IBookmarkList[] lists =
new IBookmarkList[] { new BookmarkList("id0", "name0"), new BookmarkList("id1", "name1") };
classUnderTest.setLists(lists);
assertTrue(classUnderTest.getLists().length == 3);
assertTrue(classUnderTest.removeList(lists[0]));
assertTrue(classUnderTest.getLists().length == 2);
}
@Test
public void testRemoveListWithNonIncluded()
{
IBookmarkList[] lists =
new IBookmarkList[] { new BookmarkList("id0", "name0"), new BookmarkList("id1", "name1") };
classUnderTest.setLists(lists);
assertTrue(classUnderTest.getLists().length == 3);
assertFalse(classUnderTest.removeList(new BookmarkList("id2", "name2")));
assertTrue(classUnderTest.getLists().length == 3);
}
@Test
public void testRemoveListWithDefault()
{
IBookmarkList[] lists =
new IBookmarkList[] { new BookmarkList("id0", "name0"), new BookmarkList("id1", "name1") };
classUnderTest.setLists(lists);
assertTrue(classUnderTest.getLists().length == 3);
assertFalse(classUnderTest.removeList(classUnderTest.getDefaultList()));
assertTrue(classUnderTest.getLists().length == 3);
}
@Test
public void testGetListByIdWithNull()
{
assertNull(classUnderTest.getListById(null));
}
@Test
public void testGetListByIdWithExistingId()
{
assertNotNull(classUnderTest.getListById(classUnderTest.getDefaultList().getId()));
}
@Test
public void testGetListByIdWithNonExistingId()
{
assertNull(classUnderTest.getListById("dummy"));
}
@Test
public void testSetListsWithNull()
{
IBookmarkList originalDefaultList = classUnderTest.getDefaultList();
classUnderTest.setLists(null);
assertTrue(classUnderTest.getLists().length == 1);
assertNotNull(classUnderTest.getDefaultList());
assertTrue(originalDefaultList != classUnderTest.getDefaultList());
assertFalse(Arrays.asList(classUnderTest.getLists()).contains(originalDefaultList));
assertTrue(Arrays.asList(classUnderTest.getLists()).contains(classUnderTest.getDefaultList()));
}
@Test
public void testSetListsWithEmpty()
{
IBookmarkList originalDefaultList = classUnderTest.getDefaultList();
classUnderTest.setLists(new IBookmarkList[0]);
assertTrue(classUnderTest.getLists().length == 1);
assertNotNull(classUnderTest.getDefaultList());
assertTrue(originalDefaultList != classUnderTest.getDefaultList());
assertFalse(Arrays.asList(classUnderTest.getLists()).contains(originalDefaultList));
assertTrue(Arrays.asList(classUnderTest.getLists()).contains(classUnderTest.getDefaultList()));
}
@Test
public void testSetListsWithNonEmptyNoDefault()
{
IBookmarkList[] newLists =
new IBookmarkList[] { new BookmarkList("id0", "name0"), new BookmarkList("id1", "name1"),
new BookmarkList("id2", "name2") };
IBookmarkList originalDefaultList = classUnderTest.getDefaultList();
classUnderTest.setLists(newLists);
assertTrue(classUnderTest.getLists().length == 4);
assertNotNull(classUnderTest.getDefaultList());
assertTrue(originalDefaultList != classUnderTest.getDefaultList());
List<IBookmarkList> lists = Arrays.asList(classUnderTest.getLists());
assertFalse(lists.contains(originalDefaultList));
assertTrue(lists.contains(newLists[0]));
assertTrue(lists.contains(newLists[1]));
assertTrue(lists.contains(newLists[2]));
}
}