diff --git a/pom.xml b/pom.xml index 5b073f8..4d8fab2 100644 --- a/pom.xml +++ b/pom.xml @@ -140,6 +140,25 @@ + + org.jacoco + jacoco-maven-plugin + 0.8.11 + + + + prepare-agent + + + + report + test + + report + + + + org.springframework.boot spring-boot-maven-plugin diff --git a/src/main/java/dev/kruhlmann/imgfloat/model/Channel.java b/src/main/java/dev/kruhlmann/imgfloat/model/Channel.java index a93b668..19e8749 100644 --- a/src/main/java/dev/kruhlmann/imgfloat/model/Channel.java +++ b/src/main/java/dev/kruhlmann/imgfloat/model/Channel.java @@ -10,9 +10,9 @@ import jakarta.persistence.JoinColumn; import jakarta.persistence.PrePersist; import jakarta.persistence.PreUpdate; import jakarta.persistence.Table; +import java.time.Instant; import java.util.Collections; import java.util.HashSet; -import java.time.Instant; import java.util.Locale; import java.util.Set; import java.util.stream.Collectors; diff --git a/src/main/resources/static/css/styles.css b/src/main/resources/static/css/styles.css index ec8d673..441a784 100644 --- a/src/main/resources/static/css/styles.css +++ b/src/main/resources/static/css/styles.css @@ -1586,6 +1586,12 @@ button:disabled:hover { .asset-row .meta { flex: 1; + overflow: hidden; +} + +.asset-row strong { + white-space: nowrap; + overflow: hidden; } .asset-item .meta { diff --git a/src/test/java/dev/kruhlmann/imgfloat/config/SystemEnvironmentValidatorTest.java b/src/test/java/dev/kruhlmann/imgfloat/config/SystemEnvironmentValidatorTest.java new file mode 100644 index 0000000..961bc77 --- /dev/null +++ b/src/test/java/dev/kruhlmann/imgfloat/config/SystemEnvironmentValidatorTest.java @@ -0,0 +1,57 @@ +package dev.kruhlmann.imgfloat.config; + +import static org.assertj.core.api.Assertions.assertThatCode; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import org.junit.jupiter.api.Test; +import org.springframework.core.env.Environment; +import org.springframework.mock.env.MockEnvironment; +import org.springframework.test.util.ReflectionTestUtils; + +class SystemEnvironmentValidatorTest { + + @Test + void validateSkipsWhenBootstrappedForTests() { + Environment environment = new MockEnvironment().withProperty( + "org.springframework.boot.test.context.SpringBootTestContextBootstrapper", + "true" + ); + SystemEnvironmentValidator validator = new SystemEnvironmentValidator(environment); + + assertThatCode(validator::validate).doesNotThrowAnyException(); + } + + @Test + void validateThrowsWhenRequiredFieldsMissing() { + Environment environment = new MockEnvironment(); + SystemEnvironmentValidator validator = new SystemEnvironmentValidator(environment); + setRequiredFields(validator); + ReflectionTestUtils.setField(validator, "twitchClientId", ""); + + assertThatThrownBy(validator::validate) + .isInstanceOf(IllegalStateException.class) + .hasMessageContaining("TWITCH_CLIENT_ID"); + } + + @Test + void validateAcceptsAllRequiredFields() { + Environment environment = new MockEnvironment(); + SystemEnvironmentValidator validator = new SystemEnvironmentValidator(environment); + setRequiredFields(validator); + + assertThatCode(validator::validate).doesNotThrowAnyException(); + } + + private void setRequiredFields(SystemEnvironmentValidator validator) { + ReflectionTestUtils.setField(validator, "twitchClientId", "client-id"); + ReflectionTestUtils.setField(validator, "twitchClientSecret", "client-secret"); + ReflectionTestUtils.setField(validator, "springMaxFileSize", "10MB"); + ReflectionTestUtils.setField(validator, "springMaxRequestSize", "12MB"); + ReflectionTestUtils.setField(validator, "assetsPath", "/tmp/assets"); + ReflectionTestUtils.setField(validator, "previewsPath", "/tmp/previews"); + ReflectionTestUtils.setField(validator, "dbPath", "/tmp/db"); + ReflectionTestUtils.setField(validator, "initialSysadmin", "admin"); + ReflectionTestUtils.setField(validator, "githubOwner", "owner"); + ReflectionTestUtils.setField(validator, "githubRepo", "repo"); + } +} diff --git a/src/test/java/dev/kruhlmann/imgfloat/util/LogSanitizerTest.java b/src/test/java/dev/kruhlmann/imgfloat/util/LogSanitizerTest.java new file mode 100644 index 0000000..b9e371b --- /dev/null +++ b/src/test/java/dev/kruhlmann/imgfloat/util/LogSanitizerTest.java @@ -0,0 +1,23 @@ +package dev.kruhlmann.imgfloat.util; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class LogSanitizerTest { + + @Test + void sanitizeReturnsNullForNullInput() { + assertThat(LogSanitizer.sanitize(null)).isNull(); + } + + @Test + void sanitizeReplacesNewlinesWithUnderscores() { + assertThat(LogSanitizer.sanitize("alpha\nBravo\r\ncharlie")).isEqualTo("alpha_Bravo_charlie"); + } + + @Test + void sanitizeLeavesStringsWithoutNewlinesUntouched() { + assertThat(LogSanitizer.sanitize("no-newlines-here")).isEqualTo("no-newlines-here"); + } +}