import unittest from tests.fakes import FakeGitea, FakeModel, config, diff_for, gitea_file, review_data from tests.test_flow import run from tests.test_hints_hold_merge import AUTOMERGE from tests.test_line_comments import APP from werkrevisor.verdict import Verdict DOC = "docs/guide.md" PR_DOC = "docs/prs/2026-10-10-PR#1-change.md" def hint_on(path, **review): data = review_data(issues=[path], header="[low] Unclear sentence") for issue in data["review"]["key_issues_to_review"]: issue.update(start_line=1, end_line=1) gitea = FakeGitea(files=[gitea_file(path)], diff=diff_for(path, added=["A sentence."])) outcome, _ = run(gitea, FakeModel(data=data, prompt_files=[path]), cfg=config(gate=AUTOMERGE, review=review)) return outcome, gitea class DocHintsTest(unittest.TestCase): def test_a_hint_on_documentation_is_no_line_comment(self): """Scenario#66.01, Scenario#72.02""" outcome, gitea = hint_on(DOC) self.assertIs(outcome.result.verdict, Verdict.GREEN) self.assertEqual([r[0] for r in gitea.created_reviews], ["APPROVED"]) self.assertFalse(any(gitea.review_comments)) self.assertIn(f"`{DOC}:1`", gitea.created_comments[-1]) self.assertIn("Unclear sentence", gitea.created_comments[-1]) self.assertNotIn("as a line comment", gitea.created_comments[-1]) self.assertEqual(len(gitea.scheduled_merges), 1) def test_a_hint_on_a_pr_document_is_a_line_comment(self): """Scenario#72.01""" outcome, gitea = hint_on(PR_DOC) self.assertIs(outcome.result.verdict, Verdict.GREEN) [comment] = gitea.review_comments[0] self.assertEqual(comment["path"], PR_DOC) self.assertEqual(gitea.scheduled_merges, []) self.assertIn("merge waits for 1 open hint(s)", outcome.result.gate_note) def test_a_hint_on_code_stays_a_line_comment(self): """Scenario#66.02""" outcome, gitea = hint_on(APP) self.assertIs(outcome.result.verdict, Verdict.GREEN) [comment] = gitea.review_comments[0] self.assertEqual(comment["path"], APP) self.assertEqual(gitea.scheduled_merges, []) self.assertIn("merge waits for 1 open hint(s)", outcome.result.gate_note) def test_doc_hint_line_comments_restores_the_line_comment(self): """Scenario#66.03""" outcome, gitea = hint_on(DOC, doc_hint_line_comments=True) [comment] = gitea.review_comments[0] self.assertEqual(comment["path"], DOC) self.assertEqual(gitea.scheduled_merges, []) self.assertIn("merge waits for 1 open hint(s)", outcome.result.gate_note) if __name__ == "__main__": unittest.main()