using Kavita.Common.Helpers; namespace Kavita.Common.Tests.Helpers; public class HtmlHelperTests { #region GetCharacters Tests [Fact] public void GetCharacters_WithNullBody_ReturnsNull() { string body = null; // Act var result = HtmlHelper.GetCharacters(body); // Assert Assert.Null(result); } [Fact] public void GetCharacters_WithEmptyBody_ReturnsEmptyString() { var body = string.Empty; // Act var result = HtmlHelper.GetCharacters(body); // Assert Assert.Equal(string.Empty, result); } [Fact] public void GetCharacters_WithNoTextNodes_ReturnsEmptyString() { const string body = "
"; // Act var result = HtmlHelper.GetCharacters(body); // Assert Assert.Equal(string.Empty, result); } [Fact] public void GetCharacters_WithLessCharactersThanLimit_ReturnsFullText() { var body = "

This is a short review.

"; // Act var result = HtmlHelper.GetCharacters(body); // Assert Assert.Equal("This is a short review.…", result); } [Fact] public void GetCharacters_WithMoreCharactersThanLimit_TruncatesText() { var body = "

" + new string('a', 200) + "

"; // Act var result = HtmlHelper.GetCharacters(body); // Assert Assert.Equal(new string('a', 175) + "…", result); Assert.Equal(176, result.Length); // 175 characters + ellipsis } [Fact] public void GetCharacters_IgnoresScriptTags() { const string body = "

Visible text

"; // Act var result = HtmlHelper.GetCharacters(body); // Assert Assert.Equal("Visible text…", result); Assert.DoesNotContain("hidden", result); } [Fact] public void GetCharacters_RemovesMarkdownSymbols() { const string body = "

This is **bold** and _italic_ text with [link](url).

"; // Act var result = HtmlHelper.GetCharacters(body); // Assert Assert.Equal("This is bold and italic text with link.…", result); } [Fact] public void GetCharacters_HandlesComplexMarkdownAndHtml() { const string body = """

# Header

This is ~~strikethrough~~ and __underlined__ text

~~~code block~~~

+++highlighted+++

img123(image.jpg)

"""; // Act var result = HtmlHelper.GetCharacters(body); // Assert Assert.DoesNotContain("~~", result); Assert.DoesNotContain("__", result); Assert.DoesNotContain("~~~", result); Assert.DoesNotContain("+++", result); Assert.DoesNotContain("img123(", result); Assert.Contains("Header", result); Assert.Contains("strikethrough", result); Assert.Contains("underlined", result); Assert.Contains("code block", result); Assert.Contains("highlighted", result); } #endregion }