From 540db66022b5632920910a72d6c7311fd001d7d7 Mon Sep 17 00:00:00 2001 From: Colin DAMON Date: Fri, 9 Sep 2022 08:50:51 +0200 Subject: [PATCH] Priorize init module --- .../lite/module/domain/JHipsterSlug.java | 19 ++++++++++++++++++- .../domain/landscape/JHipsterLandscape.java | 2 +- .../module/domain/JHipsterModuleSlugTest.java | 17 +++++++++++++++++ .../landscape/JHipsterLandscapeTest.java | 10 ++++++++++ 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/main/java/tech/jhipster/lite/module/domain/JHipsterSlug.java b/src/main/java/tech/jhipster/lite/module/domain/JHipsterSlug.java index 03ada11270b..f858943827a 100644 --- a/src/main/java/tech/jhipster/lite/module/domain/JHipsterSlug.java +++ b/src/main/java/tech/jhipster/lite/module/domain/JHipsterSlug.java @@ -6,7 +6,7 @@ import tech.jhipster.lite.common.domain.Generated; import tech.jhipster.lite.error.domain.Assert; -public abstract sealed class JHipsterSlug permits JHipsterModuleSlug, JHipsterFeatureSlug { +public abstract sealed class JHipsterSlug implements Comparable permits JHipsterModuleSlug, JHipsterFeatureSlug { private static final Pattern SLUG_FORMAT = Pattern.compile("^[a-z1-9-]+$"); @@ -34,6 +34,23 @@ public String get() { return slug; } + @Override + public int compareTo(JHipsterSlug other) { + if (isInit()) { + return -1; + } + + if (other.isInit()) { + return 1; + } + + return get().compareTo(other.get()); + } + + private boolean isInit() { + return get().equals("init"); + } + @Override @Generated public int hashCode() { diff --git a/src/main/java/tech/jhipster/lite/module/domain/landscape/JHipsterLandscape.java b/src/main/java/tech/jhipster/lite/module/domain/landscape/JHipsterLandscape.java index 3e200451c07..875205a4a26 100644 --- a/src/main/java/tech/jhipster/lite/module/domain/landscape/JHipsterLandscape.java +++ b/src/main/java/tech/jhipster/lite/module/domain/landscape/JHipsterLandscape.java @@ -113,7 +113,7 @@ public Collection sort(Collection module } private Function> toLevelModules(Collection modules) { - return level -> modules.stream().filter(inLevel(level)); + return level -> modules.stream().filter(inLevel(level)).sorted(); } private Predicate inLevel(JHipsterLandscapeLevel level) { diff --git a/src/test/java/tech/jhipster/lite/module/domain/JHipsterModuleSlugTest.java b/src/test/java/tech/jhipster/lite/module/domain/JHipsterModuleSlugTest.java index 7c4aea126b2..237cf12e609 100644 --- a/src/test/java/tech/jhipster/lite/module/domain/JHipsterModuleSlugTest.java +++ b/src/test/java/tech/jhipster/lite/module/domain/JHipsterModuleSlugTest.java @@ -2,6 +2,8 @@ import static org.assertj.core.api.Assertions.*; +import java.util.stream.Stream; +import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import tech.jhipster.lite.UnitTest; @@ -14,4 +16,19 @@ class JHipsterModuleSlugTest { void shouldNotBuildInvalidSlug(String slug) { assertThatThrownBy(() -> new JHipsterModuleSlug(slug)).isExactlyInstanceOf(InvalidJHipsterSlugException.class); } + + @Test + void shouldSortModules() { + Stream modules = Stream + .of(new JHipsterModuleSlug("root"), new JHipsterModuleSlug("init"), new JHipsterModuleSlug("dummy"), new JHipsterModuleSlug("init")) + .sorted(); + + assertThat(modules) + .containsExactly( + new JHipsterModuleSlug("init"), + new JHipsterModuleSlug("init"), + new JHipsterModuleSlug("dummy"), + new JHipsterModuleSlug("root") + ); + } } diff --git a/src/test/java/tech/jhipster/lite/module/domain/landscape/JHipsterLandscapeTest.java b/src/test/java/tech/jhipster/lite/module/domain/landscape/JHipsterLandscapeTest.java index 696885585ed..dd315e57d8c 100644 --- a/src/test/java/tech/jhipster/lite/module/domain/landscape/JHipsterLandscapeTest.java +++ b/src/test/java/tech/jhipster/lite/module/domain/landscape/JHipsterLandscapeTest.java @@ -209,4 +209,14 @@ void shouldSortModuleInApplicableOrder() { assertThat(landscape.sort(List.of(moduleSlug("second"), moduleSlug("first")))) .containsExactly(moduleSlug("first"), moduleSlug("second")); } + + @Test + void shouldSortInitAsFirstModule() { + JHipsterModuleResource init = defaultModuleResourceBuilder().slug("init").build(); + JHipsterModuleResource root = defaultModuleResourceBuilder().slug("root").build(); + + JHipsterLandscape landscape = JHipsterLandscape.from(moduleResources(root, init)); + + assertThat(landscape.sort(List.of(moduleSlug("root"), moduleSlug("init")))).containsExactly(moduleSlug("init"), moduleSlug("root")); + } }