using AmiReel.Services; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace AmiReel.Tests.Services; [TestClass] public class SourceRecordingFinderTests { private readonly List _tempDirectories = []; [TestCleanup] public void Cleanup() { foreach (string directory in _tempDirectories) { try { Directory.Delete(directory, true); } catch { } } } private string CreateTempDirectory() { string directory = Path.Combine(Path.GetTempPath(), "AmiReelTests", Guid.NewGuid().ToString("N")); Directory.CreateDirectory(directory); _tempDirectories.Add(directory); return directory; } [TestMethod] public void FindSequentialOutputs_WithMissingFolder_ReturnsEmpty() { // Act IReadOnlyList result = SourceRecordingFinder.FindSequentialOutputs( Path.Combine(Path.GetTempPath(), "AmiReelTests", "missing-" + Guid.NewGuid().ToString("N"))); // Assert Assert.AreEqual(0, result.Count); } [TestMethod] public void FindSequentialOutputs_WithBlankFolder_ReturnsEmpty() { // Act IReadOnlyList result = SourceRecordingFinder.FindSequentialOutputs(" "); // Assert Assert.AreEqual(0, result.Count); } [TestMethod] public void FindSequentialOutputs_WithOnlyOutputAvi_ReturnsSingleFile() { // Arrange string directory = CreateTempDirectory(); string first = Path.Combine(directory, "output.avi"); File.WriteAllText(first, "one"); // Act IReadOnlyList result = SourceRecordingFinder.FindSequentialOutputs(directory); // Assert Assert.AreEqual(1, result.Count); Assert.AreEqual(first, result[0]); } [TestMethod] public void FindSequentialOutputs_WithNumberedSequence_ReturnsFilesUntilFirstGap() { // Arrange string directory = CreateTempDirectory(); File.WriteAllText(Path.Combine(directory, "output.avi"), "0"); File.WriteAllText(Path.Combine(directory, "output_1.avi"), "1"); File.WriteAllText(Path.Combine(directory, "output_2.avi"), "2"); File.WriteAllText(Path.Combine(directory, "output_4.avi"), "skipped"); File.WriteAllText(Path.Combine(directory, "output.mp4"), "wrong-ext"); // Act IReadOnlyList result = SourceRecordingFinder.FindSequentialOutputs(directory); // Assert Assert.AreEqual(3, result.Count); Assert.AreEqual("output.avi", Path.GetFileName(result[0])); Assert.AreEqual("output_1.avi", Path.GetFileName(result[1])); Assert.AreEqual("output_2.avi", Path.GetFileName(result[2])); } [TestMethod] public void FindSequentialOutputs_WithoutBaseOutputAvi_ReturnsEmptyEvenIfNumberedExists() { // Arrange string directory = CreateTempDirectory(); File.WriteAllText(Path.Combine(directory, "output_1.avi"), "1"); // Act IReadOnlyList result = SourceRecordingFinder.FindSequentialOutputs(directory); // Assert Assert.AreEqual(0, result.Count); } }