owenrusk.dev

casebench

test cases straight onto the board.

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

commit 9049b37506a3b5fa1e6e4fac6c08ed6c750e14c4
parent 04d64ce901e58eaed82b59d9428f3a1cb9d3a649
author Owen Rusk <owen@papermothgames.com>
date   2026-06-09 15:34:27 -0500
lock: default rest from CASEBENCH_REST
casebench/cli.py+3-3
tests/test_lock.py+7-0
diff --git a/casebench/cli.py b/casebench/cli.py
index b619993..d58316a 100644
--- a/casebench/cli.py
+++ b/casebench/cli.py
@@ -35,8 +35,8 @@ def parser() -> argparse.ArgumentParser:
     locker.add_argument("--answer", action="append", help="one per line of the lock; asked for if left out")
     locker.add_argument(
         "--rest",
-        default="3/60",
-        help="tries/minutes: after that many wrong tries in a row, take nothing for that long (default: 3/60)",
+        help="tries/minutes: after that many wrong tries in a row, take nothing for that long"
+        " (default: $CASEBENCH_REST, or 3/60)",
     )
     locker.add_argument("--text", default="locked.", help="what the lock says (default: locked.)")
     boards(locker)
@@ -131,7 +131,7 @@ def run_note(store: Store, args: argparse.Namespace) -> None:
 
 
 def run_lock(store: Store, args: argparse.Namespace) -> None:
-    rest = lock.parse_rest(args.rest)
+    rest = lock.parse_rest(args.rest or os.environ.get("CASEBENCH_REST", "3/60"))
     players = targets(store, args)
     for who in players:
         on_board(store, who, args.case)
diff --git a/tests/test_lock.py b/tests/test_lock.py
index cb01704..6777d45 100644
--- a/tests/test_lock.py
+++ b/tests/test_lock.py
@@ -1,5 +1,7 @@
+import os
 import unittest
 from datetime import UTC, datetime, timedelta
+from unittest import mock
 
 from casebench import lock
 from casebench.memstore import MemStore
@@ -110,6 +112,11 @@ class LockCommandTest(unittest.TestCase):
         self.assertEqual(code, 0)
         self.assertIsNotNone(self.store.get_lock(self.owen, "case-x"))
 
+    def test_rest_from_the_environment(self):
+        with mock.patch.dict(os.environ, {"CASEBENCH_REST": "2/15"}):
+            run(self.store, "lock", "test-lost-umbrella", "--answer", "a", "--player", "owen")
+        self.assertEqual(self.store.get_lock(self.owen, "test-lost-umbrella").rest, lock.Rest(2, 15))
+
     def test_bad_rest(self):
         code, _, err = run(self.store, "lock", "test-lost-umbrella", "--answer", "a", "--rest", "three", "--player", "owen")
         self.assertEqual(code, 1)