diff --git a/pom.xml b/pom.xml index eeec0ec..f54e9b9 100644 --- a/pom.xml +++ b/pom.xml @@ -450,6 +450,12 @@ 5.20.0 test + + org.mockito + mockito-junit-jupiter + 5.20.0 + test + org.junit.jupiter diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileFilterTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileFilterTest.java new file mode 100644 index 0000000..f06582c --- /dev/null +++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/FileFilterTest.java @@ -0,0 +1,71 @@ +package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl; + +import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.Config; +import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.DateUtils; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.io.File; +import java.nio.file.Path; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.Date; +import java.util.List; +import java.util.regex.Pattern; +import java.util.stream.Stream; + +import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.PathUtils.TEST_FILE; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class FileFilterTest { + @Mock(strictness = Mock.Strictness.LENIENT) + File file; + + @Mock(strictness = Mock.Strictness.LENIENT) + BasicFileAttributes attributes; + + @BeforeEach + void beforeEach() { + + } + + private static Stream accept() { + return Stream.of( + Arguments.of("~/video.mkv", new String[]{".mkv"}, null, null, ".*", true), + Arguments.of("~/video.mp4", new String[]{".mkv"}, null, null, ".*", false), + + Arguments.of("~/video.mkv", new String[]{".mkv"}, null, null, "v.*", true), + Arguments.of("~/video.mkv", new String[]{".mkv"}, null, null, "a.*", false), + + Arguments.of("~/video.mkv", new String[]{".mkv"}, new Date(System.currentTimeMillis() - 1000), new Date(), ".*", false), + Arguments.of("~/video.mkv", new String[]{".mkv"}, new Date(), new Date(System.currentTimeMillis() - 1000), ".*", true) + ); + } + + @ParameterizedTest + @MethodSource + void accept(String path, String[] args, Date fileCreationDate, Date filterDate, String pattern, boolean expected) { + when(file.getAbsolutePath()).thenReturn(path); + when(file.getName()).thenReturn(List.of(path.split("/")).get(1)); + when(file.toPath()).thenReturn(Path.of(TEST_FILE)); + + Config.getInstance(true).setIncludePattern(Pattern.compile(pattern)); + if (filterDate != null) Config.getInstance().setFilterDate(filterDate); + + try (MockedStatic mockedFiles = Mockito.mockStatic(DateUtils.class)) { + mockedFiles + .when(() -> DateUtils.convert(anyLong())) + .thenReturn(fileCreationDate); + + assertEquals(expected, FileFilter.accept(file, args)); + } + } +} \ No newline at end of file diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/TestUtil.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/TestUtil.java index 00425c9..fddc343 100644 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/TestUtil.java +++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/TestUtil.java @@ -1,33 +1,12 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.util; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.ValidationResult; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig; -import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileAttribute; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileInfo; -import org.junit.jupiter.params.provider.Arguments; -import java.util.Arrays; import java.util.Set; -import static java.util.stream.Collectors.joining; - public class TestUtil { - public static String yamlList(ConfigProperty main, ConfigProperty... child) { - return main.prop() + ":\n" + Arrays.stream(child) - .map(ConfigProperty::prop) - .collect(joining("\n", " - ", "")); - } - - public static Arguments argumentsOf(ConfigProperty property, boolean required, T defaultValue, String yaml, String[] cmd, - ValidationResult result) { - return Arguments.of(property, required, defaultValue, yaml, cmd, result); - } - - public static Arguments argumentsOf(ConfigProperty property, boolean required, boolean append, String yaml, String[] cmd, - ValidationResult result, int expectedSize) { - return Arguments.of(property, required, append, yaml, cmd, result, expectedSize); - } public static FileInfo createFileInfoAudio(Set defaultAudio, FileAttribute desiredAudio, AttributeConfig config) { FileInfo fileInfo = new FileInfo(null);