using AmiReel.Models; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace AmiReel.Tests.Models; [TestClass] public class AppSettingsTests { [TestMethod] public void Default_SetsFallbackOutputFolderAndSensibleDefaults() { // Arrange const string outputFolder = @"C:\Videos"; // Act AppSettings settings = AppSettings.Default(outputFolder); // Assert Assert.AreEqual(outputFolder, settings.OutputFolder); Assert.AreEqual("Dark", settings.Theme); Assert.AreEqual("Auto", settings.Encoder); Assert.IsTrue(settings.ShouldMoveSourcesToOriginals); } [TestMethod] public void ShouldMoveSourcesToOriginals_WhenFlagIsNull_DefaultsToTrue() { // Arrange AppSettings settings = AppSettings.Default(@"C:\Videos") with { MoveSourcesToOriginals = null }; // Act bool result = settings.ShouldMoveSourcesToOriginals; // Assert Assert.IsTrue(result); } [TestMethod] public void ShouldMoveSourcesToOriginals_WhenFlagIsExplicitlyFalse_ReturnsFalse() { // Arrange AppSettings settings = AppSettings.Default(@"C:\Videos") with { MoveSourcesToOriginals = false }; // Act bool result = settings.ShouldMoveSourcesToOriginals; // Assert Assert.IsFalse(result); } [TestMethod] public void Normalize_WithBlankOutputFolder_UsesFallback() { // Arrange AppSettings settings = AppSettings.Default("") with { OutputFolder = " " }; // Act AppSettings normalized = settings.Normalize(@"C:\Fallback"); // Assert Assert.AreEqual(@"C:\Fallback", normalized.OutputFolder); } [TestMethod] public void Normalize_WithBlankTimingValues_RestoresDefaults() { // Arrange AppSettings settings = AppSettings.Default(@"C:\Videos") with { TrimStart = "", FadeSeconds = " ", EndCardHoldSeconds = "", ThumbnailInterval = "", }; // Act AppSettings normalized = settings.Normalize(@"C:\Videos"); // Assert Assert.AreEqual("4.414", normalized.TrimStart); Assert.AreEqual("3", normalized.FadeSeconds); Assert.AreEqual("4", normalized.EndCardHoldSeconds); Assert.AreEqual("10", normalized.ThumbnailInterval); } [TestMethod] public void Normalize_WithPopulatedValues_KeepsThemUnchanged() { // Arrange AppSettings settings = AppSettings.Default(@"C:\Videos") with { TrimStart = "1.5", FadeSeconds = "2.5", Theme = "Light", Encoder = "NvidiaNvenc", }; // Act AppSettings normalized = settings.Normalize(@"C:\Videos"); // Assert Assert.AreEqual("1.5", normalized.TrimStart); Assert.AreEqual("2.5", normalized.FadeSeconds); Assert.AreEqual("Light", normalized.Theme); Assert.AreEqual("NvidiaNvenc", normalized.Encoder); } }