From 6f1e36e7dc3087445a55c0b5a360a932c2a3778f Mon Sep 17 00:00:00 2001 From: Gauthier Roebroeck Date: Mon, 8 Jun 2020 11:46:56 +0800 Subject: [PATCH] fix: strip accented characters for title sort when creating series closes #188 --- .../komga/domain/service/SeriesLifecycle.kt | 4 ++- .../domain/service/SeriesLifecycleTest.kt | 29 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/SeriesLifecycle.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/SeriesLifecycle.kt index f8b332c0c..3d77dd102 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/SeriesLifecycle.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/SeriesLifecycle.kt @@ -2,6 +2,7 @@ package org.gotson.komga.domain.service import mu.KotlinLogging import net.greypanther.natsort.CaseInsensitiveSimpleNaturalComparator +import org.apache.commons.lang3.StringUtils import org.gotson.komga.domain.model.Book import org.gotson.komga.domain.model.BookMetadata import org.gotson.komga.domain.model.Media @@ -13,7 +14,7 @@ import org.gotson.komga.domain.persistence.MediaRepository import org.gotson.komga.domain.persistence.SeriesMetadataRepository import org.gotson.komga.domain.persistence.SeriesRepository import org.springframework.stereotype.Service -import java.util.* +import java.util.Comparator private val logger = KotlinLogging.logger {} private val natSortComparator: Comparator = CaseInsensitiveSimpleNaturalComparator.getInstance() @@ -74,6 +75,7 @@ class SeriesLifecycle( seriesMetadataRepository.insert( SeriesMetadata( title = createdSeries.name, + titleSort = StringUtils.stripAccents(createdSeries.name), seriesId = createdSeries.id ) ) diff --git a/komga/src/test/kotlin/org/gotson/komga/domain/service/SeriesLifecycleTest.kt b/komga/src/test/kotlin/org/gotson/komga/domain/service/SeriesLifecycleTest.kt index fbc4e68fc..4b11d5931 100644 --- a/komga/src/test/kotlin/org/gotson/komga/domain/service/SeriesLifecycleTest.kt +++ b/komga/src/test/kotlin/org/gotson/komga/domain/service/SeriesLifecycleTest.kt @@ -6,6 +6,7 @@ import org.gotson.komga.domain.model.makeLibrary import org.gotson.komga.domain.model.makeSeries import org.gotson.komga.domain.persistence.BookRepository import org.gotson.komga.domain.persistence.LibraryRepository +import org.gotson.komga.domain.persistence.SeriesMetadataRepository import org.gotson.komga.domain.persistence.SeriesRepository import org.junit.jupiter.api.AfterAll import org.junit.jupiter.api.AfterEach @@ -24,6 +25,7 @@ class SeriesLifecycleTest( @Autowired private val seriesLifecycle: SeriesLifecycle, @Autowired private val bookLifecycle: BookLifecycle, @Autowired private val seriesRepository: SeriesRepository, + @Autowired private val seriesMetadataRepository: SeriesMetadataRepository, @Autowired private val bookRepository: BookRepository, @Autowired private val libraryRepository: LibraryRepository ) { @@ -130,4 +132,31 @@ class SeriesLifecycleTest( assertThat(savedBooks.map { it.name }).containsExactly("book 1", "book 2", "book 3", "book 4", "book 5") assertThat(savedBooks.map { it.number }).containsExactly(1, 2, 3, 4, 5) } + + @Test + fun `given series name with diacritics when creating series then diacritics are stripped from metadata titlesort`() { + // given + val series1 = makeSeries("À l'assaut", library.id) + val series2 = makeSeries("Être ou ne pas être", library.id) + val series3 = makeSeries("Écarlate", library.id) + + // when + val created1 = seriesLifecycle.createSeries(series1) + val created2 = seriesLifecycle.createSeries(series2) + val created3 = seriesLifecycle.createSeries(series3) + + // then + with(seriesMetadataRepository.findById(created1.id)) { + assertThat(title).isEqualTo(series1.name) + assertThat(titleSort).isEqualTo("A l'assaut") + } + with(seriesMetadataRepository.findById(created2.id)) { + assertThat(title).isEqualTo(series2.name) + assertThat(titleSort).isEqualTo("Etre ou ne pas etre") + } + with(seriesMetadataRepository.findById(created3.id)) { + assertThat(title).isEqualTo(series3.name) + assertThat(titleSort).isEqualTo("Ecarlate") + } + } }