diff --git a/backend/src/main/java/org/raddatz/familienarchiv/importing/MassImportService.java b/backend/src/main/java/org/raddatz/familienarchiv/importing/MassImportService.java index e35d05cc..f58233ff 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/importing/MassImportService.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/importing/MassImportService.java @@ -99,7 +99,9 @@ public class MassImportService { @Value("${app.import.col.transcription:13}") private int colTranscription; - private static final String IMPORT_DIR = "/import"; + @Value("${app.import.dir:/import}") + private String importDir; + private static final DateTimeFormatter GERMAN_DATE = DateTimeFormatter.ofPattern("d. MMMM yyyy", Locale.GERMAN); // ODS XML namespaces @@ -129,7 +131,7 @@ public class MassImportService { } private File findSpreadsheetFile() throws IOException { - try (Stream files = Files.list(Paths.get(IMPORT_DIR))) { + try (Stream files = Files.list(Paths.get(importDir))) { return files .filter(p -> { String name = p.toString().toLowerCase(); @@ -137,7 +139,7 @@ public class MassImportService { }) .findFirst() .orElseThrow(() -> new RuntimeException( - "Keine Tabellendatei (.ods/.xlsx/.xls) in " + IMPORT_DIR + " gefunden!")) + "Keine Tabellendatei (.ods/.xlsx/.xls) in " + importDir + " gefunden!")) .toFile(); } } @@ -378,7 +380,7 @@ public class MassImportService { } private Optional findFileRecursive(String filename) { - try (Stream walk = Files.walk(Paths.get(IMPORT_DIR))) { + try (Stream walk = Files.walk(Paths.get(importDir))) { return walk.filter(p -> !Files.isDirectory(p)) .filter(p -> p.getFileName().toString().equals(filename)) .map(Path::toFile) diff --git a/backend/src/test/java/org/raddatz/familienarchiv/importing/MassImportServiceTest.java b/backend/src/test/java/org/raddatz/familienarchiv/importing/MassImportServiceTest.java index 7470f651..a5fe50c6 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/importing/MassImportServiceTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/importing/MassImportServiceTest.java @@ -50,6 +50,7 @@ class MassImportServiceTest { void setUp() { service = new MassImportService(documentService, personService, tagService, s3Client, thumbnailAsyncRunner); ReflectionTestUtils.setField(service, "bucketName", "test-bucket"); + ReflectionTestUtils.setField(service, "importDir", "/import"); ReflectionTestUtils.setField(service, "colIndex", 0); ReflectionTestUtils.setField(service, "colBox", 1); ReflectionTestUtils.setField(service, "colFolder", 2); @@ -79,6 +80,19 @@ class MassImportServiceTest { assertThat(service.getStatus().state()).isEqualTo(MassImportService.State.FAILED); } + @Test + void runImportAsync_readsFromConfiguredImportDir(@TempDir Path tempDir) { + // Empty temp dir → findSpreadsheetFile throws "no spreadsheet" with the + // configured path in the message. Proves the field, not a constant, + // drives the lookup. + ReflectionTestUtils.setField(service, "importDir", tempDir.toString()); + + service.runImportAsync(); + + assertThat(service.getStatus().state()).isEqualTo(MassImportService.State.FAILED); + assertThat(service.getStatus().message()).contains(tempDir.toString()); + } + @Test void runImportAsync_throwsConflict_whenAlreadyRunning() { MassImportService.ImportStatus running = new MassImportService.ImportStatus(