owenrusk.dev

errands

small jobs the runtime does for the studio.

git clone https://owenrusk.dev/errands.git

commit d8184fdbbd8b6eade3d37df82e1747d0625f1f11
parent fc52f839dd62aa1e4d5b4074277637f14ee46c43
author Owen Rusk <owen@papermothgames.com>
date   2024-11-14 16:02:33 -0600
posts: tests
tests/test_posts.py+45-0
diff --git a/tests/test_posts.py b/tests/test_posts.py
new file mode 100644
index 0000000..3119654
--- /dev/null
+++ b/tests/test_posts.py
@@ -0,0 +1,45 @@
+import tempfile
+import unittest
+from datetime import datetime, timedelta, timezone
+from pathlib import Path
+
+from errands import posts
+
+CENTRAL = timezone(timedelta(hours=-6))
+
+
+def post(site: Path, name: str, date: str | None) -> Path:
+    front = f"---\ntitle: {name}\ndate: {date}\n---\n" if date else f"---\ntitle: {name}\n---\n"
+    path = site / "scheduled" / f"{name}.md"
+    path.write_text(front + "\nbody\n")
+    return path
+
+
+class PublishTest(unittest.TestCase):
+    def setUp(self):
+        self.dir = tempfile.TemporaryDirectory()
+        self.site = Path(self.dir.name)
+        (self.site / "scheduled").mkdir()
+        (self.site / "posts").mkdir()
+        self.runs = []
+
+    def tearDown(self):
+        self.dir.cleanup()
+
+    def record(self, args, **kwargs):
+        self.runs.append(args)
+
+    def test_moves_only_what_is_due(self):
+        post(self.site, "test-post", "2024-11-20T09:00:00-06:00")
+        post(self.site, "later-post", "2024-12-20T09:00:00-06:00")
+        now = datetime(2024, 11, 21, 12, 0, tzinfo=CENTRAL)
+        self.assertEqual(posts.publish_due(now, self.site, self.record), ["test-post"])
+        self.assertTrue((self.site / "posts" / "test-post.md").exists())
+        self.assertTrue((self.site / "scheduled" / "later-post.md").exists())
+        self.assertEqual(self.runs, [["make", "publish"]])
+
+    def test_no_date_never_goes_out(self):
+        post(self.site, "draft", None)
+        now = datetime(2030, 1, 1, tzinfo=CENTRAL)
+        self.assertEqual(posts.publish_due(now, self.site, self.record), [])
+        self.assertEqual(self.runs, [])