package com.orgzly.android.repos; import com.orgzly.android.Book; import com.orgzly.android.BookName; import com.orgzly.android.Note; import com.orgzly.android.OrgzlyTest; import com.orgzly.android.sync.BookNamesake; import org.junit.Test; import java.io.IOException; import java.util.Map; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertNull; import static junit.framework.Assert.assertTrue; import static junit.framework.Assert.fail; public class ShelfTest extends OrgzlyTest { private static final String TAG = ShelfTest.class.getName(); @Test public void testNewBook() throws IOException { shelf.createBook("booky"); /* Make sure root node is created. */ Note note = shelf.getNote(1); assertEquals(1, note.getPosition().getLft()); assertEquals(2, note.getPosition().getRgt()); assertEquals(0, note.getPosition().getLevel()); assertNotNull(note.getHead()); assertEquals("", note.getHead().getTitle()); } @Test public void testInsertDeletedRepo() { shelfTestUtils.setupRepo("mock://repo-a"); shelfTestUtils.deleteRepo("mock://repo-a"); shelfTestUtils.setupRepo("mock://repo-a"); } @Test public void testRepoAndShelfSetup() throws IOException { shelfTestUtils.setupRepo("mock://repo-a"); shelfTestUtils.setupRook("mock://repo-a", "mock://repo-a/remote-book-1.org", "", "0abcdef", 1400067156000L); shelfTestUtils.setupRook("mock://repo-a", "mock://repo-a/remote-book-2.org", "", "1abcdef", 1300067156000L); shelfTestUtils.setupRook("mock://repo-a", "mock://repo-a/remote-book-3.org", "", "2abcdef", 1200067156000L); shelfTestUtils.setupBook("local-book-1", ""); assertEquals("Local books", 1, shelf.getBooks().size()); assertEquals("Remote books", 3, shelf.getBooksFromAllRepos(null).size()); } @Test public void testLoadRook() throws IOException { shelfTestUtils.setupRepo("mock://repo-a"); shelfTestUtils.setupRook("mock://repo-a", "mock://repo-a/remote-book-1.org", "", "0abcdef", 1400067156000L); shelfTestUtils.setupRook("mock://repo-a", "mock://repo-a/remote-book-2.org", "", "1abcdef", 1300067156000L); shelfTestUtils.setupRook("mock://repo-a", "mock://repo-a/remote-book-3.org", "", "2abcdef", 1200067156000L); VersionedRook vrook = shelf.getBooksFromAllRepos(null).get(0); shelf.loadBookFromRepo(vrook); assertEquals(1, shelf.getBooks().size()); Book book = shelf.getBooks().get(0); assertEquals("remote-book-1", book.getName()); assertEquals("/remote-book-1.org", book.getLastSyncedToRook().getUri().getPath()); assertEquals("remote-book-1", BookName.getInstance(context, book.getLastSyncedToRook()).getName()); assertEquals("0abcdef", book.getLastSyncedToRook().getRevision()); assertEquals(1400067156000L, book.getLastSyncedToRook().getMtime()); } @Test public void testCompareWithEmptyRepo() throws IOException { assertEquals("Starting with empty shelf", 0, shelf.getBooks().size()); Map<String, BookNamesake> nameGroups = shelf.groupAllNotebooksByName(); assertEquals(0, nameGroups.size()); } @Test public void testCompareWithRepo() throws IOException { assertEquals("Starting with empty shelf", 0, shelf.getBooks().size()); shelfTestUtils.setupRepo("mock://repo-a"); shelfTestUtils.setupRook("mock://repo-a", "mock://repo-a/remote-book-1.org", "", "0abcdef", 1400067156); shelfTestUtils.setupRook("mock://repo-a", "mock://repo-a/remote-book-2.org", "", "1abcdef", 1400412756); shelfTestUtils.setupRook("mock://repo-a", "mock://repo-a/remote-book-3.org", "", "2abcdef", 1400671956); Map<String, BookNamesake> groups = shelf.groupAllNotebooksByName(); assertEquals(3, groups.size()); for (BookNamesake group : groups.values()) { String name = group.getName(); assertTrue("Book name " + name + " not expected", name.equals("remote-book-1") || name.equals("remote-book-2") || name.equals("remote-book-3")); assertTrue(group.getBook().isDummy()); assertEquals(1, group.getRooks().size()); } } @Test public void testShelfAndRepo() throws IOException { assertEquals("Starting with empty shelf", 0, shelf.getBooks().size()); Book book; book = shelf.createBook("local-book-1"); assertEquals("local-book-1", book.getName()); assertNull(book.getLastSyncedToRook()); book = shelf.createBook("common-book-1"); assertEquals("common-book-1", book.getName()); assertNull(book.getLastSyncedToRook()); book = shelf.createBook("common-book-2"); assertEquals("common-book-2", book.getName()); assertNull(book.getLastSyncedToRook()); /* Setup mock repo. */ shelfTestUtils.setupRepo("mock://repo-a"); shelfTestUtils.setupRook("mock://repo-a", "mock://repo-a/remote-book-2.org", "", "1abcdef", 1400412756000L); shelfTestUtils.setupRook("mock://repo-a", "mock://repo-a/common-book-1.org", "", "2abcdef", 1400671956000L); shelfTestUtils.setupRook("mock://repo-a", "mock://repo-a/common-book-2.org", "", "3abcdef", 1400671956000L); shelfTestUtils.setupRook("mock://repo-a", "mock://repo-a/remote-book-1.org", "", "0abcdef", 1400067156000L); Map<String, BookNamesake> groups = shelf.groupAllNotebooksByName(); assertEquals(5, groups.size()); for (BookNamesake group : groups.values()) { String name = group.getName(); if (name.equals("local-book-1")) { assertFalse(group.getBook().isDummy()); assertEquals(0, group.getRooks().size()); } else if (name.equals("common-book-1")) { assertFalse(group.getBook().isDummy()); assertEquals(1, group.getRooks().size()); } else if (name.equals("common-book-2")) { assertFalse(group.getBook().isDummy()); assertEquals(1, group.getRooks().size()); } else if (name.equals("remote-book-1")) { assertTrue(group.getBook().isDummy()); assertEquals(1, group.getRooks().size()); } else if (name.equals("remote-book-2")) { assertTrue(group.getBook().isDummy()); assertEquals(1, group.getRooks().size()); } else { fail("unexpected name " + name); } } } }