Files
tavernworks/tests/serde.rs
Myrddin Dundragon ab83c7afb6 [#2] Database integration complete.
Posts and Authors can now be inserted and retrieved from the database
created. It was decided to use a SQLite database for it high read spead
and ease of use/maintenance.

A build feature was created to seperate how the library is being used.
If you are making the database and storing posts, then use the publisher
flag. If you are just reading from a database then do not use the
publisher flag. This was also set to change the tale contents from a
PathBuf to the String of HTML blog data without having to create a whole
new data object.

An example and a test were made. Test coverage needs to be increased
however.
2025-08-27 17:36:06 -04:00

90 lines
2.9 KiB
Rust

use chrono::{NaiveDate, NaiveDateTime};
use tavern::{Adventurer, 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 tale: Tale =
Tale { 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(),
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.title, "Test post");
assert_eq!(tale.slug, "test_post");
assert_eq!(tale.author, "myrddin");
cleanup_temp_file(&path);
}