diff --git a/src/main/java/com/krotname/javasoundrecorder/config/UserPreferences.java b/src/main/java/com/krotname/javasoundrecorder/config/UserPreferences.java index 45398e4..d55309e 100644 --- a/src/main/java/com/krotname/javasoundrecorder/config/UserPreferences.java +++ b/src/main/java/com/krotname/javasoundrecorder/config/UserPreferences.java @@ -2,6 +2,7 @@ import java.nio.file.Path; import java.time.Duration; +import java.util.Objects; import java.util.Optional; public record UserPreferences( @@ -10,10 +11,10 @@ public record UserPreferences( Optional uploadEnabled, Optional audioInputName) { public UserPreferences { - recordingDuration = recordingDuration == null ? Optional.empty() : recordingDuration; - recordingDirectory = recordingDirectory == null ? Optional.empty() : recordingDirectory; - uploadEnabled = uploadEnabled == null ? Optional.empty() : uploadEnabled; - audioInputName = audioInputName == null ? Optional.empty() : audioInputName.map(String::trim) + recordingDuration = Objects.requireNonNull(recordingDuration, "recordingDuration"); + recordingDirectory = Objects.requireNonNull(recordingDirectory, "recordingDirectory"); + uploadEnabled = Objects.requireNonNull(uploadEnabled, "uploadEnabled"); + audioInputName = Objects.requireNonNull(audioInputName, "audioInputName").map(String::trim) .filter(value -> !value.isEmpty()); } diff --git a/src/test/java/com/krotname/javasoundrecorder/config/UserPreferencesTest.java b/src/test/java/com/krotname/javasoundrecorder/config/UserPreferencesTest.java new file mode 100644 index 0000000..b5c2ebf --- /dev/null +++ b/src/test/java/com/krotname/javasoundrecorder/config/UserPreferencesTest.java @@ -0,0 +1,40 @@ +package com.krotname.javasoundrecorder.config; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import java.util.Optional; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.function.Executable; + +class UserPreferencesTest { + @Test + void rejectsNullRecordingDuration() { + assertNullComponent("recordingDuration", + () -> new UserPreferences(null, Optional.empty(), Optional.empty(), Optional.empty())); + } + + @Test + void rejectsNullRecordingDirectory() { + assertNullComponent("recordingDirectory", + () -> new UserPreferences(Optional.empty(), null, Optional.empty(), Optional.empty())); + } + + @Test + void rejectsNullUploadEnabled() { + assertNullComponent("uploadEnabled", + () -> new UserPreferences(Optional.empty(), Optional.empty(), null, Optional.empty())); + } + + @Test + void rejectsNullAudioInputName() { + assertNullComponent("audioInputName", + () -> new UserPreferences(Optional.empty(), Optional.empty(), Optional.empty(), null)); + } + + private static void assertNullComponent(String componentName, Executable constructor) { + NullPointerException error = assertThrows(NullPointerException.class, constructor); + + assertEquals(componentName, error.getMessage()); + } +}