mirror of
https://github.com/arcan1s/ahriman.git
synced 2025-08-27 11:59:56 +00:00
Support type triggers (#96)
* implement mirrorlist package generator * implement keyring package generator * docs update * do not skip empty lines * fill remote source for local packages * faq update
This commit is contained in:
@ -5,25 +5,36 @@ from pytest_mock import MockerFixture
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
from ahriman.application.application.application_packages import ApplicationPackages
|
||||
from ahriman.core.exceptions import UnknownPackageError
|
||||
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_add_archive(
|
||||
application_packages: ApplicationPackages,
|
||||
package_ahriman: Package,
|
||||
mocker: MockerFixture) -> None:
|
||||
def test_add_archive(application_packages: ApplicationPackages, package_ahriman: Package,
|
||||
mocker: MockerFixture) -> None:
|
||||
"""
|
||||
must add package from archive
|
||||
"""
|
||||
is_file_mock = mocker.patch("pathlib.Path.is_file", return_value=True)
|
||||
copy_mock = mocker.patch("shutil.copy")
|
||||
|
||||
application_packages._add_archive(package_ahriman.base)
|
||||
is_file_mock.assert_called_once_with()
|
||||
copy_mock.assert_called_once_with(
|
||||
Path(package_ahriman.base), application_packages.repository.paths.packages / package_ahriman.base)
|
||||
|
||||
|
||||
def test_add_archive_missing(application_packages: ApplicationPackages, mocker: MockerFixture) -> None:
|
||||
"""
|
||||
must raise UnknownPackageError on unknown path
|
||||
"""
|
||||
mocker.patch("pathlib.Path.is_file", return_value=False)
|
||||
with pytest.raises(UnknownPackageError):
|
||||
application_packages._add_archive("package")
|
||||
|
||||
|
||||
def test_add_aur(application_packages: ApplicationPackages, package_ahriman: Package, mocker: MockerFixture) -> None:
|
||||
"""
|
||||
must add package from AUR
|
||||
@ -37,21 +48,29 @@ def test_add_aur(application_packages: ApplicationPackages, package_ahriman: Pac
|
||||
update_remote_mock.assert_called_once_with(package_ahriman)
|
||||
|
||||
|
||||
def test_add_directory(
|
||||
application_packages: ApplicationPackages,
|
||||
package_ahriman: Package,
|
||||
mocker: MockerFixture) -> None:
|
||||
def test_add_directory(application_packages: ApplicationPackages, package_ahriman: Package,
|
||||
mocker: MockerFixture) -> None:
|
||||
"""
|
||||
must add packages from directory
|
||||
"""
|
||||
iterdir_mock = mocker.patch("pathlib.Path.iterdir",
|
||||
return_value=[package.filepath for package in package_ahriman.packages.values()])
|
||||
copy_mock = mocker.patch("shutil.copy")
|
||||
is_dir_mock = mocker.patch("pathlib.Path.is_dir", return_value=True)
|
||||
filename = package_ahriman.packages[package_ahriman.base].filepath
|
||||
iterdir_mock = mocker.patch("pathlib.Path.iterdir", return_value=[filename])
|
||||
add_mock = mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._add_archive")
|
||||
|
||||
application_packages._add_directory(package_ahriman.base)
|
||||
is_dir_mock.assert_called_once_with()
|
||||
iterdir_mock.assert_called_once_with()
|
||||
copy_mock.assert_called_once_with(filename, application_packages.repository.paths.packages / filename.name)
|
||||
add_mock.assert_called_once_with(str(filename))
|
||||
|
||||
|
||||
def test_add_directory_missing(application_packages: ApplicationPackages, mocker: MockerFixture) -> None:
|
||||
"""
|
||||
must raise UnknownPackageError on unknown directory path
|
||||
"""
|
||||
mocker.patch("pathlib.Path.is_dir", return_value=False)
|
||||
with pytest.raises(UnknownPackageError):
|
||||
application_packages._add_directory("package")
|
||||
|
||||
|
||||
def test_add_local(application_packages: ApplicationPackages, package_ahriman: Package, mocker: MockerFixture) -> None:
|
||||
@ -59,17 +78,46 @@ def test_add_local(application_packages: ApplicationPackages, package_ahriman: P
|
||||
must add package from local sources
|
||||
"""
|
||||
mocker.patch("ahriman.models.package.Package.from_build", return_value=package_ahriman)
|
||||
is_dir_mock = mocker.patch("pathlib.Path.is_dir", return_value=True)
|
||||
init_mock = mocker.patch("ahriman.core.build_tools.sources.Sources.init")
|
||||
copytree_mock = mocker.patch("shutil.copytree")
|
||||
build_queue_mock = mocker.patch("ahriman.core.database.SQLite.build_queue_insert")
|
||||
|
||||
application_packages._add_local(package_ahriman.base)
|
||||
is_dir_mock.assert_called_once_with()
|
||||
copytree_mock.assert_called_once_with(
|
||||
Path(package_ahriman.base), application_packages.repository.paths.cache_for(package_ahriman.base))
|
||||
init_mock.assert_called_once_with(application_packages.repository.paths.cache_for(package_ahriman.base))
|
||||
build_queue_mock.assert_called_once_with(package_ahriman)
|
||||
|
||||
|
||||
def test_add_local_cache(application_packages: ApplicationPackages, package_ahriman: Package,
|
||||
mocker: MockerFixture) -> None:
|
||||
"""
|
||||
must add package from local source if there is cache
|
||||
"""
|
||||
mocker.patch("ahriman.models.package.Package.from_build", return_value=package_ahriman)
|
||||
mocker.patch("pathlib.Path.is_dir", autospec=True,
|
||||
side_effect=lambda p: True if p.is_relative_to(application_packages.repository.paths.cache) else False)
|
||||
init_mock = mocker.patch("ahriman.core.build_tools.sources.Sources.init")
|
||||
copytree_mock = mocker.patch("shutil.copytree")
|
||||
build_queue_mock = mocker.patch("ahriman.core.database.SQLite.build_queue_insert")
|
||||
|
||||
application_packages._add_local(package_ahriman.base)
|
||||
copytree_mock.assert_not_called()
|
||||
init_mock.assert_not_called()
|
||||
build_queue_mock.assert_called_once_with(package_ahriman)
|
||||
|
||||
|
||||
def test_add_local_missing(application_packages: ApplicationPackages, mocker: MockerFixture) -> None:
|
||||
"""
|
||||
must raise UnknownPackageError if package wasn't found
|
||||
"""
|
||||
mocker.patch("pathlib.Path.is_dir", return_value=False)
|
||||
with pytest.raises(UnknownPackageError):
|
||||
application_packages._add_local("package")
|
||||
|
||||
|
||||
def test_add_remote(application_packages: ApplicationPackages, package_description_ahriman: PackageDescription,
|
||||
mocker: MockerFixture) -> None:
|
||||
"""
|
||||
@ -87,6 +135,15 @@ def test_add_remote(application_packages: ApplicationPackages, package_descripti
|
||||
response_mock.raise_for_status.assert_called_once_with()
|
||||
|
||||
|
||||
def test_add_remote_missing(application_packages: ApplicationPackages, mocker: MockerFixture) -> None:
|
||||
"""
|
||||
must add package from remote source
|
||||
"""
|
||||
mocker.patch("requests.get", side_effect=Exception())
|
||||
with pytest.raises(UnknownPackageError):
|
||||
application_packages._add_remote("url")
|
||||
|
||||
|
||||
def test_add_repository(application_packages: ApplicationPackages, package_ahriman: Package,
|
||||
mocker: MockerFixture) -> None:
|
||||
"""
|
||||
@ -112,10 +169,8 @@ def test_add_add_archive(application_packages: ApplicationPackages, package_ahri
|
||||
add_mock.assert_called_once_with(package_ahriman.base)
|
||||
|
||||
|
||||
def test_add_add_aur(
|
||||
application_packages: ApplicationPackages,
|
||||
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
|
||||
"""
|
||||
|
@ -62,6 +62,10 @@ def test_schema(configuration: Configuration) -> None:
|
||||
assert schema.pop("email")
|
||||
assert schema.pop("github")
|
||||
assert schema.pop("html")
|
||||
assert schema.pop("keyring")
|
||||
assert schema.pop("keyring_generator")
|
||||
assert schema.pop("mirrorlist")
|
||||
assert schema.pop("mirrorlist_generator")
|
||||
assert schema.pop("report")
|
||||
assert schema.pop("rsync")
|
||||
assert schema.pop("s3")
|
||||
@ -76,6 +80,7 @@ def test_schema_invalid_trigger(configuration: Configuration) -> None:
|
||||
must skip trigger if it caused exception on load
|
||||
"""
|
||||
configuration.set_option("build", "triggers", "some.invalid.trigger.path.Trigger")
|
||||
configuration.remove_option("build", "triggers_known")
|
||||
assert Validate.schema("x86_64", configuration) == CONFIGURATION_SCHEMA
|
||||
|
||||
|
||||
|
@ -373,6 +373,42 @@ def test_subparsers_repo_check_option_refresh(parser: argparse.ArgumentParser) -
|
||||
assert args.refresh == 2
|
||||
|
||||
|
||||
def test_subparsers_repo_create_keyring(parser: argparse.ArgumentParser) -> None:
|
||||
"""
|
||||
repo-create-keyring command must imply trigger
|
||||
"""
|
||||
args = parser.parse_args(["repo-create-keyring"])
|
||||
assert args.trigger == ["ahriman.core.support.KeyringTrigger"]
|
||||
|
||||
|
||||
def test_subparsers_repo_create_keyring_architecture(parser: argparse.ArgumentParser) -> None:
|
||||
"""
|
||||
repo-create-keyring command must correctly parse architecture list
|
||||
"""
|
||||
args = parser.parse_args(["repo-create-keyring"])
|
||||
assert args.architecture is None
|
||||
args = parser.parse_args(["-a", "x86_64", "repo-create-keyring"])
|
||||
assert args.architecture == ["x86_64"]
|
||||
|
||||
|
||||
def test_subparsers_repo_create_mirrorlist(parser: argparse.ArgumentParser) -> None:
|
||||
"""
|
||||
repo-create-mirrorlist command must imply trigger
|
||||
"""
|
||||
args = parser.parse_args(["repo-create-mirrorlist"])
|
||||
assert args.trigger == ["ahriman.core.support.MirrorlistTrigger"]
|
||||
|
||||
|
||||
def test_subparsers_repo_create_mirrorlist_architecture(parser: argparse.ArgumentParser) -> None:
|
||||
"""
|
||||
repo-create-mirrorlist command must correctly parse architecture list
|
||||
"""
|
||||
args = parser.parse_args(["repo-create-mirrorlist"])
|
||||
assert args.architecture is None
|
||||
args = parser.parse_args(["-a", "x86_64", "repo-create-mirrorlist"])
|
||||
assert args.architecture == ["x86_64"]
|
||||
|
||||
|
||||
def test_subparsers_repo_daemon(parser: argparse.ArgumentParser) -> None:
|
||||
"""
|
||||
repo-daemon command must imply dry run, exit code and package
|
||||
|
Reference in New Issue
Block a user