]> git.r.bdr.sh - rbdr/blog/commitdiff
Add tests for post
authorRuben Beltran del Rio <redacted>
Sun, 5 Jan 2025 20:59:32 +0000 (21:59 +0100)
committerRuben Beltran del Rio <redacted>
Sun, 5 Jan 2025 20:59:32 +0000 (21:59 +0100)
src/post.rs
src/template.rs

index 6f2120e4825f31ee8a84ebbd87a6eb248ea22b7b..51614aae97eb82e2686aca74772328d5a7a8b4cd 100644 (file)
@@ -10,6 +10,7 @@ pub struct Post {
 }
 
 impl Post {
+    /// Converts a post into a template `Context` object
     pub fn to_template_context(posts: &[Post]) -> Context {
         let mut context = HashMap::new();
 
@@ -70,3 +71,92 @@ impl Post {
             .replace('\'', "&apos;")
     }
 }
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use crate::template::Value;
+
+    #[test]
+    fn test_creates_context_with_empty_posts() {
+        let context = Post::to_template_context(&[]);
+
+        assert_eq!(context["has_posts"], Value::Bool(false));
+        assert_eq!(context["posts_length"], Value::Unsigned(0));
+        if let Value::Collection(posts) = &context["posts"] {
+            assert!(posts.is_empty());
+        } else {
+            panic!("The posts context was not the right type.");
+        }
+    }
+
+    #[test]
+    fn test_creates_context_with_post_slice() {
+        let post = Post {
+            metadata: Metadata {
+                id: "cool".to_string(),
+                created_on: 1736035200000,
+            },
+            index: 28,
+            html: "<p>beep boop</p>".to_string(),
+            raw: "beep boop".to_string(),
+        };
+
+        let context = Post::to_template_context(&[post]);
+
+        assert_eq!(context["has_posts"], Value::Bool(true));
+        assert_eq!(context["posts_length"], Value::Unsigned(1));
+        if let Value::Collection(posts) = &context["posts"] {
+            if let Some(post) = posts.first() {
+                assert_eq!(post["id"], Value::String("cool".to_string()));
+            } else {
+                panic!("The template context had no posts");
+            }
+        } else {
+            panic!("The posts context was not the right type.");
+        }
+    }
+
+    #[test]
+    fn test_converts_post_to_context() {
+        let post = Post {
+            metadata: Metadata {
+                id: "cool".to_string(),
+                created_on: 1736035200000,
+            },
+            index: 28,
+            html: "<p>beep boop</p>".to_string(),
+            raw: "\
+# Hello everybody
+beep boop"
+                .to_string(),
+        };
+
+        let context = post.to_template_value();
+
+        assert_eq!(context["id"], Value::String("cool".to_string()));
+        assert_eq!(context["created_on"], Value::Unsigned(1736035200000));
+        assert_eq!(
+            context["created_on_utc"],
+            Value::String("Sun, 05 Jan 2025 00:00:00 +0000".to_string())
+        );
+        assert_eq!(
+            context["title"],
+            Value::String("Hello everybody".to_string())
+        );
+        assert_eq!(context["index"], Value::Unsigned(28));
+        assert_eq!(
+            context["html"],
+            Value::String("<p>beep boop</p>".to_string())
+        );
+        assert_eq!(
+            context["raw"],
+            Value::String(
+                "\
+# Hello everybody
+beep boop"
+                    .to_string()
+            )
+        );
+    }
+}
index 57a2571d848da94977a722a4d52e8a804384d576..33bc6623f2a30595e7b33e4fc40ea93a87a5fdde 100644 (file)
@@ -57,7 +57,7 @@ impl std::fmt::Display for Token {
     }
 }
 
-#[derive(Clone)]
+#[derive(PartialEq, Debug, Clone)]
 pub enum Value {
     String(String),
     Unsigned(u64),