BareGit
#include "markdown_renderer.h"

#include <string>

#include <gtest/gtest.h>

/// Verify ordinary Markdown renders its structural HTML.
TEST(MarkdownRendererTest, RendersFormatting)
{
    MarkdownRenderer renderer;
    auto html = renderer.render("A **bright** card.");

    ASSERT_TRUE(html) << html.error().msg();
    EXPECT_NE(html->value().find("<strong>bright</strong>"),
              std::string::npos);
}

/// Verify literal user HTML is escaped before MacroDown evaluation.
TEST(MarkdownRendererTest, EscapesRawHtml)
{
    MarkdownRenderer renderer;
    auto html = renderer.render("<script>alert('x')</script>");

    ASSERT_TRUE(html) << html.error().msg();
    EXPECT_EQ(html->value().find("<script>"), std::string::npos);
    EXPECT_NE(html->value().find("&lt;script&gt;"), std::string::npos);
}

/// Verify unsafe and relative Markdown URLs are rejected.
TEST(MarkdownRendererTest, RejectsUnsafeUrls)
{
    MarkdownRenderer renderer;

    EXPECT_FALSE(renderer.render("[bad](javascript:alert(1))"));
    EXPECT_FALSE(renderer.render("[relative](/cards/1)"));
    EXPECT_TRUE(renderer.render("[safe](https://example.test/a?b=c)"));
}