test: add coverage for orchestrator + gitea client (diff gate 77% → 98%)
Three new unit test modules: - tests/unit/test_contrib_gitea_client.py — GiteaClient (urllib mocked) and GiteaForge delegation - tests/unit/orchestrator/test_main.py — __main__ run/status commands - tests/unit/orchestrator/test_bootstrap.py — _token, BotBottleStateStore, _to_forge_state/_to_record, make_forge, make_sidecar, build Augments to existing suites: - test_events: non-"created" comment action ignored - test_lifecycle: _iso_now callable, untracked-issue comment ignored, untracked-PR closed ignored (covers _find_by_pr return-None path) - test_runner: destroy command, _default_run via subprocess mock - test_sidecar: _jsonable dataclass/list branches, OpLog.read on missing file, drain_done_events on corrupted file, socket _Handler invalid-JSON and empty-line paths, serve() with pre-existing socket path - test_watchdog: _loop body covered by patching _TICK_SECS to 0.01s - test_webhook: unknown GET path returns 404 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -135,6 +135,29 @@ class LifecycleTest(unittest.TestCase):
|
||||
self.assertIn(("destroy", "impl-didericis-bot-bottle-17"), self.runner.calls)
|
||||
self.assertIsNone(self._record())
|
||||
|
||||
def test_comment_on_untracked_issue_ignored(self):
|
||||
# No record in store and is_pull=False -> _route_comment returns None.
|
||||
self.orch.handle(CommentCreated(
|
||||
owner="didericis", repo="bot-bottle", issue_number=99,
|
||||
comment_id=1, author="reviewer", body="hi", is_pull=False,
|
||||
))
|
||||
self.assertEqual([], self.runner.calls)
|
||||
|
||||
def test_pr_closed_untracked_pr_ignored(self):
|
||||
# _find_by_pr finds nothing -> _on_pr_closed exits early.
|
||||
self.orch.handle(PullRequestClosed(
|
||||
owner="didericis", repo="bot-bottle", pr_number=999, merged=True,
|
||||
))
|
||||
self.assertEqual([], self.runner.calls)
|
||||
|
||||
|
||||
class IsoNowTest(unittest.TestCase):
|
||||
def test_returns_iso_string(self):
|
||||
from bot_bottle.orchestrator.lifecycle import _iso_now
|
||||
ts = _iso_now()
|
||||
self.assertIsInstance(ts, str)
|
||||
self.assertIn("T", ts)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user