diff --git a/pom.xml b/pom.xml
index 3ce85b1..0e0eaa1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,6 +49,20 @@
2.1
+
+
+ org.testng
+ testng
+ 7.0.0
+ test
+
+
+
+ org.mockito
+ mockito-core
+ 5.12.0
+ test
+
diff --git a/src/main/java/tv/mangrana/config/ConfigLoader.java b/src/main/java/tv/mangrana/config/ConfigLoader.java
index 36fd610..d76aac4 100644
--- a/src/main/java/tv/mangrana/config/ConfigLoader.java
+++ b/src/main/java/tv/mangrana/config/ConfigLoader.java
@@ -2,11 +2,15 @@ package tv.mangrana.config;
import tv.mangrana.exception.IncorrectWorkingReferencesException;
+import static tv.mangrana.config.ConfigLoader.ProjectConfiguration.TEST_MODE;
+
public class ConfigLoader extends CommonConfigFileLoader {
private static final String CONFIG_FILE = "SonarrFixerConfig.yml";
private static ConfigLoader service;
+ private static boolean isUnitTesting = false;
+
private ConfigLoader() throws IncorrectWorkingReferencesException {
super(ProjectConfiguration.class);
}
@@ -25,6 +29,13 @@ public class ConfigLoader extends CommonConfigFileLoader MINIMUM_FILE_SIZE_TO_BE_CONSIDERED_A_VIDEO;
}
diff --git a/src/main/java/tv/mangrana/worker/FileCopier.java b/src/main/java/tv/mangrana/worker/FileCopier.java
index 2167d48..10d594f 100644
--- a/src/main/java/tv/mangrana/worker/FileCopier.java
+++ b/src/main/java/tv/mangrana/worker/FileCopier.java
@@ -6,7 +6,6 @@ import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
-import static tv.mangrana.config.ConfigLoader.ProjectConfiguration.TEST_MODE;
import static tv.mangrana.config.ConfigLoader.ProjectConfiguration.UPLOADS_PATHS;
class FileCopier {
@@ -14,7 +13,7 @@ class FileCopier {
try {
createDestinationFolderIfApply(destination);
- if (!ConfigLoader.isEnabled(TEST_MODE))
+ if (!ConfigLoader.isTestMode())
Files.createLink(destination, source);
} catch (IOException e) {
System.out.printf("error when creating hardlink with destination %s, error: %s%n",
@@ -27,7 +26,7 @@ class FileCopier {
var destinationFolder = destinationFile.getParent();
if (isTemporaryDestination(destinationFolder) && !Files.exists(destinationFolder)) {
System.out.printf("destination folder %s will be created", destinationFolder);
- if (!ConfigLoader.isEnabled(TEST_MODE))
+ if (!ConfigLoader.isTestMode())
Files.createDirectories(destinationFile);
}
}
diff --git a/src/main/java/tv/mangrana/worker/MainWorker.java b/src/main/java/tv/mangrana/worker/MainWorker.java
index 9505587..eda2c4f 100644
--- a/src/main/java/tv/mangrana/worker/MainWorker.java
+++ b/src/main/java/tv/mangrana/worker/MainWorker.java
@@ -3,28 +3,32 @@ package tv.mangrana.worker;
import tv.mangrana.config.ConfigLoader;
import tv.mangrana.exception.IncorrectWorkingReferencesException;
import tv.mangrana.sonarr.Sonarr;
-
-import static tv.mangrana.config.ConfigLoader.ProjectConfiguration.TEST_MODE;
+import tv.mangrana.sonarr.api.client.gateway.SonarrApiGateway;
public class MainWorker {
private final QueueFixer queueFixer;
public static void main(String[] args) throws IncorrectWorkingReferencesException {
- var worker = new MainWorker();
+ SonarrApiGateway sonarrApiGateway = configureSonarApiGateway();
+ var worker = new MainWorker(sonarrApiGateway);
worker.work();
}
- private MainWorker() throws IncorrectWorkingReferencesException {
+ private static SonarrApiGateway configureSonarApiGateway() {
var configLoader = ConfigLoader.getLoader();
- if (ConfigLoader.isEnabled(TEST_MODE))
- System.out.println("ATTENTION! TEST MODE ENABLED. No folders will be created nor files copied.");
-
Sonarr.initService(configLoader);
- queueFixer = new QueueFixer();
+ return Sonarr.api();
}
- private void work() {
+ MainWorker(SonarrApiGateway sonarGateway) throws IncorrectWorkingReferencesException {
+ if (ConfigLoader.isTestMode())
+ System.out.println("ATTENTION! TEST MODE ENABLED. No folders will be created nor files copied.");
+
+ queueFixer = new QueueFixer(sonarGateway);
+ }
+
+ void work() {
queueFixer.fix();
}
}
diff --git a/src/main/java/tv/mangrana/worker/QueueFixer.java b/src/main/java/tv/mangrana/worker/QueueFixer.java
index 549c51a..f73c5cc 100644
--- a/src/main/java/tv/mangrana/worker/QueueFixer.java
+++ b/src/main/java/tv/mangrana/worker/QueueFixer.java
@@ -1,7 +1,6 @@
package tv.mangrana.worker;
import tv.mangrana.config.ConfigLoader;
-import tv.mangrana.sonarr.Sonarr;
import tv.mangrana.sonarr.api.client.gateway.SonarrApiGateway;
import tv.mangrana.sonarr.api.schema.queue.Record;
import tv.mangrana.sonarr.api.schema.series.SonarrSerie;
@@ -11,16 +10,14 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.List;
-import static tv.mangrana.config.ConfigLoader.ProjectConfiguration.TEST_MODE;
-
public class QueueFixer {
final static String IMPORT_FAILURE_BECAUSE_MATCHED_BY_ID = "Found matching series via grab history, but release was matched to series by ID. Automatic import is not possible. See the FAQ for details.";
private final SonarrApiGateway sonarrApiGateway;
private final FailedImportFixer.Factory fixerFactory;
- QueueFixer() {
- sonarrApiGateway = Sonarr.api();
+ QueueFixer(SonarrApiGateway sonarGateway) {
+ sonarrApiGateway = sonarGateway;
fixerFactory = FailedImportFixer.factory();
}
@@ -67,7 +64,7 @@ public class QueueFixer {
private void cleanWorkedElementsFromQueue(List sonarQueue, List recordsToFix) {
List workedTitles = mapRecord2Title(recordsToFix);
List recordIds2Delete = filterPresentTitlesFromQueue(sonarQueue, workedTitles);
- if (!ConfigLoader.isEnabled(TEST_MODE))
+ if (!ConfigLoader.isTestMode())
sonarrApiGateway.deleteQueueElements(recordIds2Delete);
}
diff --git a/src/test/java/tv/mangrana/worker/SonarQueueFixerTest.java b/src/test/java/tv/mangrana/worker/SonarQueueFixerTest.java
new file mode 100644
index 0000000..7023a84
--- /dev/null
+++ b/src/test/java/tv/mangrana/worker/SonarQueueFixerTest.java
@@ -0,0 +1,63 @@
+package tv.mangrana.worker;
+
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+import tv.mangrana.config.ConfigLoader;
+import tv.mangrana.sonarr.api.client.gateway.SonarrApiGateway;
+import tv.mangrana.sonarr.api.schema.queue.Record;
+import tv.mangrana.sonarr.api.schema.queue.StatusMessage;
+import tv.mangrana.sonarr.api.schema.series.SonarrSerie;
+
+import java.util.List;
+
+import static org.mockito.Mockito.*;
+import static tv.mangrana.worker.QueueFixer.IMPORT_FAILURE_BECAUSE_MATCHED_BY_ID;
+
+public class SonarQueueFixerTest {
+
+ private SonarrApiGateway sonarrApiGateway;
+
+ private MainWorker mainWorker;
+
+ @BeforeMethod
+ public void setup() {
+ ConfigLoader.weAreUnitTesting();
+ sonarrApiGateway = mock(SonarrApiGateway.class, RETURNS_DEEP_STUBS);
+ mainWorker = new MainWorker(sonarrApiGateway);
+ }
+
+ @Test //just for debugging purpose
+ public void whenDestinationFolderDoesNotExist_AndIsTemporary_shouldCreateIt_AndHardlinkFiles() {
+ prepareSonarrMockQueue();
+ prepareSonarrMockSerie();
+
+ mainWorker.work();
+
+ //asserting nothing, sorry (too stuff would be needed to be mocked, and it's not worthy at this moment)
+ }
+
+ private void prepareSonarrMockQueue() {
+ var record = new Record()
+ .withSeriesId(getRandomInteger())
+ .withTitle("Star Trek (1987) S01 [1080p]")
+ .withOutputPath("./test/torrents/Star Trek (1987) S01 [1080p]")
+ .withStatusMessages(prepareWarningMessages());
+ when(sonarrApiGateway.getFullQueue().getRecords()).thenReturn(List.of(record));
+ }
+
+ private int getRandomInteger() {
+ return Double.valueOf(Math.random()*100).intValue();
+ }
+
+ private List prepareWarningMessages() {
+ return List.of(new StatusMessage()
+ .withMessages(List.of(IMPORT_FAILURE_BECAUSE_MATCHED_BY_ID)));
+ }
+
+ private void prepareSonarrMockSerie() {
+ SonarrSerie serie = new SonarrSerie()
+ .withPath("./test/sonarr_uploads/Star Trek (1987) {tvdb-71470}");
+ when(sonarrApiGateway.getSerieById(anyInt())).thenReturn(serie);
+ }
+
+}
\ No newline at end of file
diff --git a/test/torrents/Star Trek (1987) S01 [1080p]/Star Trek (1987) S01 [1080p] E01.fakeVideo b/test/torrents/Star Trek (1987) S01 [1080p]/Star Trek (1987) S01 [1080p] E01.fakeVideo
new file mode 100644
index 0000000..e69de29