mirror of
				https://github.com/arcan1s/ahriman.git
				synced 2025-11-04 07:43:42 +00:00 
			
		
		
		
	add ability to download package from external links (e.g. HTTP)
This commit is contained in:
		@ -3,10 +3,12 @@ import pytest
 | 
			
		||||
from pathlib import Path
 | 
			
		||||
from pytest_mock import MockerFixture
 | 
			
		||||
from unittest import mock
 | 
			
		||||
from unittest.mock import MagicMock
 | 
			
		||||
 | 
			
		||||
from ahriman.application.application import Application
 | 
			
		||||
from ahriman.core.tree import Leaf, Tree
 | 
			
		||||
from ahriman.models.package import Package
 | 
			
		||||
from ahriman.models.package_description import PackageDescription
 | 
			
		||||
from ahriman.models.package_source import PackageSource
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -116,7 +118,7 @@ def test_add_archive(application: Application, package_ahriman: Package, mocker:
 | 
			
		||||
    copy_mock.assert_called_once()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_add_remote(application: Application, package_ahriman: Package, mocker: MockerFixture) -> None:
 | 
			
		||||
def test_add_aur(application: Application, package_ahriman: Package, mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must add package from AUR
 | 
			
		||||
    """
 | 
			
		||||
@ -128,8 +130,7 @@ def test_add_remote(application: Application, package_ahriman: Package, mocker:
 | 
			
		||||
    load_mock.assert_called_once()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_add_remote_with_dependencies(application: Application, package_ahriman: Package,
 | 
			
		||||
                                      mocker: MockerFixture) -> None:
 | 
			
		||||
def test_add_aur_with_dependencies(application: Application, package_ahriman: Package, mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must add package from AUR with dependencies
 | 
			
		||||
    """
 | 
			
		||||
@ -188,6 +189,24 @@ def test_add_local_with_dependencies(application: Application, package_ahriman:
 | 
			
		||||
    dependencies_mock.assert_called_once()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_add_remote(application: Application, package_description_ahriman: PackageDescription,
 | 
			
		||||
                    mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must add package from remote source
 | 
			
		||||
    """
 | 
			
		||||
    mocker.patch("ahriman.application.application.Application._known_packages", return_value=set())
 | 
			
		||||
    response_mock = MagicMock()
 | 
			
		||||
    response_mock.iter_content.return_value = ["chunk"]
 | 
			
		||||
    open_mock = mocker.patch("pathlib.Path.open")
 | 
			
		||||
    request_mock = mocker.patch("requests.get", return_value=response_mock)
 | 
			
		||||
    url = f"https://host/{package_description_ahriman.filename}"
 | 
			
		||||
 | 
			
		||||
    application.add([url], PackageSource.Remote, False)
 | 
			
		||||
    open_mock.assert_called_once_with("wb")
 | 
			
		||||
    request_mock.assert_called_once_with(url, stream=True)
 | 
			
		||||
    response_mock.raise_for_status.assert_called_once()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_clean_build(application: Application, mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must clean build directory
 | 
			
		||||
 | 
			
		||||
@ -2,6 +2,7 @@ from pytest_mock import MockerFixture
 | 
			
		||||
from pathlib import Path
 | 
			
		||||
from typing import Callable
 | 
			
		||||
 | 
			
		||||
from ahriman.models.package_description import PackageDescription
 | 
			
		||||
from ahriman.models.package_source import PackageSource
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -24,13 +25,13 @@ def test_resolve_non_auto() -> None:
 | 
			
		||||
        assert source.resolve("") == source
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_resolve_archive(mocker: MockerFixture) -> None:
 | 
			
		||||
def test_resolve_archive(package_description_ahriman: PackageDescription, mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must resolve auto type into the archive
 | 
			
		||||
    """
 | 
			
		||||
    mocker.patch("pathlib.Path.is_dir", return_value=False)
 | 
			
		||||
    mocker.patch("pathlib.Path.is_file", autospec=True, side_effect=_is_file_mock(True, False))
 | 
			
		||||
    assert PackageSource.Auto.resolve("linux-5.14.2.arch1-2-x86_64.pkg.tar.zst") == PackageSource.Archive
 | 
			
		||||
    assert PackageSource.Auto.resolve(package_description_ahriman.filename) == PackageSource.Archive
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_resolve_aur(mocker: MockerFixture) -> None:
 | 
			
		||||
@ -56,14 +57,23 @@ def test_resolve_directory(mocker: MockerFixture) -> None:
 | 
			
		||||
    must resolve auto type into the directory
 | 
			
		||||
    """
 | 
			
		||||
    mocker.patch("pathlib.Path.is_dir", return_value=True)
 | 
			
		||||
    mocker.patch("pathlib.Path.is_file", return_value=False)
 | 
			
		||||
    mocker.patch("pathlib.Path.is_file", autospec=True, side_effect=_is_file_mock(False, False))
 | 
			
		||||
    assert PackageSource.Auto.resolve("path") == PackageSource.Directory
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_resolve_local(mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must resolve auto type into the directory
 | 
			
		||||
    must resolve auto type into the local sources
 | 
			
		||||
    """
 | 
			
		||||
    mocker.patch("pathlib.Path.is_dir", return_value=False)
 | 
			
		||||
    mocker.patch("pathlib.Path.is_file", autospec=True, side_effect=_is_file_mock(True, True))
 | 
			
		||||
    assert PackageSource.Auto.resolve("path") == PackageSource.Local
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_resolve_remote(package_description_ahriman: PackageDescription, mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must resolve auto type into the remote sources
 | 
			
		||||
    """
 | 
			
		||||
    mocker.patch("pathlib.Path.is_dir", return_value=False)
 | 
			
		||||
    mocker.patch("pathlib.Path.is_file", autospec=True, side_effect=_is_file_mock(False, False))
 | 
			
		||||
    assert PackageSource.Auto.resolve(f"https://host/{package_description_ahriman.filename}") == PackageSource.Remote
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user