Construct the library different ways.

This commit is contained in:
Matthieu Gautier 2023-06-21 18:10:11 +02:00
parent ddbf5a08c5
commit a2e6381a84
6 changed files with 82 additions and 29 deletions

View File

@ -2,21 +2,24 @@
<id>00000000-0000-0000-0000-000000000000</id>
<entry>
<title>Test ZIM file</title>
<id>urn:uuid:86c91e51-55bf-8882-464e-072aca37a3e8</id>
<id>urn:uuid:e34f5109-ed0d-b93e-943d-06f7717c7340</id>
<icon>/meta?name=favicon&amp;content=small</icon>
<updated>2020-11-27:00::00:Z</updated>
<language>en</language>
<summary>This is a ZIM file used in libzim unit-tests</summary>
<tags>unit;test</tags>
<path>small.zim</path>
<language>eng</language>
<summary>Description</summary>
<tags>_category:Category;_ftindex:yes;_ftindex:yes;_pictures:yes;_videos:yes;_details:yes</tags>
<link type="text/html" href="/small" />
<author>
<name>Kiwix</name>
<name>Creator</name>
</author>
<publisher>
<name>Publisher</name>
</publisher>
<category>Super category</category>
<link rel="http://opds-spec.org/acquisition/open-access" type="application/x-zim" href="http://localhost/small.zim" length="78982" />
<category>Category</category>
<articleCount>1</articleCount>
<mediaCount>1</mediaCount>
<link rel="http://opds-spec.org/acquisition/open-access" type="application/x-zim" href="http://localhost/small.zim" length="66560" />
<link rel="http://opds-spec.org/image/thumbnail" type="image/png" href="/meta?name=favicon&amp;content=small" />
</entry>
</feed>

View File

@ -13,10 +13,11 @@ zimwriterfs -w main.html \
-I favicon.png \
-l eng \
-t "Test ZIM file" \
-d "N/A" \
-L "Test File" \
-c "N/A" \
-p "N/A" \
-d "Description" \
-L "Long Description" \
-c "Creator" \
-p "Publisher" \
--tags "_category:Category" \
small_zimfile_data \
small.zim \
&& echo 'small.zim was successfully created' \

3
lib/src/test/library.xml Normal file
View File

@ -0,0 +1,3 @@
<library version="20110515">
<book id="e34f5109-ed0d-b93e-943d-06f7717c7340" path="small.zim" title="Test ZIM file" description="Description" language="eng" creator="Creator" publisher="Publisher" name="Test" tags="_category:Category;_ftindex:yes;_ftindex:yes;_pictures:yes;_videos:yes;_details:yes" faviconMimeType="image/png" favicon="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" date="2023-06-21" url="http://localhost/small.zim" articleCount="1" mediaCount="1" size="65" />
</library>

Binary file not shown.

Binary file not shown.

View File

@ -60,7 +60,7 @@ public class test {
assertEquals("main.html", mainPage.getItem(true).getPath());
// test zim file size
assertEquals(66910, archive.getFilesize()); // The file size is in KiB
assertEquals(66937, archive.getFilesize()); // The file size is in KiB
// test zim file content
byte[] mainData = getFileContent("small_zimfile_data/main.html");
byte[] inZimMainData = archive.getEntryByPath("main.html").getItem(true).getData().getData();
@ -86,7 +86,7 @@ public class test {
assertFalse(archive.isMultiPart());
assertTrue(archive.hasNewNamespaceScheme());
assertTrue(archive.hasChecksum());
assertEquals("f4373bda1fdce141ba8e5c80baaf905d", archive.getChecksum());
assertEquals("4a2709fddbee8c27db708c20b4952a06", archive.getChecksum());
assertTrue(archive.hasTitleIndex());
assertTrue(archive.hasFulltextIndex());
assertTrue(archive.hasMainEntry());
@ -97,7 +97,7 @@ public class test {
metaKeys,
archive.getMetadataKeys()
));
assertEquals("c23a31c1-c357-9e82-3b43-f87aaf706d04", archive.getUuid());
assertEquals("e34f5109-ed0d-b93e-943d-06f7717c7340", archive.getUuid());
assertEquals(1, archive.getMediaCount());
assertEquals(1, archive.getArticleCount());
assertEquals(2, archive.getEntryCount());
@ -205,9 +205,10 @@ public class test {
assertEquals(bookIds.length, 1);
lib.filter(new Filter().local(true));
assertTrue(Arrays.equals(lib.getBooksPublishers(), new String[]{"Publisher"}));
assertTrue(Arrays.equals(lib.getBooksCreators(), new String[]{"Kiwix"}));
assertTrue(Arrays.equals(lib.getBooksCategories(), new String[]{"Super category"}));
assertTrue(Arrays.equals(lib.getBooksLanguages(), new String[]{"en"}));
assertTrue(Arrays.equals(lib.getBooksCreators(), new String[]{"Creator"}));
System.out.println(Arrays.toString(lib.getBooksCategories()));
assertTrue(Arrays.equals(lib.getBooksCategories(), new String[]{"Category"}));
assertTrue(Arrays.equals(lib.getBooksLanguages(), new String[]{"eng"}));
// getArchiveById needs books with valid path. Which is not possible by definition if library is initialized by opds stream.
@ -215,25 +216,35 @@ public class test {
TestBook book = lib.getBookById(bookIds[0]);
assertEquals(book.getTitle(), "Test ZIM file");
assertEquals(book.getTags(), "unit;test");
assertEquals(book.getTags(), "_category:Category;_ftindex:yes;_ftindex:yes;_pictures:yes;_videos:yes;_details:yes");
assertEquals(book.getIllustration(48).width(), 48);
assertEquals(book.getIllustration(48).url(), "http://localhost/meta?name=favicon&content=small");
assertEquals(book.getUrl(), "http://localhost/small.zim");
assertEquals(book.getPath(), "");
assertEquals(book.getHumanReadableIdFromPath(), "");
assertFalse(book.isPathValid());
assertEquals(book.getDescription(), "This is a ZIM file used in libzim unit-tests");
assertEquals(book.getCreator(), "Kiwix");
assertEquals(book.getDescription(), "Description");
assertEquals(book.getCreator(), "Creator");
assertEquals(book.getPublisher(), "Publisher");
assertEquals(book.getFlavour(), "");
assertEquals(book.getCategory(), "Super category");
assertEquals(book.getArticleCount(), 0);
assertEquals(book.getMediaCount(), 0);
assertEquals(book.getSize(), 78982);
assertEquals(book.getCategory(), "Category");
assertEquals(book.getArticleCount(), 1);
assertEquals(book.getMediaCount(), 1);
assertEquals(book.getSize(), 66560);
Illustration[] illustrations = book.getIllustrations();
assertEquals(1, illustrations.length);
assertEquals(book.getTagStr("video"), "");
}
@Test
public void testLibrarySimple() throws IOException {
TestLibrary lib = new TestLibrary();
TestManager manager = new TestManager(lib);
manager.addBookFromPath("small.zim", "small.zim", "http://localhost/small.zim", true);
testLibrary(lib);
String[] bookIds = lib.getBooksIds();
TestBook book = lib.getBookById(bookIds[0]);
assertEquals(book.getIllustration(48).url(), "");
assertEquals(book.getPath(), new File("small.zim").getAbsolutePath());
assertEquals(book.getHumanReadableIdFromPath(), "small");
assertTrue(book.isPathValid());
// remove book from library by id
lib.removeBookById(bookIds[0]);
@ -241,6 +252,35 @@ public class test {
assertEquals(bookIds.length, 0);
}
@Test
public void testLibraryXml() throws IOException {
TestLibrary lib = new TestLibrary();
TestManager manager = new TestManager(lib);
manager.readFile("library.xml");
testLibrary(lib);
String[] bookIds = lib.getBooksIds();
TestBook book = lib.getBookById(bookIds[0]);
assertEquals(book.getIllustration(48).url(), "");
assertEquals(book.getPath(), new File("small.zim").getAbsolutePath());
assertEquals(book.getHumanReadableIdFromPath(), "small");
assertTrue(book.isPathValid());
}
@Test
public void testLibraryXmlContent() throws IOException {
TestLibrary lib = new TestLibrary();
TestManager manager = new TestManager(lib);
String content = getTextFileContent("library.xml");
manager.readXml(content, "library.xml");
testLibrary(lib);
String[] bookIds = lib.getBooksIds();
TestBook book = lib.getBookById(bookIds[0]);
assertEquals(book.getIllustration(48).url(), "");
assertEquals(book.getPath(), new File("small.zim").getAbsolutePath());
assertEquals(book.getHumanReadableIdFromPath(), "small");
assertTrue(book.isPathValid());
}
@Test
public void testLibraryOPDS() throws IOException {
TestLibrary lib = new TestLibrary();
@ -248,6 +288,12 @@ public class test {
String content = getTextFileContent("catalog.xml");
manager.readOpds(content, "http://localhost");
testLibrary(lib);
String[] bookIds = lib.getBooksIds();
TestBook book = lib.getBookById(bookIds[0]);
assertEquals(book.getIllustration(48).url(), "http://localhost/meta?name=favicon&content=small");
assertEquals(book.getPath(), "");
assertEquals(book.getHumanReadableIdFromPath(), "");
assertFalse(book.isPathValid());
}
@Test
@ -322,7 +368,7 @@ public class test {
assertEquals(3, iterator.getWordCount());
assertEquals(0, iterator.getFileIndex());
assertEquals(-1, iterator.getSize());
assertEquals("c23a31c1-c357-9e82-3b43-f87aaf706d04", iterator.getZimId());
assertEquals("e34f5109-ed0d-b93e-943d-06f7717c7340", iterator.getZimId());
TestEntry entry = iterator.next();
assertEquals("main.html", entry.getPath());