werkator build succeeded after 00:34
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>
53 lines
2.7 KiB
Python
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"})
|