using System.IO; using System.Linq; using SongTidy.Services; namespace SongTidy.Tests; /// /// Contains tests for . /// [TestClass] public sealed class AudioFileScannerTests { private string _tempDirectory = string.Empty; /// /// Creates a unique temporary directory for the current test. /// [TestInitialize] public void Initialize() { _tempDirectory = Path.Combine(Path.GetTempPath(), $"SongTidy Scanner {Guid.NewGuid():N}"); Directory.CreateDirectory(_tempDirectory); } /// /// Removes the temporary directory created for the current test. /// [TestCleanup] public void Cleanup() { Directory.Delete(_tempDirectory, recursive: true); } /// /// Verifies that supported extensions are matched case-insensitively and others are ignored. /// [TestMethod] public void ScansSupportedExtensionsCaseInsensitively() { CreateFile("a.mp3"); CreateFile("b.FLAC"); CreateFile("c.txt"); IReadOnlyList files = AudioFileScanner.Scan(_tempDirectory); Assert.HasCount(2, files); Assert.IsTrue(files.Any(file => file.EndsWith("a.mp3", StringComparison.OrdinalIgnoreCase))); Assert.IsTrue(files.Any(file => file.EndsWith("b.FLAC", StringComparison.OrdinalIgnoreCase))); } /// /// Verifies that subdirectories are not scanned. /// [TestMethod] public void DoesNotScanSubdirectories() { CreateFile("root.mp3"); CreateFile(Path.Combine("sub", "nested.wav")); IReadOnlyList files = AudioFileScanner.Scan(_tempDirectory); Assert.HasCount(1, files); Assert.IsTrue(files[0].EndsWith("root.mp3", StringComparison.OrdinalIgnoreCase)); } /// /// Creates an empty file inside the test directory. /// /// The relative file name, which may include a subdirectory. private void CreateFile(string fileName) { string path = Path.Combine(_tempDirectory, fileName); string directory = Path.GetDirectoryName(path) ?? _tempDirectory; Directory.CreateDirectory(directory); File.WriteAllText(path, string.Empty); } }