From 4167b222ba36bb16aa343ce671af650dc08e5890 Mon Sep 17 00:00:00 2001 From: 0xb00bface <0xboobface@gmail.com> Date: Tue, 22 Sep 2020 14:58:20 +0200 Subject: [PATCH] Add test for Rename post-processor --- common/pom.xml | 5 + ...AbstractPlaceholderAwarePostProcessor.java | 5 +- .../postprocessing/RenameSingleFileTest.java | 127 ++++++++++++++++++ master/pom.xml | 18 +++ 4 files changed, 152 insertions(+), 3 deletions(-) create mode 100644 common/src/test/java/ctbrec/recorder/postprocessing/RenameSingleFileTest.java diff --git a/common/pom.xml b/common/pom.xml index 541444dc..c4e22ca7 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -75,6 +75,11 @@ junit test + + org.mockito + mockito-core + test + javax.xml.bind jaxb-api diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessor.java b/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessor.java index b790a724..545f795f 100644 --- a/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessor.java +++ b/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessor.java @@ -14,8 +14,7 @@ import ctbrec.Recording; public abstract class AbstractPlaceholderAwarePostProcessor extends AbstractPostProcessor { - @SuppressWarnings("unused") - private String[] placeHolders = { + public static final String[] PLACE_HOLDERS = { "${modelName}", "${modelDisplayName}", "${modelSanitizedName}", @@ -59,7 +58,7 @@ public abstract class AbstractPlaceholderAwarePostProcessor extends AbstractPost } private String replaceDateTime(Recording rec, String filename, String placeHolder, ZoneId zone) { - String pattern = "yyyy-mm-dd_HH-mm-ss"; + String pattern = "yyyy-MM-dd_HH-mm-ss"; Matcher m = Pattern.compile("\\$\\{" + placeHolder + "(?:\\((.*?)\\))?\\}").matcher(filename); if (m.find()) { String p = m.group(1); diff --git a/common/src/test/java/ctbrec/recorder/postprocessing/RenameSingleFileTest.java b/common/src/test/java/ctbrec/recorder/postprocessing/RenameSingleFileTest.java new file mode 100644 index 00000000..64399ad4 --- /dev/null +++ b/common/src/test/java/ctbrec/recorder/postprocessing/RenameSingleFileTest.java @@ -0,0 +1,127 @@ +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()); + } + + @Test + public void testOriginalFileReplacement() throws IOException { + Config config = mockConfig(); + + Recording rec = new Recording(); + rec.setModel(mockModel()); + rec.setAbsoluteFile(original); + rec.setStartDate(now); + 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}\\.ts").matcher(rec.getAbsoluteFile().getName()); + assertTrue(m.matches()); + assertEquals(rec.getAbsoluteFile(), rec.getPostProcessedFile()); + assertNotEquals(rec.getAbsoluteFile(), original); + } + + @Test + public void testEarlyExit() throws IOException { + Config config = mockConfig(); + Model model = mockModel(); + Recording rec = mock(Recording.class); + when(rec.getModel()).thenReturn(model); + when(rec.getAbsoluteFile()).thenReturn(original); + when(rec.getPostProcessedFile()).thenReturn(original); + 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.postprocess(rec, config); + } + + @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(original); + when(rec.getPostProcessedFile()).thenReturn(postProcessed); + when(rec.getStartDate()).thenReturn(now); + doThrow(new RuntimeException("Unexpected call of setAbsoluteFile")).when(rec).setAbsoluteFile(any()); + Rename pp = new Rename(); + pp.postprocess(rec, config); + } + + @Test + public void testToString() { + Rename pp = new Rename(); + assertEquals("rename", pp.toString()); + + 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; + } +} diff --git a/master/pom.xml b/master/pom.xml index f55c7825..68ef277c 100644 --- a/master/pom.xml +++ b/master/pom.xml @@ -26,6 +26,14 @@ maven-assembly-plugin 3.1.0 + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.2 + + true + + @@ -114,6 +122,12 @@ 4.12 test + + org.mockito + mockito-core + 3.5.11 + test + org.eclipse.jetty jetty-server @@ -126,4 +140,8 @@ + + + +