use std::fs;
use std::process::Command;
use tempfile::TempDir;
#[test]
fn test_streams_feature() {
let temp_dir = TempDir::new().unwrap();
let input_dir = temp_dir.path().join("input");
let output_dir = temp_dir.path().join("output");
fs::create_dir_all(&input_dir).unwrap();
fs::create_dir_all(input_dir.join("content")).unwrap();
let config_path = input_dir.join("marmite.yaml");
fs::write(&config_path, "name: Blog").unwrap();
let tutorial_post = r"---
date: 2024-01-01
stream: tutorial
---
# Tutorial Post";
fs::write(
input_dir.join("content").join("getting-started.md"),
tutorial_post,
)
.unwrap();
let news_post = r"---
date: 2024-01-02
stream: news
---
# News Post";
fs::write(input_dir.join("content").join("update.md"), news_post).unwrap();
let output = Command::new("cargo")
.args([
"run",
"--quiet",
"--",
input_dir.to_str().unwrap(),
output_dir.to_str().unwrap(),
])
.output()
.expect("Failed to execute marmite");
assert!(
output.status.success(),
"Command failed: {}",
String::from_utf8_lossy(&output.stderr)
);
assert!(output_dir.join("tutorial.html").exists());
assert!(output_dir.join("news.html").exists());
assert!(output_dir.join("streams.html").exists());
}
#[test]
fn test_stream_date_prefixed_filename() {
let temp_dir = TempDir::new().unwrap();
let input_dir = temp_dir.path().join("input");
let output_dir = temp_dir.path().join("output");
fs::create_dir_all(&input_dir).unwrap();
fs::create_dir_all(input_dir.join("content")).unwrap();
let config_path = input_dir.join("marmite.yaml");
fs::write(&config_path, "name: Blog").unwrap();
let news_post = "# Breaking News\nImportant news update";
fs::write(
input_dir
.join("content")
.join("news-2024-01-15-breaking-story.md"),
news_post,
)
.unwrap();
let tutorial_post = "# Tutorial\nLearn something new";
fs::write(
input_dir
.join("content")
.join("tutorial-2024-02-20-getting-started.md"),
tutorial_post,
)
.unwrap();
let output = Command::new("cargo")
.args([
"run",
"--quiet",
"--",
input_dir.to_str().unwrap(),
output_dir.to_str().unwrap(),
])
.output()
.expect("Failed to execute marmite");
assert!(
output.status.success(),
"Command failed: {}",
String::from_utf8_lossy(&output.stderr)
);
assert!(output_dir.join("news-breaking-story.html").exists());
assert!(output_dir.join("tutorial-getting-started.html").exists());
assert!(output_dir.join("news.html").exists());
assert!(output_dir.join("tutorial.html").exists());
assert!(output_dir.join("streams.html").exists());
}
#[test]
fn test_stream_s_prefixed_filename() {
let temp_dir = TempDir::new().unwrap();
let input_dir = temp_dir.path().join("input");
let output_dir = temp_dir.path().join("output");
fs::create_dir_all(&input_dir).unwrap();
fs::create_dir_all(input_dir.join("content")).unwrap();
let config_path = input_dir.join("marmite.yaml");
fs::write(&config_path, "name: Blog").unwrap();
let guide_post = r"---
date: 2024-03-01
---
# Complete Guide
A comprehensive guide";
fs::write(
input_dir
.join("content")
.join("guide-S-complete-tutorial.md"),
guide_post,
)
.unwrap();
let howto_post = r"---
date: 2024-03-02
---
# How To
Step by step instructions";
fs::write(
input_dir.join("content").join("howto-S-install-rust.md"),
howto_post,
)
.unwrap();
let output = Command::new("cargo")
.args([
"run",
"--quiet",
"--",
input_dir.to_str().unwrap(),
output_dir.to_str().unwrap(),
])
.output()
.expect("Failed to execute marmite");
assert!(
output.status.success(),
"Command failed: {}",
String::from_utf8_lossy(&output.stderr)
);
assert!(output_dir.join("guide-complete-tutorial.html").exists());
assert!(output_dir.join("howto-install-rust.html").exists());
assert!(output_dir.join("guide.html").exists());
assert!(output_dir.join("howto.html").exists());
assert!(output_dir.join("streams.html").exists());
}