Files
werkrevisor/tests/test_logging.py
claude-code ecad961fe0
werkator build succeeded after 00:34
werkrevisor 0.13.2: no error in the log for the missing version of an added, deleted or renamed file (#13)
PR-Agent logs a 404 as ERROR when it asks for the base version of an added file or the head version of a deleted one; werkrevisor now filters exactly that line.

Details: the PR document under `docs/prs/`.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Reviewed-on: #13
Co-authored-by: claude-code <claude-code@javagil.de>
2026-10-05 20:34:36 +02:00

53 lines
2.7 KiB
Python

import contextlib
import io
import unittest
from werkrevisor.redact import Redactor
from tests.fakes import FakeGitea, FakeModel, config, deps, diff_for, gitea_file, pr_ref
from werkrevisor import review
from werkrevisor.cli import execute
from werkrevisor.review import configure_logging, note_added_and_deleted_files
from werkrevisor.rules import files_from_gitea
def log_from_gitea_provider(message):
from loguru import logger
err = io.StringIO()
with contextlib.redirect_stderr(err):
configure_logging(Redactor(), "ERROR")
logger.patch(lambda record: record.update(name="pr_agent.git_providers.gitea_provider")).error(message)
configure_logging(Redactor(), "CRITICAL")
return err.getvalue()
class ExpectedMissingVersionTest(unittest.TestCase):
def test_404_for_an_added_deleted_or_renamed_file_is_not_logged(self):
note_added_and_deleted_files(["docs/prs/2026-10-05-PR#12-x.md", "old.py", "n.py"])
for path in ("docs/prs/2026-10-05-PR#12-x.md", "old.py", "n.py"):
with self.subTest(path=path):
self.assertEqual(log_from_gitea_provider(f"Error getting file: {path}, content: (404)"), "")
def test_other_errors_stay_visible(self):
note_added_and_deleted_files(["new.py"])
for message in ("Error getting file: changed.py, content: (404)",
"Error getting file: new.py, content: (500)",
"Failed to publish comment"):
with self.subTest(message=message):
self.assertIn(message, log_from_gitea_provider(message))
class AddedDeletedRenamedTest(unittest.TestCase):
def test_changed_file_knows_added_deleted_and_renamed(self):
added, deleted, renamed, changed = files_from_gitea([
gitea_file("a.py", status="added"), gitea_file("d.py", status="deleted"),
{**gitea_file("n.py", status="renamed"), "previous_filename": "o.py"}, gitea_file("c.py")])
self.assertEqual([(f.added, f.deleted, f.renamed) for f in (added, deleted, renamed, changed)],
[(True, False, False), (False, True, False), (False, False, True), (False, False, False)])
def test_the_review_notes_the_added_deleted_and_renamed_files(self):
files = [gitea_file("a.py", status="added"), gitea_file("d.py", status="deleted"),
{**gitea_file("n.py", status="renamed"), "previous_filename": "o.py"}, gitea_file("c.py")]
gitea = FakeGitea(files=files, diff=diff_for("a.py", added=["x = 1"], new=True) + diff_for("c.py", added=["y = 2"]))
execute(config(), pr_ref(), deps(gitea, FakeModel()), Redactor(), publish=False)
self.assertEqual(review._files_without_one_version, {"a.py", "d.py", "n.py"})