From 977ef553250d84baa7d2a6e8f78ad43fd6908bb0 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Thu, 29 Apr 2021 21:05:32 +0200 Subject: [PATCH] #564 - sort categories naturally --- pom.xml | 5 +++++ .../categories/CategoryService.java | 14 +++++++------ .../unit/CategoryServiceTest.java | 20 +++++++++++++++---- 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index 941f0527c..784f19a4e 100644 --- a/pom.xml +++ b/pom.xml @@ -202,6 +202,11 @@ <artifactId>org.eclipse.jgit</artifactId> <version>${jgit.version}</version> </dependency> + <dependency> + <groupId>org.padler</groupId> + <artifactId>natorder</artifactId> + <version>1.0.1</version> + </dependency> <!-- selenium --> <dependency> diff --git a/src/main/java/de/deadlocker8/budgetmaster/categories/CategoryService.java b/src/main/java/de/deadlocker8/budgetmaster/categories/CategoryService.java index 3e2ffa459..c9be23a3c 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/categories/CategoryService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/categories/CategoryService.java @@ -4,11 +4,13 @@ import de.deadlocker8.budgetmaster.services.Resetable; import de.deadlocker8.budgetmaster.transactions.Transaction; import de.deadlocker8.budgetmaster.utils.Strings; import de.thecodelabs.utils.util.Localization; +import org.padler.natorder.NaturalOrderComparator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Optional; @@ -101,16 +103,16 @@ public class CategoryService implements Resetable public List<Category> getAllCategories() { localizeDefaultCategories(); - return categoryRepository.findAllByOrderByNameAsc().stream() - .sorted(Comparator.comparing(c -> c.getName().toLowerCase())) - .collect(Collectors.toList()); + final List<Category> categories = categoryRepository.findAllByOrderByNameAsc(); + categories.sort((c1, c2) -> new NaturalOrderComparator().compare(c1.getName(), c2.getName())); + return categories; } public List<Category> getAllCustomCategories() { - return categoryRepository.findAllByTypeOrderByNameAsc(CategoryType.CUSTOM).stream() - .sorted(Comparator.comparing(c -> c.getName().toLowerCase())) - .collect(Collectors.toList()); + final List<Category> categories = categoryRepository.findAllByTypeOrderByNameAsc(CategoryType.CUSTOM); + categories.sort((c1, c2) -> new NaturalOrderComparator().compare(c1.getName(), c2.getName())); + return categories; } public void localizeDefaultCategories() diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/CategoryServiceTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/CategoryServiceTest.java index be0d6e228..97cad2071 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/unit/CategoryServiceTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/CategoryServiceTest.java @@ -44,8 +44,17 @@ public class CategoryServiceTest Category category_AA = new Category("AA", "#ff0000", CategoryType.CUSTOM); categories.add(category_AA); - Category category_0 = new Category("0", "#ff0000", CategoryType.CUSTOM); - categories.add(category_0); + Category category_1 = new Category("1", "#ff0000", CategoryType.CUSTOM); + categories.add(category_1); + + Category category_11 = new Category("11", "#ff0000", CategoryType.CUSTOM); + categories.add(category_11); + + Category category_2 = new Category("2", "#ff0000", CategoryType.CUSTOM); + categories.add(category_2); + + Category category_AABB = new Category("AABB", "#ff0000", CategoryType.CUSTOM); + categories.add(category_AABB); Category category_aa = new Category("aa", "#ff0000", CategoryType.CUSTOM); categories.add(category_aa); @@ -54,8 +63,11 @@ public class CategoryServiceTest Mockito.when(categoryRepository.findByType(CategoryType.REST)).thenReturn(CATEGORY_REST); Mockito.when(categoryRepository.findAllByOrderByNameAsc()).thenReturn(categories); - assertThat(categoryService.getAllCategories()).hasSize(6) - .containsExactly(category_0, category_AA, category_aa, category_BB, CATEGORY_NONE, CATEGORY_REST); + System.out.println(List.of(category_1, category_2, category_11, category_AA, category_aa, category_AABB, category_BB, CATEGORY_NONE, CATEGORY_REST)); + System.out.println(categoryService.getAllCategories()); + + assertThat(categoryService.getAllCategories()).hasSize(9) + .containsExactly(category_1, category_2, category_11, category_AA, category_aa, category_AABB, category_BB, CATEGORY_NONE, CATEGORY_REST); } @Test -- GitLab