diff --git a/pom.xml b/pom.xml index 436145c46..a849350e8 100644 --- a/pom.xml +++ b/pom.xml @@ -77,13 +77,6 @@ spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-devtools - true - - org.springframework.security diff --git a/src/main/java/edu/hawaii/its/groupings/configuration/LocalDevHotReloadConfig.java b/src/main/java/edu/hawaii/its/groupings/configuration/LocalDevHotReloadConfig.java new file mode 100644 index 000000000..e5f86be35 --- /dev/null +++ b/src/main/java/edu/hawaii/its/groupings/configuration/LocalDevHotReloadConfig.java @@ -0,0 +1,32 @@ +package edu.hawaii.its.groupings.configuration; + +import java.io.File; +import java.io.IOException; +import java.util.Objects; + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.core.io.ClassPathResource; +import org.thymeleaf.TemplateEngine; +import org.thymeleaf.templateresolver.FileTemplateResolver; + +@Configuration +@Profile({"localhost", "dockerhost"}) +public class LocalDevHotReloadConfig { + public LocalDevHotReloadConfig(final TemplateEngine templateEngine) throws IOException { + final ClassPathResource applicationProp = new ClassPathResource("application.properties"); + if (applicationProp.isFile()) { + File sourceRoot = applicationProp.getFile().getParentFile(); + while (Objects.requireNonNull(sourceRoot.listFiles((dir, name) -> name.equals("mvnw"))).length != 1) { + sourceRoot = sourceRoot.getParentFile(); + } + final FileTemplateResolver fileTemplateResolver = new FileTemplateResolver(); + fileTemplateResolver.setPrefix(sourceRoot.getPath() + "/src/main/resources/templates/"); + fileTemplateResolver.setSuffix(".html"); + fileTemplateResolver.setCacheable(false); + fileTemplateResolver.setCharacterEncoding("UTF-8"); + fileTemplateResolver.setCheckExistence(true); + templateEngine.setTemplateResolver(fileTemplateResolver); + } + } +} \ No newline at end of file diff --git a/src/test/java/edu/hawaii/its/groupings/configuration/LocalDevHotReloadConfigTest.java b/src/test/java/edu/hawaii/its/groupings/configuration/LocalDevHotReloadConfigTest.java new file mode 100644 index 000000000..0e11b1c13 --- /dev/null +++ b/src/test/java/edu/hawaii/its/groupings/configuration/LocalDevHotReloadConfigTest.java @@ -0,0 +1,50 @@ +package edu.hawaii.its.groupings.configuration; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.ActiveProfiles; +import org.thymeleaf.TemplateEngine; +import org.thymeleaf.templateresolver.FileTemplateResolver; +import org.thymeleaf.templateresolver.ITemplateResolver; + +import java.io.IOException; + +@ActiveProfiles({ "localhost", "dockerhost" }) +public class LocalDevHotReloadConfigTest { + + @MockBean + LocalDevHotReloadConfig localDevHotReloadConfig; + + @Test + public void testConstructorWithValidTemplateEngine() throws IOException { + TemplateEngine templateEngine = spy(new TemplateEngine()); + localDevHotReloadConfig = new LocalDevHotReloadConfig(templateEngine); + verify(templateEngine, times(1)).setTemplateResolver(any(ITemplateResolver.class)); + } + + @Test + public void testConstructorWithNullTemplateEngine() { + assertThrows(NullPointerException.class, () -> new LocalDevHotReloadConfig(null)); + } + + @Test + public void testConstructorConfiguresCorrectTemplateResolverProperties() throws IOException { + TemplateEngine templateEngine = new TemplateEngine(); + localDevHotReloadConfig = new LocalDevHotReloadConfig(templateEngine); + ITemplateResolver resolver = templateEngine.getTemplateResolvers().iterator().next(); + assertTrue(resolver instanceof FileTemplateResolver); + FileTemplateResolver fileResolver = (FileTemplateResolver) resolver; + assertFalse(fileResolver.isCacheable()); + assertEquals("UTF-8", fileResolver.getCharacterEncoding()); + assertTrue(fileResolver.getCheckExistence()); + } +}