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 Hello World ", result);
Assert.Contains("", result);
Assert.Contains("", result);
Assert.Contains(" Hello Hello
Hello
"; // Act var result = _sanitizer.Validate(html); // Assert Assert.False(result.IsValid); Assert.Contains(result.Errors, e => e.Type == HtmlValidationErrorType.EventHandlerDetected); } [Fact] public void Validate_JavaScriptUrl_ReturnsErrors() { // Arrange var html = "Click"; // Act var result = _sanitizer.Validate(html); // Assert Assert.False(result.IsValid); Assert.Contains(result.Errors, e => e.Type == HtmlValidationErrorType.JavaScriptUrlDetected); } [Fact] public void Validate_DisallowedTags_ReturnsWarnings() { // Arrange var html = "Hello
Hello World
"; // Act var result = _sanitizer.StripTags(html); // Assert Assert.DoesNotContain("<", result); Assert.DoesNotContain(">", result); Assert.Contains("Hello", result); Assert.Contains("World", result); } [Fact] public void GetProfile_ExistingProfile_ReturnsProfile() { // Act var profile = _sanitizer.GetProfile("basic"); // Assert Assert.NotNull(profile); Assert.Equal("basic", profile.Name); } [Fact] public void GetProfile_NonExistentProfile_ReturnsNull() { // Act var profile = _sanitizer.GetProfile("non-existent"); // Assert Assert.Null(profile); } [Fact] public void RegisterProfile_AddsCustomProfile() { // Arrange var customProfile = new SanitizationProfile { Name = "custom", AllowedTags = new HashSetTest
", "Test
")] [InlineData("Test
", "Test
")] [InlineData("