use krik::generator::ast_parser::{generate_toc_from_headings, parse_markdown_ast, Heading};
use pulldown_cmark::HeadingLevel;
#[test]
fn parse_markdown_ast_extracts_headings_and_ids() {
let md = "# Title\n\n## Section 1\n\nText";
let result = parse_markdown_ast(md);
assert_eq!(result.headings.len(), 2);
assert_eq!(result.headings[0].text, "Title");
assert!(result.html_content.contains("id=\"title\""));
}
#[test]
fn heading_id_uniqueness() {
let md = "# My Heading\n\n# My Heading";
let result = parse_markdown_ast(md);
assert_eq!(result.headings[0].id, "my-heading");
assert_eq!(result.headings[1].id, "my-heading-1");
}
#[test]
fn toc_generation_skips_title() {
let headings = vec![
Heading {
level: HeadingLevel::H1,
text: "Title".into(),
id: "title".into(),
line_number: 1,
},
Heading {
level: HeadingLevel::H2,
text: "Section".into(),
id: "section".into(),
line_number: 2,
},
];
let toc = generate_toc_from_headings(&headings, Some("Title"));
assert!(toc.contains("Section"));
assert!(!toc.contains("Title"));
}