forked from jsl/video_editing_poc
Complete scheduler state transition tests
This commit is contained in:
parent
4b0be45be0
commit
f96d0689e1
|
|
@ -28,7 +28,7 @@ Note: the local machine's filesystem root is read-only in this workspace, so abs
|
||||||
8. [x] Add FFmpeg clipping into `/output/clips/<video-name>/` using 8-second MP4/H.264/AAC segments.
|
8. [x] Add FFmpeg clipping into `/output/clips/<video-name>/` using 8-second MP4/H.264/AAC segments.
|
||||||
9. [x] Add success handling that moves processed source files to processed storage.
|
9. [x] Add success handling that moves processed source files to processed storage.
|
||||||
10. [x] Add failure handling for FFmpeg or filesystem errors.
|
10. [x] Add failure handling for FFmpeg or filesystem errors.
|
||||||
11. [ ] Add unit tests for ordering, invalid-file handling, repeat prevention, and state transitions.
|
11. [x] Add unit tests for ordering, invalid-file handling, repeat prevention, and state transitions.
|
||||||
12. [ ] Add optional FFmpeg integration test for a short fixture.
|
12. [ ] Add optional FFmpeg integration test for a short fixture.
|
||||||
13. [ ] Add local profile or documented runtime config for enabling the scheduler.
|
13. [ ] Add local profile or documented runtime config for enabling the scheduler.
|
||||||
14. [ ] Run verification and mark feature complete.
|
14. [ ] Run verification and mark feature complete.
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,8 @@ import java.nio.file.Path;
|
||||||
import java.nio.file.attribute.PosixFilePermission;
|
import java.nio.file.attribute.PosixFilePermission;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
@ -122,6 +124,31 @@ class FolderVideoScanSchedulerTest {
|
||||||
assertEquals("video", Files.readString(tempDir.resolve("processed/1.mp4")));
|
assertEquals("video", Files.readString(tempDir.resolve("processed/1.mp4")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void processesOneCandidatePerScanInNaturalOrder() throws Exception {
|
||||||
|
Files.writeString(tempDir.resolve("2.mp4"), "second");
|
||||||
|
Files.writeString(tempDir.resolve("1.mp4"), "first");
|
||||||
|
List<String> clippedSources = new ArrayList<>();
|
||||||
|
FolderFfmpegClipper clipper = mock(FolderFfmpegClipper.class);
|
||||||
|
when(clipper.clip(any())).thenAnswer(invocation -> {
|
||||||
|
Path source = invocation.getArgument(0);
|
||||||
|
clippedSources.add(source.getFileName().toString());
|
||||||
|
return new FolderFfmpegClipper.ClipResult(tempDir.resolve("output/result"), 1);
|
||||||
|
});
|
||||||
|
FolderVideoScanScheduler scheduler = scheduler(tempDir, acceptedValidator(), clipper);
|
||||||
|
|
||||||
|
scheduler.scan();
|
||||||
|
|
||||||
|
assertEquals(List.of("1.mp4"), clippedSources);
|
||||||
|
assertTrue(Files.exists(tempDir.resolve("processed/1.mp4")));
|
||||||
|
assertTrue(Files.exists(tempDir.resolve("2.mp4")));
|
||||||
|
|
||||||
|
scheduler.scan();
|
||||||
|
|
||||||
|
assertEquals(List.of("1.mp4", "2.mp4"), clippedSources);
|
||||||
|
assertTrue(Files.exists(tempDir.resolve("processed/2.mp4")));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void invalidCandidateIsMovedToRejectedDirectory() throws Exception {
|
void invalidCandidateIsMovedToRejectedDirectory() throws Exception {
|
||||||
Files.writeString(tempDir.resolve("invalid.mp4"), "not video");
|
Files.writeString(tempDir.resolve("invalid.mp4"), "not video");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue