Skip to content

Commit

Permalink
fix: strip accented characters for title sort when creating series
Browse files Browse the repository at this point in the history
closes gotson#188
  • Loading branch information
gotson committed Jun 8, 2020
1 parent d2123a5 commit 6f1e36e
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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<String> = CaseInsensitiveSimpleNaturalComparator.getInstance()
Expand Down Expand Up @@ -74,6 +75,7 @@ class SeriesLifecycle(
seriesMetadataRepository.insert(
SeriesMetadata(
title = createdSeries.name,
titleSort = StringUtils.stripAccents(createdSeries.name),
seriesId = createdSeries.id
)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
) {
Expand Down Expand Up @@ -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")
}
}
}

0 comments on commit 6f1e36e

Please sign in to comment.