GildedRose-Refactoring-Kata/.venv/lib/python3.12/site-packages/approvaltests/asserts.py
2025-06-22 13:36:01 +05:30

56 lines
1.9 KiB
Python

from typing import Any, Optional
from typing_extensions import override
from approval_utilities.utils import write_to_temporary_file
from approvaltests import FileApprover
from approvaltests.approvals import (
get_default_namer,
initialize_options,
verify_with_namer,
)
from approvaltests.core import Reporter
from approvaltests.core.options import Options
from approvaltests.namer.stack_frame_namer import StackFrameNamer
from approvaltests.reporters.testing_reporter import ReporterForTesting
class FilePathNamer(StackFrameNamer):
def __init__(self, file_path: str, extension: None = None) -> None:
StackFrameNamer.__init__(self, extension)
self.file_path = file_path
@override
def get_approved_filename(self, base: Optional[str] = None) -> str:
return self.file_path
def assert_against_file(
actual: str, file_path: str, reporter: Optional[ReporterForTesting] = None
) -> None:
namer = FilePathNamer(file_path)
FileApprover.add_allowed_duplicates(lambda n: n == namer.get_approved_filename())
verify_with_namer(actual, namer, reporter)
def assert_equal_with_reporter(
expected: str,
actual: Any,
reporter: Optional[Reporter] = None,
*, # enforce keyword arguments - https://www.python.org/dev/peps/pep-3102/
options: Optional[Options] = None,
) -> None:
options = initialize_options(options, reporter)
actual = options.scrub(actual)
if actual == expected:
return
name = get_default_namer().get_file_name()
extention = options.for_file.file_extention
expected_file = write_to_temporary_file(expected, name + ".expected.", extention)
actual_file = write_to_temporary_file(actual, name + ".actual.", extention)
options.reporter.report(actual_file, expected_file)
raise AssertionError(
f'expected != actual\n actual: "{actual}"\nexpected: "{expected}"'
)