using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using StellaOps.Notifier.Worker.Security; namespace StellaOps.Notifier.Tests.Security; public class HtmlSanitizerTests { private readonly HtmlSanitizerOptions _options; private readonly DefaultHtmlSanitizer _sanitizer; public HtmlSanitizerTests() { _options = new HtmlSanitizerOptions { DefaultProfile = "basic", LogSanitization = false }; _sanitizer = new DefaultHtmlSanitizer( Options.Create(_options), NullLogger.Instance); } [Fact] public void Sanitize_AllowedTags_Preserved() { // Arrange var html = "

Hello World

"; // Act var result = _sanitizer.Sanitize(html); // Assert Assert.Contains("

", result); Assert.Contains("", result); Assert.Contains("", result); Assert.Contains("

", result); } [Fact] public void Sanitize_DisallowedTags_Removed() { // Arrange var html = "

Hello

"; // Act var result = _sanitizer.Sanitize(html); // Assert Assert.Contains("

Hello

", result); Assert.DoesNotContain("Hello

", result); Assert.DoesNotContain("Hello

", result); } [Fact] public void Sanitize_JavaScriptUrls_Removed() { // Arrange var html = "Click"; // Act var result = _sanitizer.Sanitize(html); // Assert Assert.DoesNotContain("javascript:", result); } [Fact] public void Sanitize_AllowedAttributes_Preserved() { // Arrange var html = "Link"; // Act var result = _sanitizer.Sanitize(html); // Assert Assert.Contains("href=", result); Assert.Contains("https://example.com", result); Assert.Contains("title=", result); } [Fact] public void Sanitize_DisallowedAttributes_Removed() { // Arrange var html = "

Hello

"; // Act var result = _sanitizer.Sanitize(html); // Assert Assert.DoesNotContain("data-custom", result); Assert.Contains("class=", result); // class is allowed } [Fact] public void Sanitize_WithMinimalProfile_OnlyBasicTags() { // Arrange var html = "

Link

"; var profile = SanitizationProfile.Minimal; // Act var result = _sanitizer.Sanitize(html, profile); // Assert Assert.Contains("

", result); Assert.DoesNotContain("", result); Assert.Contains("Hello

"; // Act var result = _sanitizer.Sanitize(html); // Assert Assert.DoesNotContain("