Skip to content

Commit

Permalink
Fix Hot Reload (#1045)
Browse files Browse the repository at this point in the history
  • Loading branch information
gitCarrot authored Dec 3, 2024
1 parent 256114a commit d073af0
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 7 deletions.
7 changes: 0 additions & 7 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -77,13 +77,6 @@
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<!-- hot swapping, disable cache for template, enable live reload -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>

<!-- More Spring pieces. -->
<dependency>
<groupId>org.springframework.security</groupId>
Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
}
}
Original file line number Diff line number Diff line change
@@ -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());
}
}

0 comments on commit d073af0

Please sign in to comment.