diff --git a/docs/source/ahriman.application.application.rst b/docs/source/ahriman.application.application.rst index 6a50bdac..eb05b251 100644 --- a/docs/source/ahriman.application.application.rst +++ b/docs/source/ahriman.application.application.rst @@ -13,28 +13,28 @@ ahriman.application.application.application module :show-inheritance: :private-members: -ahriman.application.application.packages module ------------------------------------------------ +ahriman.application.application.application\_packages module +------------------------------------------------------------ -.. automodule:: ahriman.application.application.packages +.. automodule:: ahriman.application.application.application_packages :members: :no-undoc-members: :show-inheritance: :private-members: -ahriman.application.application.properties module -------------------------------------------------- +ahriman.application.application.application\_properties module +-------------------------------------------------------------- -.. automodule:: ahriman.application.application.properties +.. automodule:: ahriman.application.application.application_properties :members: :no-undoc-members: :show-inheritance: :private-members: -ahriman.application.application.repository module -------------------------------------------------- +ahriman.application.application.application\_repository module +-------------------------------------------------------------- -.. automodule:: ahriman.application.application.repository +.. automodule:: ahriman.application.application.application_repository :members: :no-undoc-members: :show-inheritance: diff --git a/docs/source/ahriman.application.handlers.rst b/docs/source/ahriman.application.handlers.rst index fc35624d..72892033 100644 --- a/docs/source/ahriman.application.handlers.rst +++ b/docs/source/ahriman.application.handlers.rst @@ -193,10 +193,10 @@ ahriman.application.handlers.update module :show-inheritance: :private-members: -ahriman.application.handlers.user module ----------------------------------------- +ahriman.application.handlers.users module +----------------------------------------- -.. automodule:: ahriman.application.handlers.user +.. automodule:: ahriman.application.handlers.users :members: :no-undoc-members: :show-inheritance: diff --git a/docs/source/ahriman.core.repository.rst b/docs/source/ahriman.core.repository.rst index 263967b2..ec8fdc08 100644 --- a/docs/source/ahriman.core.repository.rst +++ b/docs/source/ahriman.core.repository.rst @@ -22,19 +22,19 @@ ahriman.core.repository.executor module :show-inheritance: :private-members: -ahriman.core.repository.properties module +ahriman.core.repository.repository module ----------------------------------------- -.. automodule:: ahriman.core.repository.properties +.. automodule:: ahriman.core.repository.repository :members: :no-undoc-members: :show-inheritance: :private-members: -ahriman.core.repository.repository module ------------------------------------------ +ahriman.core.repository.repository\_properties module +----------------------------------------------------- -.. automodule:: ahriman.core.repository.repository +.. automodule:: ahriman.core.repository.repository_properties :members: :no-undoc-members: :show-inheritance: diff --git a/src/ahriman/application/ahriman.py b/src/ahriman/application/ahriman.py index 6c937151..05db2ad1 100644 --- a/src/ahriman/application/ahriman.py +++ b/src/ahriman/application/ahriman.py @@ -661,7 +661,7 @@ def _set_user_add_parser(root: SubParserAction) -> argparse.ArgumentParser: parser.add_argument("-r", "--role", help="user access level", type=UserAccess, choices=UserAccess, default=UserAccess.Read) parser.add_argument("-s", "--secure", help="set file permissions to user-only", action="store_true") - parser.set_defaults(handler=handlers.User, action=Action.Update, architecture=[""], lock=None, no_report=True, + parser.set_defaults(handler=handlers.Users, action=Action.Update, architecture=[""], lock=None, no_report=True, quiet=True, unsafe=True) return parser @@ -682,7 +682,7 @@ def _set_user_list_parser(root: SubParserAction) -> argparse.ArgumentParser: parser.add_argument("username", help="filter users by username", nargs="?") parser.add_argument("-e", "--exit-code", help="return non-zero exit status if result is empty", action="store_true") parser.add_argument("-r", "--role", help="filter users by role", type=UserAccess, choices=UserAccess) - parser.set_defaults(handler=handlers.User, action=Action.List, architecture=[""], lock=None, no_report=True, # nosec + parser.set_defaults(handler=handlers.Users, action=Action.List, architecture=[""], lock=None, no_report=True, # nosec password="", quiet=True, unsafe=True) return parser @@ -702,7 +702,7 @@ def _set_user_remove_parser(root: SubParserAction) -> argparse.ArgumentParser: formatter_class=_formatter) parser.add_argument("username", help="username for web service") parser.add_argument("-s", "--secure", help="set file permissions to user-only", action="store_true") - parser.set_defaults(handler=handlers.User, action=Action.Remove, architecture=[""], lock=None, no_report=True, # nosec + parser.set_defaults(handler=handlers.Users, action=Action.Remove, architecture=[""], lock=None, no_report=True, # nosec password="", quiet=True, unsafe=True) return parser diff --git a/src/ahriman/application/application/application.py b/src/ahriman/application/application/application.py index c7eb4afb..35daac9a 100644 --- a/src/ahriman/application/application/application.py +++ b/src/ahriman/application/application/application.py @@ -19,12 +19,12 @@ # from typing import Set -from ahriman.application.application.packages import Packages -from ahriman.application.application.repository import Repository +from ahriman.application.application.application_packages import ApplicationPackages +from ahriman.application.application.application_repository import ApplicationRepository from ahriman.models.result import Result -class Application(Packages, Repository): +class Application(ApplicationPackages, ApplicationRepository): """ base application class """ diff --git a/src/ahriman/application/application/packages.py b/src/ahriman/application/application/application_packages.py similarity index 97% rename from src/ahriman/application/application/packages.py rename to src/ahriman/application/application/application_packages.py index 2329d701..17f9ef0e 100644 --- a/src/ahriman/application/application/packages.py +++ b/src/ahriman/application/application/application_packages.py @@ -23,7 +23,7 @@ import shutil from pathlib import Path from typing import Any, Iterable, Set -from ahriman.application.application.properties import Properties +from ahriman.application.application.application_properties import ApplicationProperties from ahriman.core.build_tools.sources import Sources from ahriman.core.util import package_like, tmpdir from ahriman.models.package import Package @@ -31,7 +31,7 @@ from ahriman.models.package_source import PackageSource from ahriman.models.result import Result -class Packages(Properties): +class ApplicationPackages(ApplicationProperties): """ package control class """ diff --git a/src/ahriman/application/application/properties.py b/src/ahriman/application/application/application_properties.py similarity index 98% rename from src/ahriman/application/application/properties.py rename to src/ahriman/application/application/application_properties.py index e40c5ac0..436f87a3 100644 --- a/src/ahriman/application/application/properties.py +++ b/src/ahriman/application/application/application_properties.py @@ -24,7 +24,7 @@ from ahriman.core.database.sqlite import SQLite from ahriman.core.repository import Repository -class Properties: +class ApplicationProperties: """ application base properties class diff --git a/src/ahriman/application/application/repository.py b/src/ahriman/application/application/application_repository.py similarity index 98% rename from src/ahriman/application/application/repository.py rename to src/ahriman/application/application/application_repository.py index a2d2b625..d8bc8f23 100644 --- a/src/ahriman/application/application/repository.py +++ b/src/ahriman/application/application/application_repository.py @@ -22,7 +22,7 @@ import shutil from pathlib import Path from typing import Callable, Iterable, List -from ahriman.application.application.properties import Properties +from ahriman.application.application.application_properties import ApplicationProperties from ahriman.core.build_tools.sources import Sources from ahriman.core.formatters.update_printer import UpdatePrinter from ahriman.core.tree import Tree @@ -30,7 +30,7 @@ from ahriman.models.package import Package from ahriman.models.result import Result -class Repository(Properties): +class ApplicationRepository(ApplicationProperties): """ repository control class """ diff --git a/src/ahriman/application/handlers/__init__.py b/src/ahriman/application/handlers/__init__.py index 5ebd54e4..29368174 100644 --- a/src/ahriman/application/handlers/__init__.py +++ b/src/ahriman/application/handlers/__init__.py @@ -39,5 +39,5 @@ from ahriman.application.handlers.status_update import StatusUpdate from ahriman.application.handlers.sync import Sync from ahriman.application.handlers.unsafe_commands import UnsafeCommands from ahriman.application.handlers.update import Update -from ahriman.application.handlers.user import User +from ahriman.application.handlers.users import Users from ahriman.application.handlers.web import Web diff --git a/src/ahriman/application/handlers/user.py b/src/ahriman/application/handlers/users.py similarity index 86% rename from src/ahriman/application/handlers/user.py rename to src/ahriman/application/handlers/users.py index 0e7d1cab..458cdbb4 100644 --- a/src/ahriman/application/handlers/user.py +++ b/src/ahriman/application/handlers/users.py @@ -28,10 +28,10 @@ from ahriman.core.configuration import Configuration from ahriman.core.database.sqlite import SQLite from ahriman.core.formatters.user_printer import UserPrinter from ahriman.models.action import Action -from ahriman.models.user import User as MUser +from ahriman.models.user import User -class User(Handler): +class Users(Handler): """ user management handler """ @@ -54,30 +54,30 @@ class User(Handler): database = SQLite.load(configuration) if args.action == Action.Update: - salt = User.get_salt(configuration) - user = User.user_create(args) + salt = Users.get_salt(configuration) + user = Users.user_create(args) - auth_configuration = User.configuration_get(configuration.include) + auth_configuration = Users.configuration_get(configuration.include) - User.configuration_create(auth_configuration, user, salt, args.as_service, args.secure) + Users.configuration_create(auth_configuration, user, salt, args.as_service, args.secure) database.user_update(user.hash_password(salt)) elif args.action == Action.List: users = database.user_list(args.username, args.role) - User.check_if_empty(args.exit_code, not users) + Users.check_if_empty(args.exit_code, not users) for user in users: UserPrinter(user).print(verbose=True) elif args.action == Action.Remove: database.user_remove(args.username) @staticmethod - def configuration_create(configuration: Configuration, user: MUser, salt: str, + def configuration_create(configuration: Configuration, user: User, salt: str, as_service_user: bool, secure: bool) -> None: """ enable configuration if it has been disabled Args: configuration(Configuration): configuration instance - user(MUser): user descriptor + user(User): user descriptor salt(str): password hash salt as_service_user(bool): add user as service user, also set password and user to configuration secure(bool): if true then set file permissions to 0o600 @@ -86,7 +86,7 @@ class User(Handler): if as_service_user: configuration.set_option("web", "username", user.username) configuration.set_option("web", "password", user.password) - User.configuration_write(configuration, secure) + Users.configuration_write(configuration, secure) @staticmethod def configuration_get(include_path: Path) -> Configuration: @@ -136,10 +136,10 @@ class User(Handler): """ if salt := configuration.get("auth", "salt", fallback=None): return salt - return MUser.generate_password(salt_length) + return User.generate_password(salt_length) @staticmethod - def user_create(args: argparse.Namespace) -> MUser: + def user_create(args: argparse.Namespace) -> User: """ create user descriptor from arguments @@ -147,9 +147,9 @@ class User(Handler): args(argparse.Namespace): command line args Returns: - MUser: built user descriptor + User: built user descriptor """ - user = MUser(args.username, args.password, args.role) + user = User(args.username, args.password, args.role) if user.password is None: user.password = getpass.getpass() return user diff --git a/src/ahriman/core/repository/cleaner.py b/src/ahriman/core/repository/cleaner.py index 13dd51b5..409be206 100644 --- a/src/ahriman/core/repository/cleaner.py +++ b/src/ahriman/core/repository/cleaner.py @@ -22,10 +22,10 @@ import shutil from pathlib import Path from typing import List -from ahriman.core.repository.properties import Properties +from ahriman.core.repository.repository_properties import RepositoryProperties -class Cleaner(Properties): +class Cleaner(RepositoryProperties): """ trait to clean common repository objects """ diff --git a/src/ahriman/core/repository/properties.py b/src/ahriman/core/repository/repository_properties.py similarity index 99% rename from src/ahriman/core/repository/properties.py rename to src/ahriman/core/repository/repository_properties.py index b6a919b4..119091c6 100644 --- a/src/ahriman/core/repository/properties.py +++ b/src/ahriman/core/repository/repository_properties.py @@ -29,7 +29,7 @@ from ahriman.core.status.client import Client from ahriman.core.util import check_user -class Properties: +class RepositoryProperties: """ repository internal objects holder diff --git a/tests/ahriman/application/application/conftest.py b/tests/ahriman/application/application/conftest.py index 10b80151..c8a0db4a 100644 --- a/tests/ahriman/application/application/conftest.py +++ b/tests/ahriman/application/application/conftest.py @@ -2,15 +2,15 @@ import pytest from pytest_mock import MockerFixture -from ahriman.application.application.packages import Packages -from ahriman.application.application.properties import Properties -from ahriman.application.application.repository import Repository +from ahriman.application.application.application_packages import ApplicationPackages +from ahriman.application.application.application_properties import ApplicationProperties +from ahriman.application.application.application_repository import ApplicationRepository from ahriman.core.configuration import Configuration from ahriman.core.database.sqlite import SQLite @pytest.fixture -def application_packages(configuration: Configuration, database: SQLite, mocker: MockerFixture) -> Packages: +def application_packages(configuration: Configuration, database: SQLite, mocker: MockerFixture) -> ApplicationPackages: """ fixture for application with package functions @@ -20,15 +20,16 @@ def application_packages(configuration: Configuration, database: SQLite, mocker: mocker(MockerFixture): mocker object Returns: - Packages: application test instance + ApplicationPackages: application test instance """ mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create") mocker.patch("ahriman.core.database.sqlite.SQLite.load", return_value=database) - return Packages("x86_64", configuration, no_report=True, unsafe=False) + return ApplicationPackages("x86_64", configuration, no_report=True, unsafe=False) @pytest.fixture -def application_properties(configuration: Configuration, database: SQLite, mocker: MockerFixture) -> Properties: +def application_properties(configuration: Configuration, database: SQLite, + mocker: MockerFixture) -> ApplicationProperties: """ fixture for application with properties only @@ -38,15 +39,16 @@ def application_properties(configuration: Configuration, database: SQLite, mocke mocker(MockerFixture): mocker object Returns: - Properties: application test instance + ApplicationProperties: application test instance """ mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create") mocker.patch("ahriman.core.database.sqlite.SQLite.load", return_value=database) - return Properties("x86_64", configuration, no_report=True, unsafe=False) + return ApplicationProperties("x86_64", configuration, no_report=True, unsafe=False) @pytest.fixture -def application_repository(configuration: Configuration, database: SQLite, mocker: MockerFixture) -> Repository: +def application_repository(configuration: Configuration, database: SQLite, + mocker: MockerFixture) -> ApplicationRepository: """ fixture for application with repository functions @@ -56,8 +58,8 @@ def application_repository(configuration: Configuration, database: SQLite, mocke mocker(MockerFixture): mocker object Returns: - Repository: application test instance + ApplicationRepository: application test instance """ mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create") mocker.patch("ahriman.core.database.sqlite.SQLite.load", return_value=database) - return Repository("x86_64", configuration, no_report=True, unsafe=False) + return ApplicationRepository("x86_64", configuration, no_report=True, unsafe=False) diff --git a/tests/ahriman/application/application/test_application_packages.py b/tests/ahriman/application/application/test_application_packages.py index 938ea6ce..8454de10 100644 --- a/tests/ahriman/application/application/test_application_packages.py +++ b/tests/ahriman/application/application/test_application_packages.py @@ -4,14 +4,14 @@ from pathlib import Path from pytest_mock import MockerFixture from unittest.mock import MagicMock -from ahriman.application.application.packages import Packages +from ahriman.application.application.application_packages import ApplicationPackages 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: +def test_finalize(application_packages: ApplicationPackages) -> None: """ must raise NotImplemented for missing finalize method """ @@ -19,7 +19,7 @@ def test_finalize(application_packages: Packages) -> None: application_packages._finalize([]) -def test_known_packages(application_packages: Packages) -> None: +def test_known_packages(application_packages: ApplicationPackages) -> None: """ must raise NotImplemented for missing known_packages method """ @@ -27,7 +27,10 @@ def test_known_packages(application_packages: Packages) -> None: application_packages._known_packages() -def test_add_archive(application_packages: Packages, package_ahriman: Package, mocker: MockerFixture) -> None: +def test_add_archive( + application_packages: ApplicationPackages, + package_ahriman: Package, + mocker: MockerFixture) -> None: """ must add package from archive """ @@ -37,13 +40,14 @@ def test_add_archive(application_packages: Packages, package_ahriman: Package, m Path(package_ahriman.base), application_packages.repository.paths.packages / package_ahriman.base) -def test_add_aur(application_packages: Packages, package_ahriman: Package, mocker: MockerFixture) -> None: +def test_add_aur(application_packages: ApplicationPackages, package_ahriman: Package, mocker: MockerFixture) -> None: """ must add package from AUR """ mocker.patch("ahriman.models.package.Package.load", return_value=package_ahriman) load_mock = mocker.patch("ahriman.core.build_tools.sources.Sources.load") - dependencies_mock = mocker.patch("ahriman.application.application.packages.Packages._process_dependencies") + dependencies_mock = mocker.patch( + "ahriman.application.application.application_packages.ApplicationPackages._process_dependencies") build_queue_mock = mocker.patch("ahriman.core.database.sqlite.SQLite.build_queue_insert") application_packages._add_aur(package_ahriman.base, set(), False) @@ -55,7 +59,10 @@ def test_add_aur(application_packages: Packages, package_ahriman: Package, mocke build_queue_mock.assert_called_once_with(package_ahriman) -def test_add_directory(application_packages: Packages, package_ahriman: Package, mocker: MockerFixture) -> None: +def test_add_directory( + application_packages: ApplicationPackages, + package_ahriman: Package, + mocker: MockerFixture) -> None: """ must add packages from directory """ @@ -69,14 +76,15 @@ def test_add_directory(application_packages: Packages, package_ahriman: Package, copy_mock.assert_called_once_with(filename, application_packages.repository.paths.packages / filename.name) -def test_add_local(application_packages: Packages, package_ahriman: Package, mocker: MockerFixture) -> None: +def test_add_local(application_packages: ApplicationPackages, package_ahriman: Package, mocker: MockerFixture) -> None: """ must add package from local sources """ mocker.patch("ahriman.models.package.Package.load", return_value=package_ahriman) init_mock = mocker.patch("ahriman.core.build_tools.sources.Sources.init") copytree_mock = mocker.patch("shutil.copytree") - dependencies_mock = mocker.patch("ahriman.application.application.packages.Packages._process_dependencies") + dependencies_mock = mocker.patch( + "ahriman.application.application.application_packages.ApplicationPackages._process_dependencies") build_queue_mock = mocker.patch("ahriman.core.database.sqlite.SQLite.build_queue_insert") application_packages._add_local(package_ahriman.base, set(), False) @@ -87,7 +95,7 @@ def test_add_local(application_packages: Packages, package_ahriman: Package, moc build_queue_mock.assert_called_once_with(package_ahriman) -def test_add_remote(application_packages: Packages, package_description_ahriman: PackageDescription, +def test_add_remote(application_packages: ApplicationPackages, package_description_ahriman: PackageDescription, mocker: MockerFixture) -> None: """ must add package from remote source @@ -104,109 +112,120 @@ def test_add_remote(application_packages: Packages, package_description_ahriman: response_mock.raise_for_status.assert_called_once_with() -def test_process_dependencies(application_packages: Packages, mocker: MockerFixture) -> None: +def test_process_dependencies(application_packages: ApplicationPackages, mocker: MockerFixture) -> None: """ must process dependencies addition """ missing = {"python"} path = Path("local") dependencies_mock = mocker.patch("ahriman.models.package.Package.dependencies", return_value=missing) - add_mock = mocker.patch("ahriman.application.application.packages.Packages.add") + add_mock = mocker.patch("ahriman.application.application.application_packages.ApplicationPackages.add") application_packages._process_dependencies(path, set(), False) dependencies_mock.assert_called_once_with(path) add_mock.assert_called_once_with(missing, PackageSource.AUR, False) -def test_process_dependencies_missing(application_packages: Packages, mocker: MockerFixture) -> None: +def test_process_dependencies_missing(application_packages: ApplicationPackages, mocker: MockerFixture) -> None: """ must process dependencies addition only for missing packages """ path = Path("local") dependencies_mock = mocker.patch("ahriman.models.package.Package.dependencies", return_value={"python", "python-aiohttp"}) - add_mock = mocker.patch("ahriman.application.application.packages.Packages.add") + add_mock = mocker.patch("ahriman.application.application.application_packages.ApplicationPackages.add") application_packages._process_dependencies(path, {"python"}, False) dependencies_mock.assert_called_once_with(path) add_mock.assert_called_once_with({"python-aiohttp"}, PackageSource.AUR, False) -def test_process_dependencies_skip(application_packages: Packages, mocker: MockerFixture) -> None: +def test_process_dependencies_skip(application_packages: ApplicationPackages, mocker: MockerFixture) -> None: """ must skip dependencies processing """ dependencies_mock = mocker.patch("ahriman.models.package.Package.dependencies") - add_mock = mocker.patch("ahriman.application.application.packages.Packages.add") + add_mock = mocker.patch("ahriman.application.application.application_packages.ApplicationPackages.add") application_packages._process_dependencies(Path("local"), set(), True) dependencies_mock.assert_not_called() add_mock.assert_not_called() -def test_add_add_archive(application_packages: Packages, package_ahriman: Package, mocker: MockerFixture) -> None: +def test_add_add_archive(application_packages: ApplicationPackages, package_ahriman: Package, + mocker: MockerFixture) -> None: """ must add package from archive via add function """ - mocker.patch("ahriman.application.application.packages.Packages._known_packages", return_value=set()) - add_mock = mocker.patch("ahriman.application.application.packages.Packages._add_archive") + mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._known_packages", + return_value=set()) + add_mock = mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._add_archive") application_packages.add([package_ahriman.base], PackageSource.Archive, False) add_mock.assert_called_once_with(package_ahriman.base, set(), False) -def test_add_add_aur(application_packages: Packages, package_ahriman: Package, mocker: MockerFixture) -> None: +def test_add_add_aur( + application_packages: ApplicationPackages, + package_ahriman: Package, + mocker: MockerFixture) -> None: """ must add package from AUR via add function """ - mocker.patch("ahriman.application.application.packages.Packages._known_packages", return_value=set()) - add_mock = mocker.patch("ahriman.application.application.packages.Packages._add_aur") + mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._known_packages", + return_value=set()) + add_mock = mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._add_aur") application_packages.add([package_ahriman.base], PackageSource.AUR, True) add_mock.assert_called_once_with(package_ahriman.base, set(), True) -def test_add_add_directory(application_packages: Packages, package_ahriman: Package, mocker: MockerFixture) -> None: +def test_add_add_directory(application_packages: ApplicationPackages, package_ahriman: Package, + mocker: MockerFixture) -> None: """ must add packages from directory via add function """ - mocker.patch("ahriman.application.application.packages.Packages._known_packages", return_value=set()) - add_mock = mocker.patch("ahriman.application.application.packages.Packages._add_directory") + mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._known_packages", + return_value=set()) + add_mock = mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._add_directory") application_packages.add([package_ahriman.base], PackageSource.Directory, False) add_mock.assert_called_once_with(package_ahriman.base, set(), False) -def test_add_add_local(application_packages: Packages, package_ahriman: Package, mocker: MockerFixture) -> None: +def test_add_add_local(application_packages: ApplicationPackages, package_ahriman: Package, + mocker: MockerFixture) -> None: """ must add package from local sources via add function """ - mocker.patch("ahriman.application.application.packages.Packages._known_packages", return_value=set()) - add_mock = mocker.patch("ahriman.application.application.packages.Packages._add_local") + mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._known_packages", + return_value=set()) + add_mock = mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._add_local") application_packages.add([package_ahriman.base], PackageSource.Local, False) add_mock.assert_called_once_with(package_ahriman.base, set(), False) -def test_add_add_remote(application_packages: Packages, package_description_ahriman: PackageDescription, +def test_add_add_remote(application_packages: ApplicationPackages, package_description_ahriman: PackageDescription, mocker: MockerFixture) -> None: """ must add package from remote source via add function """ - mocker.patch("ahriman.application.application.packages.Packages._known_packages", return_value=set()) - add_mock = mocker.patch("ahriman.application.application.packages.Packages._add_remote") + mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._known_packages", + return_value=set()) + add_mock = mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._add_remote") url = f"https://host/{package_description_ahriman.filename}" application_packages.add([url], PackageSource.Remote, False) add_mock.assert_called_once_with(url, set(), False) -def test_remove(application_packages: Packages, mocker: MockerFixture) -> None: +def test_remove(application_packages: ApplicationPackages, mocker: MockerFixture) -> None: """ must remove package """ executor_mock = mocker.patch("ahriman.core.repository.executor.Executor.process_remove") - finalize_mock = mocker.patch("ahriman.application.application.packages.Packages._finalize") + finalize_mock = mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._finalize") application_packages.remove([]) executor_mock.assert_called_once_with([]) diff --git a/tests/ahriman/application/application/test_application_properties.py b/tests/ahriman/application/application/test_application_properties.py index b4dae48a..803c8a16 100644 --- a/tests/ahriman/application/application/test_application_properties.py +++ b/tests/ahriman/application/application/test_application_properties.py @@ -1,7 +1,7 @@ -from ahriman.application.application.properties import Properties +from ahriman.application.application.application_properties import ApplicationProperties -def test_create_tree(application_properties: Properties) -> None: +def test_create_tree(application_properties: ApplicationProperties) -> None: """ must have repository attribute """ diff --git a/tests/ahriman/application/application/test_application_repository.py b/tests/ahriman/application/application/test_application_repository.py index 221705c6..0231ccff 100644 --- a/tests/ahriman/application/application/test_application_repository.py +++ b/tests/ahriman/application/application/test_application_repository.py @@ -3,13 +3,13 @@ import pytest from pytest_mock import MockerFixture from unittest import mock -from ahriman.application.application.repository import Repository +from ahriman.application.application.application_repository import ApplicationRepository 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: +def test_finalize(application_repository: ApplicationRepository) -> None: """ must raise NotImplemented for missing finalize method """ @@ -17,7 +17,7 @@ def test_finalize(application_repository: Repository) -> None: application_repository._finalize([]) -def test_clean_cache(application_repository: Repository, mocker: MockerFixture) -> None: +def test_clean_cache(application_repository: ApplicationRepository, mocker: MockerFixture) -> None: """ must clean cache directory """ @@ -26,7 +26,7 @@ def test_clean_cache(application_repository: Repository, mocker: MockerFixture) clear_mock.assert_called_once_with() -def test_clean_chroot(application_repository: Repository, mocker: MockerFixture) -> None: +def test_clean_chroot(application_repository: ApplicationRepository, mocker: MockerFixture) -> None: """ must clean chroot directory """ @@ -35,7 +35,7 @@ def test_clean_chroot(application_repository: Repository, mocker: MockerFixture) clear_mock.assert_called_once_with() -def test_clean_manual(application_repository: Repository, mocker: MockerFixture) -> None: +def test_clean_manual(application_repository: ApplicationRepository, mocker: MockerFixture) -> None: """ must clean manual directory """ @@ -44,7 +44,7 @@ def test_clean_manual(application_repository: Repository, mocker: MockerFixture) clear_mock.assert_called_once_with() -def test_clean_packages(application_repository: Repository, mocker: MockerFixture) -> None: +def test_clean_packages(application_repository: ApplicationRepository, mocker: MockerFixture) -> None: """ must clean packages directory """ @@ -53,7 +53,7 @@ def test_clean_packages(application_repository: Repository, mocker: MockerFixtur clear_mock.assert_called_once_with() -def test_report(application_repository: Repository, mocker: MockerFixture) -> None: +def test_report(application_repository: ApplicationRepository, mocker: MockerFixture) -> None: """ must generate report """ @@ -62,7 +62,7 @@ def test_report(application_repository: Repository, mocker: MockerFixture) -> No executor_mock.assert_called_once_with(["a"], []) -def test_sign(application_repository: Repository, package_ahriman: Package, package_python_schedule: Package, +def test_sign(application_repository: ApplicationRepository, package_ahriman: Package, package_python_schedule: Package, mocker: MockerFixture) -> None: """ must sign world @@ -70,9 +70,10 @@ def test_sign(application_repository: Repository, package_ahriman: Package, pack mocker.patch("ahriman.core.repository.repository.Repository.packages", return_value=[package_ahriman, package_python_schedule]) copy_mock = mocker.patch("shutil.copy") - update_mock = mocker.patch("ahriman.application.application.repository.Repository.update") + update_mock = mocker.patch("ahriman.application.application.application_repository.ApplicationRepository.update") sign_repository_mock = mocker.patch("ahriman.core.sign.gpg.GPG.process_sign_repository") - finalize_mock = mocker.patch("ahriman.application.application.repository.Repository._finalize") + finalize_mock = mocker.patch( + "ahriman.application.application.application_repository.ApplicationRepository._finalize") application_repository.sign([]) copy_mock.assert_has_calls([ @@ -84,29 +85,31 @@ def test_sign(application_repository: Repository, package_ahriman: Package, pack finalize_mock.assert_called_once_with(Result()) -def test_sign_skip(application_repository: Repository, package_ahriman: Package, mocker: MockerFixture) -> None: +def test_sign_skip(application_repository: ApplicationRepository, package_ahriman: Package, + mocker: MockerFixture) -> None: """ must skip sign packages with empty filename """ package_ahriman.packages[package_ahriman.base].filename = None mocker.patch("ahriman.core.repository.repository.Repository.packages", return_value=[package_ahriman]) - mocker.patch("ahriman.application.application.repository.Repository.update") - mocker.patch("ahriman.application.application.repository.Repository._finalize") + mocker.patch("ahriman.application.application.application_repository.ApplicationRepository.update") + mocker.patch("ahriman.application.application.application_repository.ApplicationRepository._finalize") application_repository.sign([]) -def test_sign_specific(application_repository: Repository, package_ahriman: Package, package_python_schedule: Package, - mocker: MockerFixture) -> None: +def test_sign_specific(application_repository: ApplicationRepository, package_ahriman: Package, + package_python_schedule: Package, mocker: MockerFixture) -> None: """ must sign only specified packages """ mocker.patch("ahriman.core.repository.repository.Repository.packages", return_value=[package_ahriman, package_python_schedule]) copy_mock = mocker.patch("shutil.copy") - update_mock = mocker.patch("ahriman.application.application.repository.Repository.update") + update_mock = mocker.patch("ahriman.application.application.application_repository.ApplicationRepository.update") sign_repository_mock = mocker.patch("ahriman.core.sign.gpg.GPG.process_sign_repository") - finalize_mock = mocker.patch("ahriman.application.application.repository.Repository._finalize") + finalize_mock = mocker.patch( + "ahriman.application.application.application_repository.ApplicationRepository._finalize") filename = package_ahriman.packages[package_ahriman.base].filepath application_repository.sign([package_ahriman.base]) @@ -118,7 +121,7 @@ def test_sign_specific(application_repository: Repository, package_ahriman: Pack finalize_mock.assert_called_once_with(Result()) -def test_sync(application_repository: Repository, mocker: MockerFixture) -> None: +def test_sync(application_repository: ApplicationRepository, mocker: MockerFixture) -> None: """ must sync to remote """ @@ -127,7 +130,8 @@ def test_sync(application_repository: Repository, mocker: MockerFixture) -> None executor_mock.assert_called_once_with(["a"], []) -def test_unknown_no_aur(application_repository: Repository, package_ahriman: Package, mocker: MockerFixture) -> None: +def test_unknown_no_aur(application_repository: ApplicationRepository, package_ahriman: Package, + mocker: MockerFixture) -> None: """ must return empty list in case if there is locally stored PKGBUILD """ @@ -140,7 +144,7 @@ def test_unknown_no_aur(application_repository: Repository, package_ahriman: Pac assert not application_repository.unknown() -def test_unknown_no_aur_no_local(application_repository: Repository, package_ahriman: Package, +def test_unknown_no_aur_no_local(application_repository: ApplicationRepository, package_ahriman: Package, mocker: MockerFixture) -> None: """ must return list of packages missing in aur and in local storage @@ -153,7 +157,8 @@ def test_unknown_no_aur_no_local(application_repository: Repository, package_ahr assert packages == list(package_ahriman.packages.keys()) -def test_unknown_no_local(application_repository: Repository, package_ahriman: Package, mocker: MockerFixture) -> None: +def test_unknown_no_local(application_repository: ApplicationRepository, package_ahriman: Package, + mocker: MockerFixture) -> None: """ must return empty list in case if there is package in AUR """ @@ -164,7 +169,7 @@ 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, result: Result, +def test_update(application_repository: ApplicationRepository, package_ahriman: Package, result: Result, mocker: MockerFixture) -> None: """ must process package updates @@ -177,7 +182,8 @@ def test_update(application_repository: Repository, package_ahriman: Package, re mocker.patch("ahriman.models.package.Package.load", return_value=package_ahriman) 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") + finalize_mock = mocker.patch( + "ahriman.application.application.application_repository.ApplicationRepository._finalize") application_repository.update([package_ahriman]) build_mock.assert_called_once_with([package_ahriman]) @@ -185,7 +191,8 @@ def test_update(application_repository: Repository, package_ahriman: Package, re finalize_mock.assert_has_calls([mock.call(result), mock.call(result)]) -def test_update_empty(application_repository: Repository, package_ahriman: Package, mocker: MockerFixture) -> None: +def test_update_empty(application_repository: ApplicationRepository, package_ahriman: Package, + mocker: MockerFixture) -> None: """ must skip updating repository if no packages supplied """ @@ -202,7 +209,8 @@ def test_update_empty(application_repository: Repository, package_ahriman: Packa update_mock.assert_not_called() -def test_updates_all(application_repository: Repository, package_ahriman: Package, mocker: MockerFixture) -> None: +def test_updates_all(application_repository: ApplicationRepository, package_ahriman: Package, + mocker: MockerFixture) -> None: """ must get updates for all """ @@ -218,7 +226,7 @@ def test_updates_all(application_repository: Repository, package_ahriman: Packag updates_manual_mock.assert_called_once_with() -def test_updates_disabled(application_repository: Repository, mocker: MockerFixture) -> None: +def test_updates_disabled(application_repository: ApplicationRepository, mocker: MockerFixture) -> None: """ must get updates without anything """ @@ -233,7 +241,7 @@ def test_updates_disabled(application_repository: Repository, mocker: MockerFixt updates_manual_mock.assert_not_called() -def test_updates_no_aur(application_repository: Repository, mocker: MockerFixture) -> None: +def test_updates_no_aur(application_repository: ApplicationRepository, mocker: MockerFixture) -> None: """ must get updates without aur """ @@ -248,7 +256,7 @@ def test_updates_no_aur(application_repository: Repository, mocker: MockerFixtur updates_manual_mock.assert_called_once_with() -def test_updates_no_local(application_repository: Repository, mocker: MockerFixture) -> None: +def test_updates_no_local(application_repository: ApplicationRepository, mocker: MockerFixture) -> None: """ must get updates without local packages """ @@ -263,7 +271,7 @@ def test_updates_no_local(application_repository: Repository, mocker: MockerFixt updates_manual_mock.assert_called_once_with() -def test_updates_no_manual(application_repository: Repository, mocker: MockerFixture) -> None: +def test_updates_no_manual(application_repository: ApplicationRepository, mocker: MockerFixture) -> None: """ must get updates without manual """ @@ -278,7 +286,7 @@ def test_updates_no_manual(application_repository: Repository, mocker: MockerFix updates_manual_mock.assert_not_called() -def test_updates_no_vcs(application_repository: Repository, mocker: MockerFixture) -> None: +def test_updates_no_vcs(application_repository: ApplicationRepository, mocker: MockerFixture) -> None: """ must get updates without VCS """ @@ -293,7 +301,7 @@ def test_updates_no_vcs(application_repository: Repository, mocker: MockerFixtur updates_manual_mock.assert_called_once_with() -def test_updates_with_filter(application_repository: Repository, mocker: MockerFixture) -> None: +def test_updates_with_filter(application_repository: ApplicationRepository, mocker: MockerFixture) -> None: """ must get updates with filter """ diff --git a/tests/ahriman/application/handlers/test_handler_user.py b/tests/ahriman/application/handlers/test_handler_users.py similarity index 82% rename from tests/ahriman/application/handlers/test_handler_user.py rename to tests/ahriman/application/handlers/test_handler_users.py index 2f3394ac..4c387efa 100644 --- a/tests/ahriman/application/handlers/test_handler_user.py +++ b/tests/ahriman/application/handlers/test_handler_users.py @@ -4,12 +4,12 @@ import pytest from pathlib import Path from pytest_mock import MockerFixture -from ahriman.application.handlers import User +from ahriman.application.handlers import Users from ahriman.core.configuration import Configuration from ahriman.core.database.sqlite import SQLite from ahriman.core.exceptions import InitializeException from ahriman.models.action import Action -from ahriman.models.user import User as MUser +from ahriman.models.user import User from ahriman.models.user_access import UserAccess @@ -38,16 +38,16 @@ def test_run(args: argparse.Namespace, configuration: Configuration, database: S must run command """ args = _default_args(args) - user = MUser(args.username, args.password, args.role) + user = User(args.username, args.password, args.role) mocker.patch("ahriman.core.database.sqlite.SQLite.load", return_value=database) mocker.patch("ahriman.models.user.User.hash_password", return_value=user) - get_auth_configuration_mock = mocker.patch("ahriman.application.handlers.User.configuration_get") - create_configuration_mock = mocker.patch("ahriman.application.handlers.User.configuration_create") - create_user_mock = mocker.patch("ahriman.application.handlers.User.user_create", return_value=user) - get_salt_mock = mocker.patch("ahriman.application.handlers.User.get_salt", return_value="salt") + get_auth_configuration_mock = mocker.patch("ahriman.application.handlers.Users.configuration_get") + create_configuration_mock = mocker.patch("ahriman.application.handlers.Users.configuration_create") + create_user_mock = mocker.patch("ahriman.application.handlers.Users.user_create", return_value=user) + get_salt_mock = mocker.patch("ahriman.application.handlers.Users.get_salt", return_value="salt") update_mock = mocker.patch("ahriman.core.database.sqlite.SQLite.user_update") - User.run(args, "x86_64", configuration, True, False) + Users.run(args, "x86_64", configuration, True, False) get_auth_configuration_mock.assert_called_once_with(configuration.include) create_configuration_mock.assert_called_once_with(pytest.helpers.anyvar(int), pytest.helpers.anyvar(int), pytest.helpers.anyvar(int), args.as_service, args.secure) @@ -67,7 +67,7 @@ def test_run_list(args: argparse.Namespace, configuration: Configuration, databa check_mock = mocker.patch("ahriman.application.handlers.handler.Handler.check_if_empty") list_mock = mocker.patch("ahriman.core.database.sqlite.SQLite.user_list", return_value=[user]) - User.run(args, "x86_64", configuration, True, False) + Users.run(args, "x86_64", configuration, True, False) list_mock.assert_called_once_with("user", args.role) check_mock.assert_called_once_with(False, False) @@ -84,7 +84,7 @@ def test_run_empty_exception(args: argparse.Namespace, configuration: Configurat mocker.patch("ahriman.core.database.sqlite.SQLite.user_list", return_value=[]) check_mock = mocker.patch("ahriman.application.handlers.handler.Handler.check_if_empty") - User.run(args, "x86_64", configuration, True, False) + Users.run(args, "x86_64", configuration, True, False) check_mock.assert_called_once_with(True, True) @@ -98,36 +98,36 @@ def test_run_remove(args: argparse.Namespace, configuration: Configuration, data mocker.patch("ahriman.core.database.sqlite.SQLite.load", return_value=database) remove_mock = mocker.patch("ahriman.core.database.sqlite.SQLite.user_remove") - User.run(args, "x86_64", configuration, True, False) + Users.run(args, "x86_64", configuration, True, False) remove_mock.assert_called_once_with(args.username) -def test_configuration_create(configuration: Configuration, user: MUser, mocker: MockerFixture) -> None: +def test_configuration_create(configuration: Configuration, user: User, mocker: MockerFixture) -> None: """ must correctly create configuration file """ mocker.patch("pathlib.Path.open") set_mock = mocker.patch("ahriman.core.configuration.Configuration.set_option") - write_mock = mocker.patch("ahriman.application.handlers.User.configuration_write") + write_mock = mocker.patch("ahriman.application.handlers.Users.configuration_write") - User.configuration_create(configuration, user, "salt", False, False) + Users.configuration_create(configuration, user, "salt", False, False) set_mock.assert_called_once_with("auth", "salt", pytest.helpers.anyvar(int)) write_mock.assert_called_once_with(configuration, False) def test_configuration_create_with_plain_password( configuration: Configuration, - user: MUser, + user: User, mocker: MockerFixture) -> None: """ must set plain text password and user for the service """ mocker.patch("pathlib.Path.open") - User.configuration_create(configuration, user, "salt", True, False) + Users.configuration_create(configuration, user, "salt", True, False) - generated = MUser.from_option(user.username, user.password).hash_password("salt") - service = MUser.from_option(configuration.get("web", "username"), configuration.get("web", "password")) + generated = User.from_option(user.username, user.password).hash_password("salt") + service = User.from_option(configuration.get("web", "username"), configuration.get("web", "password")) assert generated.username == service.username assert generated.check_credentials(service.password, configuration.get("auth", "salt")) @@ -140,7 +140,7 @@ def test_configuration_get(mocker: MockerFixture) -> None: mocker.patch("pathlib.Path.is_file", return_value=True) read_mock = mocker.patch("ahriman.core.configuration.Configuration.read") - assert User.configuration_get(Path("path")) + assert Users.configuration_get(Path("path")) read_mock.assert_called_once_with(Path("path") / "auth.ini") @@ -152,7 +152,7 @@ def test_configuration_write(configuration: Configuration, mocker: MockerFixture write_mock = mocker.patch("ahriman.core.configuration.Configuration.write") chmod_mock = mocker.patch("pathlib.Path.chmod") - User.configuration_write(configuration, secure=True) + Users.configuration_write(configuration, secure=True) write_mock.assert_called_once_with(pytest.helpers.anyvar(int)) chmod_mock.assert_called_once_with(0o600) @@ -165,7 +165,7 @@ def test_configuration_write_insecure(configuration: Configuration, mocker: Mock mocker.patch("ahriman.core.configuration.Configuration.write") chmod_mock = mocker.patch("pathlib.Path.chmod") - User.configuration_write(configuration, secure=False) + Users.configuration_write(configuration, secure=False) chmod_mock.assert_not_called() @@ -177,14 +177,14 @@ def test_configuration_write_not_loaded(configuration: Configuration, mocker: Mo mocker.patch("pathlib.Path.open") with pytest.raises(InitializeException): - User.configuration_write(configuration, secure=True) + Users.configuration_write(configuration, secure=True) def test_get_salt_read(configuration: Configuration) -> None: """ must read salt from configuration """ - assert User.get_salt(configuration) == "salt" + assert Users.get_salt(configuration) == "salt" def test_get_salt_generate(configuration: Configuration) -> None: @@ -193,17 +193,17 @@ def test_get_salt_generate(configuration: Configuration) -> None: """ configuration.remove_option("auth", "salt") - salt = User.get_salt(configuration, 16) + salt = Users.get_salt(configuration, 16) assert salt assert len(salt) == 16 -def test_user_create(args: argparse.Namespace, user: MUser) -> None: +def test_user_create(args: argparse.Namespace, user: User) -> None: """ must create user """ args = _default_args(args) - generated = User.user_create(args) + generated = Users.user_create(args) assert generated.username == user.username assert generated.access == user.access @@ -216,7 +216,7 @@ def test_user_create_getpass(args: argparse.Namespace, mocker: MockerFixture) -> args.password = None getpass_mock = mocker.patch("getpass.getpass", return_value="password") - generated = User.user_create(args) + generated = Users.user_create(args) getpass_mock.assert_called_once_with() assert generated.password == "password" @@ -226,4 +226,4 @@ def test_disallow_auto_architecture_run() -> None: """ must not allow multi architecture run """ - assert not User.ALLOW_AUTO_ARCHITECTURE_RUN + assert not Users.ALLOW_AUTO_ARCHITECTURE_RUN diff --git a/tests/ahriman/core/repository/conftest.py b/tests/ahriman/core/repository/conftest.py index 8b8bce8e..b78e5cf8 100644 --- a/tests/ahriman/core/repository/conftest.py +++ b/tests/ahriman/core/repository/conftest.py @@ -7,7 +7,6 @@ from ahriman.core.database.sqlite import SQLite from ahriman.core.repository import Repository from ahriman.core.repository.cleaner import Cleaner from ahriman.core.repository.executor import Executor -from ahriman.core.repository.properties import Properties from ahriman.core.repository.update_handler import UpdateHandler @@ -66,21 +65,6 @@ def repository(configuration: Configuration, database: SQLite, mocker: MockerFix return Repository("x86_64", configuration, database, no_report=True, unsafe=False) -@pytest.fixture -def properties(configuration: Configuration, database: SQLite) -> Properties: - """ - fixture for properties - - Args: - configuration(Configuration): configuration fixture - database(SQLite): database fixture - - Returns: - Properties: properties test instance - """ - return Properties("x86_64", configuration, database, no_report=True, unsafe=False) - - @pytest.fixture def update_handler(configuration: Configuration, database: SQLite, mocker: MockerFixture) -> UpdateHandler: """ diff --git a/tests/ahriman/core/repository/test_properties.py b/tests/ahriman/core/repository/test_repository_properties.py similarity index 75% rename from tests/ahriman/core/repository/test_properties.py rename to tests/ahriman/core/repository/test_repository_properties.py index 893f7122..3b951047 100644 --- a/tests/ahriman/core/repository/test_properties.py +++ b/tests/ahriman/core/repository/test_repository_properties.py @@ -3,7 +3,7 @@ from pytest_mock import MockerFixture from ahriman.core.configuration import Configuration from ahriman.core.database.sqlite import SQLite from ahriman.core.exceptions import UnsafeRun -from ahriman.core.repository.properties import Properties +from ahriman.core.repository.repository_properties import RepositoryProperties from ahriman.core.status.web_client import WebClient @@ -11,9 +11,9 @@ def test_create_tree_on_load(configuration: Configuration, database: SQLite, moc """ must create tree on load """ - mocker.patch("ahriman.core.repository.properties.check_user") + mocker.patch("ahriman.core.repository.repository_properties.check_user") tree_create_mock = mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create") - Properties("x86_64", configuration, database, True, False) + RepositoryProperties("x86_64", configuration, database, True, False) tree_create_mock.assert_called_once_with() @@ -22,9 +22,9 @@ def test_create_tree_on_load_unsafe(configuration: Configuration, database: SQLi """ must not create tree on load in case if user differs from the root owner """ - mocker.patch("ahriman.core.repository.properties.check_user", side_effect=UnsafeRun(0, 1)) + mocker.patch("ahriman.core.repository.repository_properties.check_user", side_effect=UnsafeRun(0, 1)) tree_create_mock = mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create") - Properties("x86_64", configuration, database, True, False) + RepositoryProperties("x86_64", configuration, database, True, False) tree_create_mock.assert_not_called() @@ -35,7 +35,7 @@ def test_create_dummy_report_client(configuration: Configuration, database: SQLi """ mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create") load_mock = mocker.patch("ahriman.core.status.client.Client.load") - properties = Properties("x86_64", configuration, database, True, False) + properties = RepositoryProperties("x86_64", configuration, database, True, False) load_mock.assert_not_called() assert not isinstance(properties.reporter, WebClient) @@ -47,6 +47,6 @@ def test_create_full_report_client(configuration: Configuration, database: SQLit """ mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create") load_mock = mocker.patch("ahriman.core.status.client.Client.load") - Properties("x86_64", configuration, database, False, False) + RepositoryProperties("x86_64", configuration, database, False, False) load_mock.assert_called_once_with(configuration)