add console printer

also add python-requests as explicit dependency and escape symbols in
repository name for badges in default tempate
This commit is contained in:
2022-03-19 23:48:43 +03:00
parent 060c7412b1
commit a7c6d95b34
59 changed files with 631 additions and 187 deletions

View File

@ -2,6 +2,7 @@ from pytest_mock import MockerFixture
from ahriman.application.application import Application
from ahriman.models.package import Package
from ahriman.models.result import Result
def test_finalize(application: Application, mocker: MockerFixture) -> None:
@ -11,8 +12,8 @@ def test_finalize(application: Application, mocker: MockerFixture) -> None:
report_mock = mocker.patch("ahriman.application.application.Application.report")
sync_mock = mocker.patch("ahriman.application.application.Application.sync")
application._finalize([])
report_mock.assert_called_once_with([], [])
application._finalize(Result())
report_mock.assert_called_once_with([], Result())
sync_mock.assert_called_once_with([], [])

View File

@ -9,6 +9,7 @@ from ahriman.application.application.packages import Packages
from ahriman.models.package import Package
from ahriman.models.package_description import PackageDescription
from ahriman.models.package_source import PackageSource
from ahriman.models.result import Result
def test_finalize(application_packages: Packages) -> None:
@ -211,4 +212,4 @@ def test_remove(application_packages: Packages, mocker: MockerFixture) -> None:
application_packages.remove([])
executor_mock.assert_called_once_with([])
finalize_mock.assert_called_once_with([])
finalize_mock.assert_called_once_with(Result())

View File

@ -6,6 +6,7 @@ from unittest import mock
from ahriman.application.application.repository import Repository
from ahriman.core.tree import Leaf, Tree
from ahriman.models.package import Package
from ahriman.models.result import Result
def test_finalize(application_repository: Repository) -> None:
@ -98,7 +99,7 @@ def test_sign(application_repository: Repository, package_ahriman: Package, pack
])
update_mock.assert_called_once_with([])
sign_repository_mock.assert_called_once_with(application_repository.repository.repo.repo_path)
finalize_mock.assert_called_once_with([])
finalize_mock.assert_called_once_with(Result())
def test_sign_skip(application_repository: Repository, package_ahriman: Package, mocker: MockerFixture) -> None:
@ -132,7 +133,7 @@ def test_sign_specific(application_repository: Repository, package_ahriman: Pack
application_repository.repository.paths.packages / filename.name)
update_mock.assert_called_once_with([])
sign_repository_mock.assert_called_once_with(application_repository.repository.repo.repo_path)
finalize_mock.assert_called_once_with([])
finalize_mock.assert_called_once_with(Result())
def test_sync(application_repository: Repository, mocker: MockerFixture) -> None:
@ -181,7 +182,8 @@ def test_unknown_no_local(application_repository: Repository, package_ahriman: P
assert not application_repository.unknown()
def test_update(application_repository: Repository, package_ahriman: Package, mocker: MockerFixture) -> None:
def test_update(application_repository: Repository, package_ahriman: Package, result: Result,
mocker: MockerFixture) -> None:
"""
must process package updates
"""
@ -189,16 +191,33 @@ def test_update(application_repository: Repository, package_ahriman: Package, mo
tree = Tree([Leaf(package_ahriman, set())])
mocker.patch("ahriman.core.tree.Tree.load", return_value=tree)
mocker.patch("ahriman.core.repository.repository.Repository.packages_built", return_value=[])
mocker.patch("ahriman.core.repository.repository.Repository.packages_built", return_value=paths)
mocker.patch("ahriman.models.package.Package.load", return_value=package_ahriman)
build_mock = mocker.patch("ahriman.core.repository.executor.Executor.process_build", return_value=paths)
update_mock = mocker.patch("ahriman.core.repository.executor.Executor.process_update")
build_mock = mocker.patch("ahriman.core.repository.executor.Executor.process_build", return_value=result)
update_mock = mocker.patch("ahriman.core.repository.executor.Executor.process_update", return_value=result)
finalize_mock = mocker.patch("ahriman.application.application.repository.Repository._finalize")
application_repository.update([package_ahriman])
build_mock.assert_called_once_with([package_ahriman])
update_mock.assert_called_once_with(paths)
finalize_mock.assert_called_once_with([package_ahriman])
update_mock.assert_has_calls([mock.call(paths), mock.call(paths)])
finalize_mock.assert_has_calls([mock.call(result), mock.call(result)])
def test_update_empty(application_repository: Repository, package_ahriman: Package, mocker: MockerFixture) -> None:
"""
must skip updating repository if no packages supplied
"""
paths = [package.filepath for package in package_ahriman.packages.values()]
tree = Tree([Leaf(package_ahriman, set())])
mocker.patch("ahriman.core.tree.Tree.load", return_value=tree)
mocker.patch("ahriman.core.repository.repository.Repository.packages_built", return_value=[])
mocker.patch("ahriman.models.package.Package.load", return_value=package_ahriman)
mocker.patch("ahriman.core.repository.executor.Executor.process_build")
update_mock = mocker.patch("ahriman.core.repository.executor.Executor.process_update")
application_repository.update([package_ahriman])
update_mock.assert_not_called()
def test_updates_all(application_repository: Repository, package_ahriman: Package, mocker: MockerFixture) -> None:

View File

@ -1,67 +0,0 @@
import pytest
from ahriman.application.formatters.aur_printer import AurPrinter
from ahriman.application.formatters.configuration_printer import ConfigurationPrinter
from ahriman.application.formatters.package_printer import PackagePrinter
from ahriman.application.formatters.status_printer import StatusPrinter
from ahriman.application.formatters.string_printer import StringPrinter
from ahriman.application.formatters.update_printer import UpdatePrinter
from ahriman.models.aur_package import AURPackage
from ahriman.models.build_status import BuildStatus
from ahriman.models.package import Package
@pytest.fixture
def aur_package_ahriman_printer(aur_package_ahriman: AURPackage) -> AurPrinter:
"""
fixture for AUR package printer
:param aur_package_ahriman: AUR package fixture
:return: AUR package printer test instance
"""
return AurPrinter(aur_package_ahriman)
@pytest.fixture
def configuration_printer() -> ConfigurationPrinter:
"""
fixture for configuration printer
:return: configuration printer test instance
"""
return ConfigurationPrinter("section", {"key_one": "value_one", "key_two": "value_two"})
@pytest.fixture
def package_ahriman_printer(package_ahriman: Package) -> PackagePrinter:
"""
fixture for package printer
:param package_ahriman: package fixture
:return: package printer test instance
"""
return PackagePrinter(package_ahriman, BuildStatus())
@pytest.fixture
def status_printer() -> StatusPrinter:
"""
fixture for build status printer
:return: build status printer test instance
"""
return StatusPrinter(BuildStatus())
@pytest.fixture
def string_printer() -> StringPrinter:
"""
fixture for any string printer
:return: any string printer test instance
"""
return StringPrinter("hello, world")
@pytest.fixture
def update_printer(package_ahriman: Package) -> UpdatePrinter:
"""
fixture for build status printer
:return: build status printer test instance
"""
return UpdatePrinter(package_ahriman, None)

View File

@ -1,15 +0,0 @@
from ahriman.application.formatters.aur_printer import AurPrinter
def test_properties(aur_package_ahriman_printer: AurPrinter) -> None:
"""
must return non empty properties list
"""
assert aur_package_ahriman_printer.properties()
def test_title(aur_package_ahriman_printer: AurPrinter) -> None:
"""
must return non empty title
"""
assert aur_package_ahriman_printer.title() is not None

View File

@ -1,22 +0,0 @@
from ahriman.application.formatters.configuration_printer import ConfigurationPrinter
def test_properties(configuration_printer: ConfigurationPrinter) -> None:
"""
must return non empty properties list
"""
assert configuration_printer.properties()
def test_properties_required(configuration_printer: ConfigurationPrinter) -> None:
"""
must return all properties as required
"""
assert all(prop.is_required for prop in configuration_printer.properties())
def test_title(configuration_printer: ConfigurationPrinter) -> None:
"""
must return non empty title
"""
assert configuration_printer.title() == "[section]"

View File

@ -1,15 +0,0 @@
from ahriman.application.formatters.package_printer import PackagePrinter
def test_properties(package_ahriman_printer: PackagePrinter) -> None:
"""
must return non empty properties list
"""
assert package_ahriman_printer.properties()
def test_title(package_ahriman_printer: PackagePrinter) -> None:
"""
must return non empty title
"""
assert package_ahriman_printer.title() is not None

View File

@ -1,45 +0,0 @@
from unittest.mock import MagicMock
from ahriman.application.formatters.package_printer import PackagePrinter
from ahriman.application.formatters.printer import Printer
def test_print(package_ahriman_printer: PackagePrinter) -> None:
"""
must print content
"""
log_mock = MagicMock()
package_ahriman_printer.print(verbose=False, log_fn=log_mock)
log_mock.assert_called()
def test_print_empty() -> None:
"""
must not print empty object
"""
log_mock = MagicMock()
Printer().print(verbose=True, log_fn=log_mock)
log_mock.assert_not_called()
def test_print_verbose(package_ahriman_printer: PackagePrinter) -> None:
"""
must print content with increased verbosity
"""
log_mock = MagicMock()
package_ahriman_printer.print(verbose=True, log_fn=log_mock)
log_mock.assert_called()
def test_properties() -> None:
"""
must return empty properties list
"""
assert Printer().properties() == []
def test_title() -> None:
"""
must return empty title
"""
assert Printer().title() is None

View File

@ -1,15 +0,0 @@
from ahriman.application.formatters.status_printer import StatusPrinter
def test_properties(status_printer: StatusPrinter) -> None:
"""
must return empty properties list
"""
assert not status_printer.properties()
def test_title(status_printer: StatusPrinter) -> None:
"""
must return non empty title
"""
assert status_printer.title() is not None

View File

@ -1,15 +0,0 @@
from ahriman.application.formatters.string_printer import StringPrinter
def test_properties(string_printer: StringPrinter) -> None:
"""
must return empty properties list
"""
assert not string_printer.properties()
def test_title(string_printer: StringPrinter) -> None:
"""
must return non empty title
"""
assert string_printer.title() is not None

View File

@ -1,15 +0,0 @@
from ahriman.application.formatters.update_printer import UpdatePrinter
def test_properties(update_printer: UpdatePrinter) -> None:
"""
must return empty properties list
"""
assert update_printer.properties()
def test_title(update_printer: UpdatePrinter) -> None:
"""
must return non empty title
"""
assert update_printer.title() is not None

View File

@ -11,7 +11,7 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
must run command
"""
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
print_mock = mocker.patch("ahriman.application.formatters.printer.Printer.print")
print_mock = mocker.patch("ahriman.core.formatters.printer.Printer.print")
application_mock = mocker.patch("ahriman.core.configuration.Configuration.dump",
return_value=configuration.dump())

View File

@ -45,7 +45,7 @@ def test_run_dry_run(args: argparse.Namespace, configuration: Configuration, pac
application_mock = mocker.patch("ahriman.application.application.Application.unknown",
return_value=[package_ahriman])
remove_mock = mocker.patch("ahriman.application.application.Application.remove")
print_mock = mocker.patch("ahriman.application.formatters.printer.Printer.print")
print_mock = mocker.patch("ahriman.core.formatters.printer.Printer.print")
RemoveUnknown.run(args, "x86_64", configuration, True, False)
application_mock.assert_called_once_with()
@ -65,7 +65,7 @@ def test_run_dry_run_verbose(args: argparse.Namespace, configuration: Configurat
application_mock = mocker.patch("ahriman.application.application.Application.unknown",
return_value=[package_ahriman])
remove_mock = mocker.patch("ahriman.application.application.Application.remove")
print_mock = mocker.patch("ahriman.application.formatters.printer.Printer.print")
print_mock = mocker.patch("ahriman.core.formatters.printer.Printer.print")
RemoveUnknown.run(args, "x86_64", configuration, True, False)
application_mock.assert_called_once_with()

View File

@ -4,6 +4,7 @@ from pytest_mock import MockerFixture
from ahriman.application.handlers import Report
from ahriman.core.configuration import Configuration
from ahriman.models.result import Result
def _default_args(args: argparse.Namespace) -> argparse.Namespace:
@ -25,4 +26,4 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
application_mock = mocker.patch("ahriman.application.application.Application.report")
Report.run(args, "x86_64", configuration, True, False)
application_mock.assert_called_once_with(args.target, [])
application_mock.assert_called_once_with(args.target, Result())

View File

@ -29,7 +29,7 @@ def test_run(args: argparse.Namespace, configuration: Configuration, aur_package
"""
args = _default_args(args)
search_mock = mocker.patch("ahriman.core.alpm.aur.AUR.multisearch", return_value=[aur_package_ahriman])
print_mock = mocker.patch("ahriman.application.formatters.printer.Printer.print")
print_mock = mocker.patch("ahriman.core.formatters.printer.Printer.print")
Search.run(args, "x86_64", configuration, True, False)
search_mock.assert_called_once_with("ahriman")

View File

@ -33,7 +33,7 @@ def test_run(args: argparse.Namespace, configuration: Configuration, package_ahr
packages_mock = mocker.patch("ahriman.core.status.client.Client.get",
return_value=[(package_ahriman, BuildStatus(BuildStatusEnum.Success)),
(package_python_schedule, BuildStatus(BuildStatusEnum.Failed))])
print_mock = mocker.patch("ahriman.application.formatters.printer.Printer.print")
print_mock = mocker.patch("ahriman.core.formatters.printer.Printer.print")
Status.run(args, "x86_64", configuration, True, False)
application_mock.assert_called_once_with()
@ -51,7 +51,7 @@ def test_run_verbose(args: argparse.Namespace, configuration: Configuration, pac
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
mocker.patch("ahriman.core.status.client.Client.get",
return_value=[(package_ahriman, BuildStatus(BuildStatusEnum.Success))])
print_mock = mocker.patch("ahriman.application.formatters.printer.Printer.print")
print_mock = mocker.patch("ahriman.core.formatters.printer.Printer.print")
Status.run(args, "x86_64", configuration, True, False)
print_mock.assert_has_calls([mock.call(True) for _ in range(2)])
@ -83,7 +83,7 @@ def test_run_by_status(args: argparse.Namespace, configuration: Configuration, p
return_value=[(package_ahriman, BuildStatus(BuildStatusEnum.Success)),
(package_python_schedule, BuildStatus(BuildStatusEnum.Failed))])
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
print_mock = mocker.patch("ahriman.application.formatters.printer.Printer.print")
print_mock = mocker.patch("ahriman.core.formatters.printer.Printer.print")
Status.run(args, "x86_64", configuration, True, False)
print_mock.assert_has_calls([mock.call(False) for _ in range(2)])

View File

@ -15,7 +15,7 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
args.parser = _parser
commands_mock = mocker.patch("ahriman.application.handlers.UnsafeCommands.get_unsafe_commands",
return_value=["command"])
print_mock = mocker.patch("ahriman.application.formatters.printer.Printer.print")
print_mock = mocker.patch("ahriman.core.formatters.printer.Printer.print")
UnsafeCommands.run(args, "x86_64", configuration, True, False)
commands_mock.assert_called_once_with(pytest.helpers.anyvar(int))