diff --git a/app/src/test/java/org/fairscan/app/data/ImageRepositoryTest.kt b/app/src/test/java/org/fairscan/app/data/ImageRepositoryTest.kt index 61da0ee..4deab91 100644 --- a/app/src/test/java/org/fairscan/app/data/ImageRepositoryTest.kt +++ b/app/src/test/java/org/fairscan/app/data/ImageRepositoryTest.kt @@ -111,6 +111,13 @@ class ImageRepositoryTest { assertThat(repo().imageIds()).containsExactly("1") } + @Test + fun `should find existing files at initialization if json is invalid`() { + writeDocumentDotJson("xxx") + File(scanDir(), "1.jpg").writeBytes(byteArrayOf(101, 102, 103)) + assertThat(repo().imageIds()).containsExactly("1") + } + @Test fun `no json and two files with same id`() { scanDir().mkdirs() @@ -132,9 +139,7 @@ class ImageRepositoryTest { @Test fun `should filter pages in json at initialization`() { - scanDir().mkdirs() - val json = """{"pages":[{"file":"1.jpg"}, {"file":"2.jpg"}]}""" - File(scanDir(), "document.json").writeText(json) + writeDocumentDotJson("""{"pages":[{"file":"1.jpg"}, {"file":"2.jpg"}]}""") File(scanDir(), "2.jpg").writeBytes(byteArrayOf(101, 102, 103)) assertThat(repo().imageIds()).containsExactly("2") } @@ -192,6 +197,13 @@ class ImageRepositoryTest { assertThat(repo.pages().last().metadata).isEqualTo(metadata1.copy(manualRotation = R270)) } + @Test + fun rotate_unknown_id() { + val repo = repo() + repo.rotate("x", true) + assertThat(repo.imageIds()).isEmpty() + } + @Test fun movePage() { val repo = repo() @@ -207,6 +219,13 @@ class ImageRepositoryTest { assertThat(repo2.imageIds()).containsExactly(id1, id0) } + @Test + fun move_unknown_id() { + val repo = repo() + repo.movePage("x", 0) + assertThat(repo.imageIds()).isEmpty() + } + @Test fun metadata() { val quad = quad1.toSerializable() @@ -229,6 +248,11 @@ class ImageRepositoryTest { private fun jpegFiles(dir: File): Array? = dir.listFiles { f -> f.name.endsWith(".jpg") } + private fun writeDocumentDotJson(json: String) { + scanDir().mkdirs() + File(scanDir(), "document.json").writeText(json) + } + fun ImageRepository.imageIds(): PersistentList = pages().map { it.id }.toPersistentList() } diff --git a/app/src/test/java/org/fairscan/app/data/PageStoreTest.kt b/app/src/test/java/org/fairscan/app/data/PageStoreTest.kt new file mode 100644 index 0000000..61072d9 --- /dev/null +++ b/app/src/test/java/org/fairscan/app/data/PageStoreTest.kt @@ -0,0 +1,91 @@ +/* + * Copyright 2025 Pierre-Yves Nicolas + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ +package org.fairscan.app.data + +import org.assertj.core.api.Assertions.assertThat +import org.junit.Test + +class PageStoreTest { + + val page1 = PageV2("1") + val page2 = PageV2("2") + + @Test + fun pages() { + val store = PageStore(listOf()) + assertThat(store.pages()).isEmpty() + + store.addOrReplace(page1) + assertThat(store.pages()).containsExactly(page1) + + store.addOrReplace(page2) + assertThat(store.pages()).containsExactly(page1, page2) + } + + @Test + fun get() { + val store = PageStore(listOf(page1)) + assertThat(store.get(page1.id)).isEqualTo(page1) + assertThat(store.get("x")).isNull() + } + + @Test + fun addOrReplace() { + val store = PageStore(listOf()) + store.addOrReplace(page1) + assertThat(store.pages()).containsExactly(page1) + + val page1b = PageV2("1", 90) + store.addOrReplace(page1b) + assertThat(store.pages()).containsExactly(page1b) + assertThat(page1b).isNotEqualTo(page1) + } + + @Test + fun update() { + val page = PageV2("3", baseRotationDegrees = 90) + val store = PageStore(listOf(page)) + store.update(page.id) { p -> p.copy(baseRotationDegrees = p.baseRotationDegrees + 180) } + assertThat(store.get(page.id)!!.baseRotationDegrees).isEqualTo(270) + } + + @Test + fun delete() { + val store = PageStore(listOf(page1, page2)) + assertThat(store.pages()).containsExactly(page1, page2) + store.delete(page1.id) + assertThat(store.pages()).containsExactly(page2) + } + + @Test + fun clear() { + val store = PageStore(listOf(page1, page2)) + store.clear() + assertThat(store.pages()).isEmpty() + } + + @Test + fun move() { + val store = PageStore(listOf(page1, page2)) + assertThat(store.pages()).containsExactly(page1, page2) + store.move(page2.id, 0) + assertThat(store.pages()).containsExactly(page2, page1) + store.move(page2.id, 1) + assertThat(store.pages()).containsExactly(page1, page2) + store.move("x", 0) + assertThat(store.pages()).containsExactly(page1, page2) + } + +}