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()