[#1] Blog metadata can be stored using serde.
Created the initial blog data, posts and authors, and allows it to be stored using serde.
This commit is contained in:
84
tests/serde.rs
Normal file
84
tests/serde.rs
Normal file
@ -0,0 +1,84 @@
|
||||
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")],
|
||||
content: std::path::PathBuf::from("posts/test_post.md")
|
||||
};
|
||||
|
||||
Tavern { 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);
|
||||
}
|
||||
Reference in New Issue
Block a user