summaryrefslogtreecommitdiff
path: root/tests/test-hugo-config--post-metadata.el
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-hugo-config--post-metadata.el')
-rw-r--r--tests/test-hugo-config--post-metadata.el64
1 files changed, 64 insertions, 0 deletions
diff --git a/tests/test-hugo-config--post-metadata.el b/tests/test-hugo-config--post-metadata.el
new file mode 100644
index 00000000..d0719f6f
--- /dev/null
+++ b/tests/test-hugo-config--post-metadata.el
@@ -0,0 +1,64 @@
+;;; test-hugo-config--post-metadata.el --- Tests for hugo post metadata parser -*- lexical-binding: t; -*-
+
+;;; Commentary:
+;; Unit tests for cj/hugo--post-metadata. Reads the Hugo front matter region of
+;; an Org file and returns (:title TITLE :draft BOOL) or nil for non-Hugo posts.
+;; Covers Normal, Boundary, and Error cases.
+
+;;; Code:
+
+(require 'ert)
+(require 'hugo-config)
+
+(defun test-hugo-config--post-metadata--write-fixture (contents)
+ "Write CONTENTS to a unique temp .org file and return its path."
+ (let ((file (make-temp-file "hugo-test-" nil ".org")))
+ (with-temp-file file (insert contents))
+ file))
+
+;;; Normal Cases
+
+(ert-deftest test-hugo-config--post-metadata-normal-draft-with-title ()
+ "Normal: draft post with title returns plist with title and :draft t."
+ (let ((file (test-hugo-config--post-metadata--write-fixture
+ "#+title: My First Post
+#+date: 2026-01-01
+#+hugo_draft: true
+
+Body text.")))
+ (unwind-protect
+ (let ((meta (cj/hugo--post-metadata file)))
+ (should (equal (plist-get meta :title) "My First Post"))
+ (should (eq (plist-get meta :draft) t)))
+ (delete-file file))))
+
+;;; Boundary Cases
+
+(ert-deftest test-hugo-config--post-metadata-boundary-published-no-title ()
+ "Boundary: published post without #+title: falls back to file basename."
+ (let ((file (test-hugo-config--post-metadata--write-fixture
+ "#+hugo_draft: false
+
+Body only.")))
+ (unwind-protect
+ (let ((meta (cj/hugo--post-metadata file)))
+ (should (stringp (plist-get meta :title)))
+ (should (string= (plist-get meta :title)
+ (file-name-base file)))
+ (should (eq (plist-get meta :draft) nil)))
+ (delete-file file))))
+
+;;; Error Cases
+
+(ert-deftest test-hugo-config--post-metadata-error-missing-hugo-draft ()
+ "Error: Org file without #+hugo_draft: keyword is not a Hugo post; returns nil."
+ (let ((file (test-hugo-config--post-metadata--write-fixture
+ "#+title: Just an Org file
+
+No Hugo front matter here.")))
+ (unwind-protect
+ (should (null (cj/hugo--post-metadata file)))
+ (delete-file file))))
+
+(provide 'test-hugo-config--post-metadata)
+;;; test-hugo-config--post-metadata.el ends here