using System; using System.IO; using OpenNest.Posts.Cincinnati; using OpenNest.Posts.CincinnatiCIFiber; using Xunit; namespace OpenNest.Tests.PostSettings; /// /// An update replaces the install folder, so a post's edited settings must live outside it: /// saves go to the user's settings directory and the shipped JSON only seeds them. /// [Collection(Collection)] public class PostSettingsFileTests : IDisposable { /// Tests that set share it, so they never run together. public const string Collection = "PostSettingsFile"; private readonly string directory = Path.Combine(Path.GetTempPath(), "opennest-post-settings-" + Guid.NewGuid()); public PostSettingsFileTests() => PostSettingsFile.DirectoryOverride = directory; public void Dispose() { PostSettingsFile.DirectoryOverride = null; if (Directory.Exists(directory)) Directory.Delete(directory, recursive: true); } [Fact] public void Save_WritesTheUserCopy_AndLeavesTheShippedDefaultsUntouched() { var assembly = typeof(CincinnatiPostProcessor).Assembly; var shipped = PostSettingsFile.ShippedPathFor(assembly); var shippedBefore = File.ReadAllText(shipped); var post = new CincinnatiPostProcessor(); Assert.NotEmpty(post.Config.MaterialLibraries); post.Config.ConfigurationName = "EDITED"; post.SaveConfig(); Assert.Equal(shippedBefore, File.ReadAllText(shipped)); Assert.StartsWith(directory, PostSettingsFile.PathFor(assembly)); Assert.Equal("EDITED", new CincinnatiPostProcessor().Config.ConfigurationName); Assert.False(File.Exists(PostSettingsFile.PathFor(assembly) + ".tmp")); } [Fact] public void Constructing_WithNoSavedCopy_ReadsTheShippedDefaultsWithoutWriting() { var post = new CIFiberPostProcessor(); Assert.Contains("Carbon Steel", post.Config.MaterialCodes.Keys); Assert.False(Directory.Exists(directory)); } }