mirror of
				https://github.com/arcan1s/ahriman.git
				synced 2025-11-04 07:43:42 +00:00 
			
		
		
		
	handle dependencies recursively
This commit is contained in:
		@ -14,6 +14,7 @@ def _default_args(args: argparse.Namespace) -> argparse.Namespace:
 | 
			
		||||
    :return: generated arguments for these test cases
 | 
			
		||||
    """
 | 
			
		||||
    args.depends_on = []
 | 
			
		||||
    args.dry_run = False
 | 
			
		||||
    return args
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -23,7 +24,7 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
 | 
			
		||||
    """
 | 
			
		||||
    args = _default_args(args)
 | 
			
		||||
    mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
 | 
			
		||||
    application_packages_mock = mocker.patch("ahriman.core.repository.repository.Repository.packages")
 | 
			
		||||
    application_packages_mock = mocker.patch("ahriman.core.repository.repository.Repository.packages_depends_on")
 | 
			
		||||
    application_mock = mocker.patch("ahriman.application.application.Application.update")
 | 
			
		||||
 | 
			
		||||
    Rebuild.run(args, "x86_64", configuration, True)
 | 
			
		||||
@ -31,34 +32,43 @@ def test_run(args: argparse.Namespace, configuration: Configuration, mocker: Moc
 | 
			
		||||
    application_mock.assert_called_once()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_run_filter(args: argparse.Namespace, configuration: Configuration,
 | 
			
		||||
                    package_ahriman: Package, package_python_schedule: Package,
 | 
			
		||||
                    mocker: MockerFixture) -> None:
 | 
			
		||||
def test_run_dry_run(args: argparse.Namespace, configuration: Configuration,
 | 
			
		||||
                     package_ahriman: Package, mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must run command with depends filter
 | 
			
		||||
    must run command without update itself
 | 
			
		||||
    """
 | 
			
		||||
    args = _default_args(args)
 | 
			
		||||
    args.depends_on = ["python-aur"]
 | 
			
		||||
    mocker.patch("ahriman.core.repository.repository.Repository.packages",
 | 
			
		||||
                 return_value=[package_ahriman, package_python_schedule])
 | 
			
		||||
    args.dry_run = True
 | 
			
		||||
    mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
 | 
			
		||||
    mocker.patch("ahriman.core.repository.repository.Repository.packages_depends_on", return_value=[package_ahriman])
 | 
			
		||||
    application_mock = mocker.patch("ahriman.application.application.Application.update")
 | 
			
		||||
 | 
			
		||||
    Rebuild.run(args, "x86_64", configuration, True)
 | 
			
		||||
    application_mock.assert_called_once_with([package_ahriman])
 | 
			
		||||
    application_mock.assert_not_called()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_run_without_filter(args: argparse.Namespace, configuration: Configuration,
 | 
			
		||||
                            package_ahriman: Package, package_python_schedule: Package,
 | 
			
		||||
                            mocker: MockerFixture) -> None:
 | 
			
		||||
def test_run_filter(args: argparse.Namespace, configuration: Configuration, mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must run command with depends on filter
 | 
			
		||||
    """
 | 
			
		||||
    args = _default_args(args)
 | 
			
		||||
    args.depends_on = ["python-aur"]
 | 
			
		||||
    mocker.patch("ahriman.application.application.Application.update")
 | 
			
		||||
    mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
 | 
			
		||||
    application_packages_mock = mocker.patch("ahriman.core.repository.repository.Repository.packages_depends_on")
 | 
			
		||||
 | 
			
		||||
    Rebuild.run(args, "x86_64", configuration, True)
 | 
			
		||||
    application_packages_mock.assert_called_once_with({"python-aur"})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_run_without_filter(args: argparse.Namespace, configuration: Configuration, mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must run command for all packages if no filter supplied
 | 
			
		||||
    """
 | 
			
		||||
    args = _default_args(args)
 | 
			
		||||
    mocker.patch("ahriman.core.repository.repository.Repository.packages",
 | 
			
		||||
                 return_value=[package_ahriman, package_python_schedule])
 | 
			
		||||
    mocker.patch("ahriman.application.application.Application.update")
 | 
			
		||||
    mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
 | 
			
		||||
    application_mock = mocker.patch("ahriman.application.application.Application.update")
 | 
			
		||||
    application_packages_mock = mocker.patch("ahriman.core.repository.repository.Repository.packages_depends_on")
 | 
			
		||||
 | 
			
		||||
    Rebuild.run(args, "x86_64", configuration, True)
 | 
			
		||||
    application_mock.assert_called_once_with([package_ahriman, package_python_schedule])
 | 
			
		||||
    application_packages_mock.assert_called_once_with(None)
 | 
			
		||||
 | 
			
		||||
@ -80,3 +80,23 @@ def test_packages_built(repository: Repository, mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    mocker.patch("pathlib.Path.iterdir", return_value=[Path("a.tar.xz"), Path("b.pkg.tar.xz")])
 | 
			
		||||
    assert repository.packages_built() == [Path("b.pkg.tar.xz")]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_packages_depends_on(repository: Repository, package_ahriman: Package, package_python_schedule: Package,
 | 
			
		||||
                             mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must filter packages by depends list
 | 
			
		||||
    """
 | 
			
		||||
    mocker.patch("ahriman.core.repository.repository.Repository.packages",
 | 
			
		||||
                 return_value=[package_ahriman, package_python_schedule])
 | 
			
		||||
    assert repository.packages_depends_on(["python-aur"]) == [package_ahriman]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_packages_depends_on_empty(repository: Repository, package_ahriman: Package, package_python_schedule: Package,
 | 
			
		||||
                                   mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must return all packages in case if no filter is provided
 | 
			
		||||
    """
 | 
			
		||||
    mocker.patch("ahriman.core.repository.repository.Repository.packages",
 | 
			
		||||
                 return_value=[package_ahriman, package_python_schedule])
 | 
			
		||||
    assert repository.packages_depends_on(None) == [package_ahriman, package_python_schedule]
 | 
			
		||||
 | 
			
		||||
@ -82,7 +82,9 @@ def pyalpm_package_ahriman(package_ahriman: Package) -> MagicMock:
 | 
			
		||||
    """
 | 
			
		||||
    mock = MagicMock()
 | 
			
		||||
    type(mock).base = PropertyMock(return_value=package_ahriman.base)
 | 
			
		||||
    type(mock).depends = PropertyMock(return_value=["python-aur"])
 | 
			
		||||
    type(mock).name = PropertyMock(return_value=package_ahriman.base)
 | 
			
		||||
    type(mock).provides = PropertyMock(return_value=["python-ahriman"])
 | 
			
		||||
    type(mock).version = PropertyMock(return_value=package_ahriman.version)
 | 
			
		||||
    return mock
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -294,6 +294,24 @@ def test_actual_version_vcs_failed(package_tpacpi_bat_git: Package, repository_p
 | 
			
		||||
    assert package_tpacpi_bat_git.actual_version(repository_paths) == package_tpacpi_bat_git.version
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_full_depends(package_ahriman: Package, package_python_schedule: Package, pyalpm_package_ahriman: MagicMock,
 | 
			
		||||
                      pyalpm_handle: MagicMock, mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must extract all dependencies from the package
 | 
			
		||||
    """
 | 
			
		||||
    package_python_schedule.packages[package_python_schedule.base].provides = ["python3-schedule"]
 | 
			
		||||
 | 
			
		||||
    database_mock = MagicMock()
 | 
			
		||||
    database_mock.pkgcache = [pyalpm_package_ahriman]
 | 
			
		||||
    pyalpm_handle.handle.get_syncdbs.return_value = [database_mock]
 | 
			
		||||
 | 
			
		||||
    assert package_ahriman.full_depends(pyalpm_handle, [package_python_schedule]) == package_ahriman.depends
 | 
			
		||||
 | 
			
		||||
    package_python_schedule.packages[package_python_schedule.base].depends = [package_ahriman.base]
 | 
			
		||||
    expected = sorted(set(package_python_schedule.depends + ["python-aur"]))
 | 
			
		||||
    assert package_python_schedule.full_depends(pyalpm_handle, [package_python_schedule]) == expected
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_is_outdated_false(package_ahriman: Package, repository_paths: RepositoryPaths) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must be not outdated for the same package
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user