**tavern** - The blogging system library. **loremaster** - Creates the database from a blogging repository. **bard** - Dioxus components to display the blog.
103 lines
3.3 KiB
Rust
103 lines
3.3 KiB
Rust
#![cfg(feature = "publisher")]
|
|
|
|
use chrono::NaiveDate;
|
|
use tavern::{Adventurer, FrontMatter, Tale, Tavern};
|
|
|
|
|
|
|
|
fn generate_tavern() -> Tavern
|
|
{
|
|
let author: Adventurer =
|
|
Adventurer { name: String::from("Jason Smith"),
|
|
handle: String::from("myrddin"),
|
|
profile:
|
|
String::from("https://cybermages.tech/about/myrddin"),
|
|
image:
|
|
String::from("https://cybermages.tech/about/myrddin/pic"),
|
|
blurb: String::from("I love code!") };
|
|
|
|
|
|
let fm: FrontMatter = FrontMatter {
|
|
title: String::from("Test post"),
|
|
slug: String::from("test_post"),
|
|
author: author.handle.clone(),
|
|
summary: String::from("The Moon is made of cheese!"),
|
|
tags: vec![String::from("Space"), String::from("Cheese")],
|
|
publish_date:
|
|
NaiveDate::from_ymd_opt(2025, 12, 25).unwrap()
|
|
.and_hms_opt(13, 10, 41)
|
|
.unwrap()
|
|
};
|
|
|
|
let tale: Tale = Tale {
|
|
front_matter: fm,
|
|
content: std::path::PathBuf::from("posts/test_post.md") };
|
|
|
|
Tavern { title: String::from("Runes & Ramblings"),
|
|
description: String::from("Join software engineer Jason Smith \
|
|
on his Rust programming journey. \
|
|
Explore program design, tech \
|
|
stacks, and more on this blog from \
|
|
CybeMages, LLC."),
|
|
tales: vec![tale],
|
|
authors: vec![author] }
|
|
}
|
|
|
|
|
|
fn cleanup_temp_file(path: &std::path::PathBuf)
|
|
{
|
|
if path.exists()
|
|
{
|
|
let _ = std::fs::remove_file(path);
|
|
}
|
|
}
|
|
|
|
|
|
#[test]
|
|
fn to_file()
|
|
{
|
|
let tavern = generate_tavern();
|
|
|
|
let toml_string = toml::to_string_pretty(&tavern).expect("Serialization \
|
|
to TOML should \
|
|
succeed");
|
|
|
|
// Save the TOML to a temporary file.
|
|
let mut path = std::env::temp_dir();
|
|
path.push("tavern_test_out.toml");
|
|
std::fs::write(&path, &toml_string).expect("Failed to write TOML to file");
|
|
|
|
cleanup_temp_file(&path);
|
|
}
|
|
|
|
#[test]
|
|
fn from_file()
|
|
{
|
|
let tavern = generate_tavern();
|
|
|
|
let toml_string = toml::to_string_pretty(&tavern).expect("Serialization \
|
|
to TOML should \
|
|
succeed");
|
|
|
|
// Save the TOML to a temporary file.
|
|
let mut path = std::env::temp_dir();
|
|
path.push("tavern_test_in.toml");
|
|
std::fs::write(&path, &toml_string).expect("Failed to write TOML to file");
|
|
|
|
// Read the previously written TOML file
|
|
let toml_data =
|
|
std::fs::read_to_string(&path).expect("Failed to read TOML file");
|
|
|
|
// Deserialize it
|
|
let tavern: Tavern =
|
|
toml::from_str(&toml_data).expect("Failed to parse TOML");
|
|
|
|
// Assert some known values to make this a real test
|
|
let tale = &tavern.tales[0];
|
|
assert_eq!(tale.front_matter.title, "Test post");
|
|
assert_eq!(tale.front_matter.slug, "test_post");
|
|
assert_eq!(tale.front_matter.author, "myrddin");
|
|
|
|
cleanup_temp_file(&path);
|
|
}
|