feat: more M4 closing
This commit is contained in:
@@ -94,6 +94,8 @@ fn generation_engine_writes_core_and_single_post_artifacts() {
|
||||
assert!(report.written_paths.contains(&"feed.xml".to_string()));
|
||||
assert!(report.written_paths.contains(&"atom.xml".to_string()));
|
||||
assert!(report.written_paths.contains(&"sitemap.xml".to_string()));
|
||||
assert!(report.written_paths.contains(&"assets/pico.min.css".to_string()));
|
||||
assert!(report.written_paths.contains(&"assets/tag-cloud.js".to_string()));
|
||||
assert!(report.written_paths.contains(&"2024/03/09/hello/index.html".to_string()));
|
||||
assert!(report.written_paths.contains(&"2024/03/10/next/index.html".to_string()));
|
||||
|
||||
@@ -102,6 +104,8 @@ fn generation_engine_writes_core_and_single_post_artifacts() {
|
||||
assert!(dir.path().join("feed.xml").exists());
|
||||
assert!(dir.path().join("atom.xml").exists());
|
||||
assert!(dir.path().join("sitemap.xml").exists());
|
||||
assert!(dir.path().join("assets/pico.min.css").exists());
|
||||
assert!(dir.path().join("assets/tag-cloud.js").exists());
|
||||
assert!(dir.path().join("2024/03/09/hello/index.html").exists());
|
||||
|
||||
let rss = std::fs::read_to_string(dir.path().join("rss.xml")).unwrap();
|
||||
@@ -110,6 +114,34 @@ fn generation_engine_writes_core_and_single_post_artifacts() {
|
||||
|
||||
let sitemap = std::fs::read_to_string(dir.path().join("sitemap.xml")).unwrap();
|
||||
assert!(sitemap.contains("https://example.com/2024/03/09/hello"));
|
||||
assert!(sitemap.contains("https://example.com/category/article"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn multilingual_generation_writes_language_aware_atom_and_sitemap_routes() {
|
||||
let (db, dir) = setup();
|
||||
let mut metadata = make_metadata();
|
||||
metadata.main_language = Some("de".into());
|
||||
metadata.blog_languages = vec!["de".into(), "en".into()];
|
||||
let posts = vec![PublishedPostSource {
|
||||
post: make_post("hallo", 1_710_000_000_000),
|
||||
body_markdown: "Hallo Welt".into(),
|
||||
}];
|
||||
|
||||
let report = generate_starter_site(db.conn(), dir.path(), "p1", &metadata, &posts, "de").unwrap();
|
||||
|
||||
assert!(report.written_paths.contains(&"en/atom.xml".to_string()));
|
||||
assert!(report.written_paths.contains(&"en/sitemap.xml".to_string()));
|
||||
|
||||
let atom = std::fs::read_to_string(dir.path().join("en/atom.xml")).unwrap();
|
||||
assert!(atom.contains("<link href=\"https://example.com/en/\" rel=\"alternate\" />") || atom.contains("<link href=\"https://example.com/en\" rel=\"alternate\" />"));
|
||||
assert!(atom.contains("<link href=\"https://example.com/en/atom.xml\" rel=\"self\" />"));
|
||||
|
||||
let sitemap = std::fs::read_to_string(dir.path().join("sitemap.xml")).unwrap();
|
||||
assert!(sitemap.contains("hreflang=\"de\" href=\"https://example.com/\""));
|
||||
assert!(sitemap.contains("hreflang=\"en\" href=\"https://example.com/en\""));
|
||||
assert!(sitemap.contains("hreflang=\"x-default\" href=\"https://example.com/\""));
|
||||
assert!(sitemap.contains("https://example.com/category/article"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -129,6 +161,7 @@ fn generation_engine_skips_unchanged_outputs_on_second_run() {
|
||||
assert!(second.skipped_paths.contains(&"calendar.json".to_string()));
|
||||
assert!(second.skipped_paths.contains(&"rss.xml".to_string()));
|
||||
assert!(second.skipped_paths.contains(&"feed.xml".to_string()));
|
||||
assert!(second.skipped_paths.contains(&"assets/pico.min.css".to_string()));
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -56,6 +56,41 @@ fn markdown_filter_rewrites_post_and_media_urls() {
|
||||
assert!(rendered.contains("src=\"/assets/pic.png\""));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn markdown_filter_expands_builtin_macros_from_runtime_context() {
|
||||
let template = "{{ body | markdown: post.id, post_data_json_by_id, canonical_post_path_by_slug, canonical_media_path_by_source_path, language, language_prefix }}";
|
||||
let partials = HashMap::new();
|
||||
let context = serde_json::json!({
|
||||
"body": "[[gallery images=post.linked_media columns=2]]\n\n[[youtube id=dQw4w9WgXcQ]]\n\n[[vimeo id=123456]]\n\n[[photo_archive media=post.linked_media]]\n\n[[tag_cloud tags=post_tags]]",
|
||||
"post": {
|
||||
"id": "post-1",
|
||||
"linked_media": [
|
||||
{"file_path": "/media/2026/04/one.jpg", "title": "One", "alt": "Image one"},
|
||||
{"file_path": "/media/2026/04/two.jpg", "caption": "Two"}
|
||||
]
|
||||
},
|
||||
"post_data_json_by_id": {
|
||||
"post-1": {"id": "post-1", "title": "Post 1"}
|
||||
},
|
||||
"post_tags": [
|
||||
{"name": "Rust", "slug": "rust", "post_count": 4, "color": "#ff6600"},
|
||||
{"name": "Iced", "slug": "iced", "post_count": 2}
|
||||
],
|
||||
"tag_color_by_name": {"Iced": "#0088cc"},
|
||||
"canonical_post_path_by_slug": {},
|
||||
"canonical_media_path_by_source_path": {},
|
||||
"language": "en",
|
||||
"language_prefix": ""
|
||||
});
|
||||
|
||||
let rendered = render_liquid_template(template, &partials, &context).unwrap();
|
||||
assert!(rendered.contains("macro-gallery gallery-cols-2"));
|
||||
assert!(rendered.contains("https://www.youtube.com/embed/dQw4w9WgXcQ"));
|
||||
assert!(rendered.contains("https://player.vimeo.com/video/123456"));
|
||||
assert!(rendered.contains("macro-photo-archive"));
|
||||
assert!(rendered.contains("data-tag-cloud=\"true\""));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn starter_single_post_template_renders_with_partials() {
|
||||
let template = include_str!("../../../assets/starter-templates/single-post.liquid");
|
||||
|
||||
Reference in New Issue
Block a user