using TheCr3w.Shared.External; using Xunit; namespace TheCr3w.Tests; public class ExternalDeploymentTests { private readonly ExternalDeploymentService _service = new(); [Fact] public void ComputeSyncPreview_ShouldCorrectlyIdentifyAddUpdateDelete() { var localFiles = new Dictionary { ["index.html"] = ("sha_index_new", 1000), ["app.js"] = ("sha_js_same", 5000), ["new-file.css"] = ("sha_css_new", 2000) }; var remoteFiles = new Dictionary { ["index.html"] = ("sha_index_old"), ["app.js"] = ("sha_js_same"), ["obsolete.png"] = ("sha_obsolete") }; var preview = _service.ComputeSyncPreview(localFiles, remoteFiles); Assert.Equal(1, preview.FilesToAdd); // new-file.css Assert.Equal(1, preview.FilesToUpdate); // index.html Assert.Equal(1, preview.FilesToDelete); // obsolete.png Assert.Equal(3000, preview.TotalTransferBytes); // 1000 + 2000 } [Fact] public void ValidateHostKey_ShouldRejectEmptyOrMismatchedFingerprint() { Assert.False(_service.ValidateHostKey("SHA256:abc123actual", null)); Assert.False(_service.ValidateHostKey("SHA256:abc123actual", "")); Assert.False(_service.ValidateHostKey("SHA256:abc123actual", "SHA256:wrong")); Assert.True(_service.ValidateHostKey("SHA256:abc123actual", "SHA256:abc123actual")); } }