From d23f3fea0497cce92cc3272085c639560804a767 Mon Sep 17 00:00:00 2001 From: 0xb00bface <0xboobface@gmail.com> Date: Tue, 22 Sep 2020 17:40:03 +0200 Subject: [PATCH] Add test for Rename pp for directories --- ...AbstractPlaceholderAwarePostProcessor.java | 8 ++- .../recorder/postprocessing/Rename.java | 4 +- .../postprocessing/AbstractPpTest.java | 72 +++++++++++++++++++ .../postprocessing/RenameDirectoryTest.java | 52 ++++++++++++++ .../postprocessing/RenameSingleFileTest.java | 60 +--------------- 5 files changed, 136 insertions(+), 60 deletions(-) create mode 100644 common/src/test/java/ctbrec/recorder/postprocessing/AbstractPpTest.java create mode 100644 common/src/test/java/ctbrec/recorder/postprocessing/RenameDirectoryTest.java diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessor.java b/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessor.java index 545f795f..8831b687 100644 --- a/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessor.java +++ b/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessor.java @@ -78,8 +78,12 @@ public abstract class AbstractPlaceholderAwarePostProcessor extends AbstractPost } private CharSequence getFileSuffix(Recording rec) { - String filename = rec.getPostProcessedFile().getName(); - return filename.substring(filename.lastIndexOf('.') + 1); + if(rec.isSingleFile()) { + String filename = rec.getPostProcessedFile().getName(); + return filename.substring(filename.lastIndexOf('.') + 1); + } else { + return ""; + } } private CharSequence getSanitizedSiteName(Recording rec) { diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/Rename.java b/common/src/main/java/ctbrec/recorder/postprocessing/Rename.java index 4789f029..bb1960c5 100644 --- a/common/src/main/java/ctbrec/recorder/postprocessing/Rename.java +++ b/common/src/main/java/ctbrec/recorder/postprocessing/Rename.java @@ -15,6 +15,7 @@ public class Rename extends AbstractPlaceholderAwarePostProcessor { private static final Logger LOG = LoggerFactory.getLogger(Rename.class); public static final String FILE_NAME_TEMPLATE = "filename.template"; public static final String DEFAULT = "${modelSanitizedName}_${localDateTime}.${fileSuffix}"; + public static final String DEFAULT_DIR = "${modelSanitizedName}_${localDateTime}"; @Override public String getName() { @@ -23,7 +24,8 @@ public class Rename extends AbstractPlaceholderAwarePostProcessor { @Override public void postprocess(Recording rec, Config config) throws IOException { - String filenameTemplate = getConfig().getOrDefault(FILE_NAME_TEMPLATE, DEFAULT); + String defaultTemplate = rec.isSingleFile() ? DEFAULT : DEFAULT_DIR; + String filenameTemplate = getConfig().getOrDefault(FILE_NAME_TEMPLATE, defaultTemplate); String filename = fillInPlaceHolders(filenameTemplate, rec, config); File src = rec.getPostProcessedFile(); File target = new File(src.getParentFile(), filename); diff --git a/common/src/test/java/ctbrec/recorder/postprocessing/AbstractPpTest.java b/common/src/test/java/ctbrec/recorder/postprocessing/AbstractPpTest.java new file mode 100644 index 00000000..ba0f11ff --- /dev/null +++ b/common/src/test/java/ctbrec/recorder/postprocessing/AbstractPpTest.java @@ -0,0 +1,72 @@ +package ctbrec.recorder.postprocessing; + +import static java.nio.charset.StandardCharsets.*; +import static java.nio.file.StandardOpenOption.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.Instant; + +import org.apache.commons.io.FileUtils; +import org.junit.After; +import org.junit.Before; + +import ctbrec.Config; +import ctbrec.Model; +import ctbrec.Settings; +import ctbrec.sites.Site; +import ctbrec.sites.chaturbate.Chaturbate; + +public abstract class AbstractPpTest { + Path baseDir; + Path recDir; + File original; + File postProcessed; + File originalDir; + File postProcessedDir; + Instant now = Instant.now(); + + @Before + public void setup() throws IOException { + baseDir = Files.createTempDirectory("ctbrec_test_"); + recDir = baseDir.resolve("recordings"); + original = new File(recDir.toFile(), "original.ts"); + postProcessed = new File(recDir.toFile(), "postProcessed.ts"); + originalDir = new File(recDir.toFile(), "original"); + postProcessedDir = new File(recDir.toFile(), "postProcessed"); + Files.createDirectories(original.getParentFile().toPath()); + Files.write(original.toPath(), "foobar".getBytes(UTF_8), CREATE_NEW, WRITE, TRUNCATE_EXISTING); + Files.write(postProcessed.toPath(), "foobar".getBytes(UTF_8), CREATE_NEW, WRITE, TRUNCATE_EXISTING); + Files.createDirectories(originalDir.toPath()); + FileUtils.touch(new File(originalDir, "playlist.m3u8")); + } + + @After + public void teardown() throws IOException { + FileUtils.deleteDirectory(baseDir.toFile()); + } + + Config mockConfig() { + Config config = mock(Config.class); + when(config.getSettings()).thenReturn(mockSettings()); + when(config.getModelNotes(any())).thenReturn("tag, foo, bar"); + return config; + } + + Model mockModel() { + Site site = new Chaturbate(); + Model model = site.createModel("Mockita"); + model.setDisplayName("Mockita Boobilicious"); + return model; + } + + Settings mockSettings() { + Settings settings = new Settings(); + settings.recordingsDir = recDir.toString(); + return settings; + } +} diff --git a/common/src/test/java/ctbrec/recorder/postprocessing/RenameDirectoryTest.java b/common/src/test/java/ctbrec/recorder/postprocessing/RenameDirectoryTest.java new file mode 100644 index 00000000..067bcfbc --- /dev/null +++ b/common/src/test/java/ctbrec/recorder/postprocessing/RenameDirectoryTest.java @@ -0,0 +1,52 @@ +package ctbrec.recorder.postprocessing; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.io.IOException; +import java.nio.file.Files; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.junit.Test; + +import ctbrec.Config; +import ctbrec.Model; +import ctbrec.Recording; + +public class RenameDirectoryTest extends AbstractPpTest { + + @Test + public void testOriginalFileReplacement() throws IOException { + Config config = mockConfig(); + Recording rec = new Recording(); + rec.setModel(mockModel()); + rec.setAbsoluteFile(originalDir); + rec.setStartDate(now); + rec.setSingleFile(false); + Rename pp = new Rename(); + pp.postprocess(rec, config); + + Matcher m = Pattern.compile("Mockita_\\d{4}-\\d{2}-\\d{2}_\\d{2}-\\d{2}-\\d{2}").matcher(rec.getAbsoluteFile().getName()); + assertTrue(m.matches()); + assertEquals(rec.getAbsoluteFile(), rec.getPostProcessedFile()); + assertNotEquals(rec.getAbsoluteFile(), original); + } + + @Test + public void absoluteFileShouldKeepBeingOriginalIfFilesDiffer() throws IOException { + Config config = mockConfig(); + Model model = mockModel(); + Recording rec = mock(Recording.class); + when(rec.getModel()).thenReturn(model); + when(rec.getAbsoluteFile()).thenReturn(originalDir); + when(rec.getPostProcessedFile()).thenReturn(postProcessedDir); + when(rec.getStartDate()).thenReturn(now); + doThrow(new RuntimeException("Unexpected call of setAbsoluteFile")).when(rec).setAbsoluteFile(any()); + + Files.createDirectories(postProcessedDir.toPath()); + Rename pp = new Rename(); + pp.postprocess(rec, config); + } +} diff --git a/common/src/test/java/ctbrec/recorder/postprocessing/RenameSingleFileTest.java b/common/src/test/java/ctbrec/recorder/postprocessing/RenameSingleFileTest.java index 64399ad4..4b065664 100644 --- a/common/src/test/java/ctbrec/recorder/postprocessing/RenameSingleFileTest.java +++ b/common/src/test/java/ctbrec/recorder/postprocessing/RenameSingleFileTest.java @@ -1,63 +1,29 @@ package ctbrec.recorder.postprocessing; -import static java.nio.charset.StandardCharsets.*; -import static java.nio.file.StandardOpenOption.*; import static org.junit.Assert.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; -import java.io.File; import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.time.Instant; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.apache.commons.io.FileUtils; -import org.junit.After; -import org.junit.Before; import org.junit.Test; import ctbrec.Config; import ctbrec.Model; import ctbrec.Recording; -import ctbrec.Settings; -import ctbrec.sites.Site; -import ctbrec.sites.chaturbate.Chaturbate; -public class RenameSingleFileTest { - - private Path baseDir; - private Path recDir; - private File original; - private File postProcessed; - private Instant now = Instant.now(); - - @Before - public void setup() throws IOException { - baseDir = Files.createTempDirectory("ctbrec_test_"); - recDir = baseDir.resolve("recordings"); - original = new File(recDir.toFile(), "original.ts"); - postProcessed = new File(recDir.toFile(), "postProcessed.ts"); - Files.createDirectories(original.getParentFile().toPath()); - Files.write(original.toPath(), "foobar".getBytes(UTF_8), CREATE_NEW, WRITE, TRUNCATE_EXISTING); - Files.write(postProcessed.toPath(), "foobar".getBytes(UTF_8), CREATE_NEW, WRITE, TRUNCATE_EXISTING); - } - - @After - public void teardown() throws IOException { - FileUtils.deleteDirectory(baseDir.toFile()); - } +public class RenameSingleFileTest extends AbstractPpTest { @Test public void testOriginalFileReplacement() throws IOException { Config config = mockConfig(); - Recording rec = new Recording(); rec.setModel(mockModel()); rec.setAbsoluteFile(original); rec.setStartDate(now); + rec.setSingleFile(true); Rename pp = new Rename(); pp.postprocess(rec, config); @@ -78,7 +44,7 @@ public class RenameSingleFileTest { when(rec.getStartDate()).thenReturn(now); doThrow(new RuntimeException("Unexpected call of setAbsoluteFile")).when(rec).setAbsoluteFile(any()); Rename pp = new Rename(); - pp.getConfig().put(Rename.FILE_NAME_TEMPLATE, "original.ts"); + pp.getConfig().put(Rename.FILE_NAME_TEMPLATE, original.getName()); pp.postprocess(rec, config); } @@ -104,24 +70,4 @@ public class RenameSingleFileTest { pp.getConfig().put(Rename.FILE_NAME_TEMPLATE, Rename.DEFAULT); assertEquals("rename [${modelSanitizedName}_${localDateTime}.${fileSuffix}]", pp.toString()); } - - Config mockConfig() { - Config config = mock(Config.class); - when(config.getSettings()).thenReturn(mockSettings()); - when(config.getModelNotes(any())).thenReturn("tag, foo, bar"); - return config; - } - - Model mockModel() { - Site site = new Chaturbate(); - Model model = site.createModel("Mockita"); - model.setDisplayName("Mockita Boobilicious"); - return model; - } - - Settings mockSettings() { - Settings settings = new Settings(); - settings.recordingsDir = recDir.toString(); - return settings; - } }