mirror of
				https://github.com/arcan1s/ahriman.git
				synced 2025-11-04 07:43:42 +00:00 
			
		
		
		
	initial implementation of the local git clones (#48)
This commit is contained in:
		@ -205,10 +205,12 @@ def test_updates_all(application_repository: Repository, package_ahriman: Packag
 | 
			
		||||
    mocker.patch("ahriman.core.repository.repository.Repository.packages", return_value=[])
 | 
			
		||||
    updates_aur_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_aur",
 | 
			
		||||
                                    return_value=[package_ahriman])
 | 
			
		||||
    updates_local_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_local")
 | 
			
		||||
    updates_manual_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_manual")
 | 
			
		||||
 | 
			
		||||
    application_repository.updates([], no_aur=False, no_manual=False, no_vcs=False, log_fn=print)
 | 
			
		||||
    application_repository.updates([], no_aur=False, no_local=False, no_manual=False, no_vcs=False, log_fn=print)
 | 
			
		||||
    updates_aur_mock.assert_called_once_with([], False)
 | 
			
		||||
    updates_local_mock.assert_called_once()
 | 
			
		||||
    updates_manual_mock.assert_called_once()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -218,10 +220,12 @@ def test_updates_disabled(application_repository: Repository, mocker: MockerFixt
 | 
			
		||||
    """
 | 
			
		||||
    mocker.patch("ahriman.core.repository.repository.Repository.packages", return_value=[])
 | 
			
		||||
    updates_aur_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_aur")
 | 
			
		||||
    updates_local_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_local")
 | 
			
		||||
    updates_manual_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_manual")
 | 
			
		||||
 | 
			
		||||
    application_repository.updates([], no_aur=True, no_manual=True, no_vcs=False, log_fn=print)
 | 
			
		||||
    application_repository.updates([], no_aur=True, no_local=True, no_manual=True, no_vcs=False, log_fn=print)
 | 
			
		||||
    updates_aur_mock.assert_not_called()
 | 
			
		||||
    updates_local_mock.assert_not_called()
 | 
			
		||||
    updates_manual_mock.assert_not_called()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -231,10 +235,27 @@ def test_updates_no_aur(application_repository: Repository, mocker: MockerFixtur
 | 
			
		||||
    """
 | 
			
		||||
    mocker.patch("ahriman.core.repository.repository.Repository.packages", return_value=[])
 | 
			
		||||
    updates_aur_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_aur")
 | 
			
		||||
    updates_local_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_local")
 | 
			
		||||
    updates_manual_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_manual")
 | 
			
		||||
 | 
			
		||||
    application_repository.updates([], no_aur=True, no_manual=False, no_vcs=False, log_fn=print)
 | 
			
		||||
    application_repository.updates([], no_aur=True, no_local=False, no_manual=False, no_vcs=False, log_fn=print)
 | 
			
		||||
    updates_aur_mock.assert_not_called()
 | 
			
		||||
    updates_local_mock.assert_called_once()
 | 
			
		||||
    updates_manual_mock.assert_called_once()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_updates_no_local(application_repository: Repository, mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must get updates without local packages
 | 
			
		||||
    """
 | 
			
		||||
    mocker.patch("ahriman.core.repository.repository.Repository.packages", return_value=[])
 | 
			
		||||
    updates_aur_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_aur")
 | 
			
		||||
    updates_local_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_local")
 | 
			
		||||
    updates_manual_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_manual")
 | 
			
		||||
 | 
			
		||||
    application_repository.updates([], no_aur=False, no_local=True, no_manual=False, no_vcs=False, log_fn=print)
 | 
			
		||||
    updates_aur_mock.assert_called_once_with([], False)
 | 
			
		||||
    updates_local_mock.assert_not_called()
 | 
			
		||||
    updates_manual_mock.assert_called_once()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -244,10 +265,12 @@ def test_updates_no_manual(application_repository: Repository, mocker: MockerFix
 | 
			
		||||
    """
 | 
			
		||||
    mocker.patch("ahriman.core.repository.repository.Repository.packages", return_value=[])
 | 
			
		||||
    updates_aur_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_aur")
 | 
			
		||||
    updates_local_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_local")
 | 
			
		||||
    updates_manual_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_manual")
 | 
			
		||||
 | 
			
		||||
    application_repository.updates([], no_aur=False, no_manual=True, no_vcs=False, log_fn=print)
 | 
			
		||||
    application_repository.updates([], no_aur=False, no_local=False, no_manual=True, no_vcs=False, log_fn=print)
 | 
			
		||||
    updates_aur_mock.assert_called_once_with([], False)
 | 
			
		||||
    updates_local_mock.assert_called_once()
 | 
			
		||||
    updates_manual_mock.assert_not_called()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -257,21 +280,26 @@ def test_updates_no_vcs(application_repository: Repository, mocker: MockerFixtur
 | 
			
		||||
    """
 | 
			
		||||
    mocker.patch("ahriman.core.repository.repository.Repository.packages", return_value=[])
 | 
			
		||||
    updates_aur_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_aur")
 | 
			
		||||
    updates_local_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_local")
 | 
			
		||||
    updates_manual_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_manual")
 | 
			
		||||
 | 
			
		||||
    application_repository.updates([], no_aur=False, no_manual=False, no_vcs=True, log_fn=print)
 | 
			
		||||
    application_repository.updates([], no_aur=False, no_local=False, no_manual=False, no_vcs=True, log_fn=print)
 | 
			
		||||
    updates_aur_mock.assert_called_once_with([], True)
 | 
			
		||||
    updates_local_mock.assert_called_once()
 | 
			
		||||
    updates_manual_mock.assert_called_once()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_updates_with_filter(application_repository: Repository, mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must get updates without VCS
 | 
			
		||||
    must get updates with filter
 | 
			
		||||
    """
 | 
			
		||||
    mocker.patch("ahriman.core.repository.repository.Repository.packages", return_value=[])
 | 
			
		||||
    updates_aur_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_aur")
 | 
			
		||||
    updates_local_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_local")
 | 
			
		||||
    updates_manual_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.updates_manual")
 | 
			
		||||
 | 
			
		||||
    application_repository.updates(["filter"], no_aur=False, no_manual=False, no_vcs=False, log_fn=print)
 | 
			
		||||
    application_repository.updates(["filter"], no_aur=False, no_local=False, no_manual=False, no_vcs=False,
 | 
			
		||||
                                   log_fn=print)
 | 
			
		||||
    updates_aur_mock.assert_called_once_with(["filter"], False)
 | 
			
		||||
    updates_local_mock.assert_called_once()
 | 
			
		||||
    updates_manual_mock.assert_called_once()
 | 
			
		||||
 | 
			
		||||
@ -16,6 +16,7 @@ def _default_args(args: argparse.Namespace) -> argparse.Namespace:
 | 
			
		||||
    args.package = []
 | 
			
		||||
    args.dry_run = False
 | 
			
		||||
    args.no_aur = False
 | 
			
		||||
    args.no_local = False
 | 
			
		||||
    args.no_manual = False
 | 
			
		||||
    args.no_vcs = False
 | 
			
		||||
    return args
 | 
			
		||||
 | 
			
		||||
@ -86,6 +86,23 @@ def test_fetch_new(mocker: MockerFixture) -> None:
 | 
			
		||||
    ])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_fetch_new_without_remote(mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must fetch nothing in case if no remote set
 | 
			
		||||
    """
 | 
			
		||||
    mocker.patch("pathlib.Path.is_dir", return_value=False)
 | 
			
		||||
    check_output_mock = mocker.patch("ahriman.core.build_tools.sources.Sources._check_output")
 | 
			
		||||
 | 
			
		||||
    local = Path("local")
 | 
			
		||||
    Sources.fetch(local, None)
 | 
			
		||||
    check_output_mock.assert_has_calls([
 | 
			
		||||
        mock.call("git", "checkout", "--force", Sources._branch,
 | 
			
		||||
                  exception=None, cwd=local, logger=pytest.helpers.anyvar(int)),
 | 
			
		||||
        mock.call("git", "reset", "--hard", f"origin/{Sources._branch}",
 | 
			
		||||
                  exception=None, cwd=local, logger=pytest.helpers.anyvar(int))
 | 
			
		||||
    ])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_has_remotes(mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must ask for remotes
 | 
			
		||||
 | 
			
		||||
@ -81,6 +81,50 @@ def test_updates_aur_ignore_vcs(update_handler: UpdateHandler, package_ahriman:
 | 
			
		||||
    package_is_outdated_mock.assert_not_called()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_updates_local(update_handler: UpdateHandler, package_ahriman: Package, mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must check for updates for locally stored packages
 | 
			
		||||
    """
 | 
			
		||||
    mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.packages", return_value=[package_ahriman])
 | 
			
		||||
    mocker.patch("pathlib.Path.iterdir", return_value=[package_ahriman.base])
 | 
			
		||||
    mocker.patch("ahriman.models.package.Package.is_outdated", return_value=True)
 | 
			
		||||
    fetch_mock = mocker.patch("ahriman.core.build_tools.sources.Sources.fetch")
 | 
			
		||||
    package_load_mock = mocker.patch("ahriman.models.package.Package.load", return_value=package_ahriman)
 | 
			
		||||
    status_client_mock = mocker.patch("ahriman.core.status.client.Client.set_pending")
 | 
			
		||||
 | 
			
		||||
    assert update_handler.updates_local() == [package_ahriman]
 | 
			
		||||
    fetch_mock.assert_called_once_with(package_ahriman.base, remote=None)
 | 
			
		||||
    package_load_mock.assert_called_once()
 | 
			
		||||
    status_client_mock.assert_called_once()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_updates_local_unknown(update_handler: UpdateHandler, package_ahriman: Package, mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must return unknown package as out-dated
 | 
			
		||||
    """
 | 
			
		||||
    mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.packages", return_value=[])
 | 
			
		||||
    mocker.patch("pathlib.Path.iterdir", return_value=[package_ahriman.base])
 | 
			
		||||
    mocker.patch("ahriman.models.package.Package.is_outdated", return_value=True)
 | 
			
		||||
    mocker.patch("ahriman.core.build_tools.sources.Sources.fetch")
 | 
			
		||||
    mocker.patch("ahriman.models.package.Package.load", return_value=package_ahriman)
 | 
			
		||||
    status_client_mock = mocker.patch("ahriman.core.status.client.Client.set_unknown")
 | 
			
		||||
 | 
			
		||||
    assert update_handler.updates_local() == [package_ahriman]
 | 
			
		||||
    status_client_mock.assert_called_once()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_updates_local_with_failures(update_handler: UpdateHandler, package_ahriman: Package,
 | 
			
		||||
                                     mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must process local through the packages with failure
 | 
			
		||||
    """
 | 
			
		||||
    mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.packages")
 | 
			
		||||
    mocker.patch("pathlib.Path.iterdir", return_value=[package_ahriman.base])
 | 
			
		||||
    mocker.patch("ahriman.core.build_tools.sources.Sources.fetch", side_effect=Exception())
 | 
			
		||||
 | 
			
		||||
    assert not update_handler.updates_local()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_updates_manual_clear(update_handler: UpdateHandler, mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    requesting manual updates must clear packages directory
 | 
			
		||||
@ -125,7 +169,7 @@ def test_updates_manual_status_unknown(update_handler: UpdateHandler, package_ah
 | 
			
		||||
def test_updates_manual_with_failures(update_handler: UpdateHandler, package_ahriman: Package,
 | 
			
		||||
                                      mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must process through the packages with failure
 | 
			
		||||
    must process manual through the packages with failure
 | 
			
		||||
    """
 | 
			
		||||
    mocker.patch("pathlib.Path.iterdir", return_value=[package_ahriman.base])
 | 
			
		||||
    mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.packages", return_value=[])
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user