using System.Security.Cryptography; using System.Text.Json; using Xunit; namespace XFESystem.Documents.Tests; public sealed class WebsiteWebPreviewTests { [Fact] public void NativeWebsiteSnapshotKeepsEveryImportedSourceByteAndLicenseReference() { using var manifest = JsonDocument.Parse(WebsiteAssets.ReadText("Exact/SourceManifest.json")); Assert.Equal(2, manifest.RootElement.GetProperty("SchemaVersion").GetInt32()); Assert.Equal("XFEStudioWebSite", manifest.RootElement.GetProperty("SourceRepository").GetString()); foreach (var entry in manifest.RootElement.GetProperty("Entries").EnumerateArray()) { var expected = entry.GetProperty("SourceSha256").GetString(); Assert.Equal(expected, entry.GetProperty("SnapshotSha256").GetString()); using var asset = WebsiteAssets.Open("Exact/" + entry.GetProperty("SnapshotPath").GetString()); Assert.Equal(expected, Convert.ToHexStringLower(SHA256.HashData(asset))); Assert.False(string.IsNullOrWhiteSpace(entry.GetProperty("License").GetString())); } } [Fact] public void NativeWebsitePreviewUsesTheOriginalPartialsOrderWithoutInlineStyleOrScriptOverrides() { var preview = new DocumentPreviewBuilder(new()).MarkdownWeb("# XFE\n\n```csharp\npublic class Sample {}\n```", "Sample.md"); Assert.Contains("class=\"markdown-body docs-article-body\"", preview.Html); Assert.Contains("data-bs-theme=\"dark\"", preview.Html); Assert.DoesNotContain("globalThis.Evil=true;Bad" + "", ""); Assert.DoesNotContain("globalThis.Evil", preview.Html); Assert.DoesNotContain("javascript:", preview.Html); Assert.DoesNotContain("\";", "Sample.cs"); Assert.Contains("language-csharp", preview.Html); Assert.Contains("</script>", preview.Html); Assert.Contains("/js/docs/csharp.js", preview.Html); Assert.DoesNotContain("monarch", preview.Html, StringComparison.OrdinalIgnoreCase); } }