diff --git a/src/main/java/tech/jhipster/lite/module/domain/properties/JHipsterModuleProperties.java b/src/main/java/tech/jhipster/lite/module/domain/properties/JHipsterModuleProperties.java index 41381e7e48e..e790ef9908a 100644 --- a/src/main/java/tech/jhipster/lite/module/domain/properties/JHipsterModuleProperties.java +++ b/src/main/java/tech/jhipster/lite/module/domain/properties/JHipsterModuleProperties.java @@ -1,5 +1,7 @@ package tech.jhipster.lite.module.domain.properties; +import java.time.Instant; +import java.time.format.DateTimeParseException; import java.util.Map; import tech.jhipster.lite.error.domain.Assert; import tech.jhipster.lite.module.domain.Indentation; @@ -52,6 +54,15 @@ public String getOrDefaultString(String key, String defaultValue) { return parameters.getOrDefault(key, defaultValue, String.class, String::isBlank); } + public Instant getInstantOrDefault(String key, Instant defaultValue) { + String date = getOrDefaultString(key, defaultValue.toString()); + try { + return Instant.parse(date); + } catch (DateTimeParseException ex) { + throw InvalidPropertyTypeException.builder().key(key).expectedType(Instant.class).actualType(String.class); + } + } + public boolean getBoolean(String key) { return parameters.get(key, Boolean.class); } diff --git a/src/test/java/tech/jhipster/lite/module/domain/properties/JHipsterModulePropertiesTest.java b/src/test/java/tech/jhipster/lite/module/domain/properties/JHipsterModulePropertiesTest.java index df409ba0ef4..89f912713ad 100644 --- a/src/test/java/tech/jhipster/lite/module/domain/properties/JHipsterModulePropertiesTest.java +++ b/src/test/java/tech/jhipster/lite/module/domain/properties/JHipsterModulePropertiesTest.java @@ -2,6 +2,8 @@ import static org.assertj.core.api.Assertions.*; +import java.time.Instant; +import java.time.temporal.ChronoUnit; import java.util.Map; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -14,6 +16,9 @@ @UnitTest class JHipsterModulePropertiesTest { + private final Instant today = Instant.now(); + private final Instant yesterday = Instant.now().minus(1, ChronoUnit.DAYS); + @Nested @DisplayName("Mandatory String") class JHipsterModulePropertiesMandatoryStringTest { @@ -145,6 +150,27 @@ void shouldGetProperty() { } } + @Nested + @DisplayName("Instant") + class JHipsterModulePropertiesInstantTest { + + @ParameterizedTest + @ValueSource(strings = { "string", "boolean", "integer" }) + void shouldNotGetInvalidType(String key) { + assertThatThrownBy(() -> properties().getInstantOrDefault(key, today)).isExactlyInstanceOf(InvalidPropertyTypeException.class); + } + + @Test + void shouldGetProperty() { + assertThat(properties().getInstantOrDefault("instant", yesterday)).isEqualTo(today); + } + + @Test + void shouldGetUnknownProperty() { + assertThat(properties().getInstantOrDefault("unknown", yesterday)).isEqualTo(yesterday); + } + } + @Test void shouldGetDefaultProjectProperties() { JHipsterModuleProperties properties = properties(); @@ -156,6 +182,10 @@ void shouldGetDefaultProjectProperties() { } private JHipsterModuleProperties properties() { - return new JHipsterModuleProperties("/tmp/folder", false, Map.of("string", "value", "boolean", true, "integer", 42, "blank", " ")); + return new JHipsterModuleProperties( + "/tmp/folder", + false, + Map.of("string", "value", "boolean", true, "integer", 42, "blank", " ", "instant", today.toString()) + ); } }