#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("<script>"), 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)"));
}