owenrusk.dev

casebench

test cases straight onto the board.

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

commit 3354c6713e1f15c2050de2cd98b861c460056019
parent cdb46586e2fedfd726393d22d039620c4ad63c9d
author Owen Rusk <owen@papermothgames.com>
date   2026-09-15 14:17:55 -0500
tests: list and pull
tests/test_list_pull.py+67-0
diff --git a/tests/test_list_pull.py b/tests/test_list_pull.py
new file mode 100644
index 0000000..347d23f
--- /dev/null
+++ b/tests/test_list_pull.py
@@ -0,0 +1,67 @@
+import unittest
+
+from casebench.memstore import MemStore
+
+from .helpers import UMBRELLA, run
+
+
+class ListTest(unittest.TestCase):
+    def setUp(self):
+        self.store = MemStore(("owen", "tess"))
+        self.owen = self.store.player("owen")
+        self.store.runtime_case(self.owen, "case-x", "A real case")
+        self.store.runtime_case(self.owen, "case-y", "Another real case")
+        run(self.store, "put", str(UMBRELLA), "--player", "owen")
+
+    def test_bench_cases_and_bench_locks_only(self):
+        run(self.store, "lock", "case-y", "--answer", "a", "--player", "owen")
+        run(self.store, "note", "test-lost-umbrella", "one", "--player", "owen")
+        run(self.store, "note", "test-lost-umbrella", "two", "--item", "log", "--player", "owen")
+        code, out, _ = run(self.store, "list")
+        self.assertEqual(code, 0)
+        self.assertEqual(
+            out.splitlines(),
+            [
+                "owen\tcase-y\tAnother real case\truntime, locked",
+                "owen\ttest-lost-umbrella\tThe lost umbrella\tbench, 2 notes",
+            ],
+        )
+
+    def test_one_player(self):
+        run(self.store, "put", str(UMBRELLA), "--player", "tess")
+        _, out, _ = run(self.store, "list", "--player", "tess")
+        self.assertEqual(out, "tess\ttest-lost-umbrella\tThe lost umbrella\tbench\n")
+
+
+class PullTest(unittest.TestCase):
+    def setUp(self):
+        self.store = MemStore(("owen", "tess"))
+        self.owen = self.store.player("owen")
+        run(self.store, "put", str(UMBRELLA), "--all")
+
+    def test_pull(self):
+        run(self.store, "lock", "test-lost-umbrella", "--answer", "a", "--player", "owen")
+        code, out, _ = run(self.store, "pull", "test-lost-umbrella", "--player", "owen")
+        self.assertEqual((code, out), (0, "owen: pulled test-lost-umbrella\n"))
+        self.assertIsNone(self.store.placed(self.owen, "test-lost-umbrella"))
+        self.assertIsNotNone(self.store.placed(self.store.player("tess"), "test-lost-umbrella"))
+
+    def test_pull_everywhere(self):
+        run(self.store, "pull", "test-lost-umbrella", "--all")
+        self.assertEqual(self.store.cases, {})
+
+    def test_never_a_runtime_case(self):
+        self.store.runtime_case(self.owen, "case-x", "A real case")
+        code, _, err = run(self.store, "pull", "case-x", "--player", "owen")
+        self.assertEqual(code, 1)
+        self.assertIn("came from the runtime", err)
+        self.assertIsNotNone(self.store.placed(self.owen, "case-x"))
+
+    def test_not_on_the_board(self):
+        code, _, err = run(self.store, "pull", "test-other", "--player", "owen")
+        self.assertEqual(code, 1)
+        self.assertIn("doesn't have test-other", err)
+
+
+if __name__ == "__main__":
+    unittest.main()