mirror of
				https://github.com/arcan1s/ahriman.git
				synced 2025-11-04 07:43:42 +00:00 
			
		
		
		
	add search subparser (#15)
This commit is contained in:
		@ -1,4 +1,5 @@
 | 
			
		||||
import argparse
 | 
			
		||||
import aur
 | 
			
		||||
import pytest
 | 
			
		||||
 | 
			
		||||
from pytest_mock import MockerFixture
 | 
			
		||||
@ -7,6 +8,7 @@ from ahriman.application.ahriman import _parser
 | 
			
		||||
from ahriman.application.application import Application
 | 
			
		||||
from ahriman.application.lock import Lock
 | 
			
		||||
from ahriman.core.configuration import Configuration
 | 
			
		||||
from ahriman.models.package import Package
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.fixture
 | 
			
		||||
@ -20,6 +22,26 @@ def args() -> argparse.Namespace:
 | 
			
		||||
    return argparse.Namespace(lock=None, force=False, unsafe=False, no_report=True)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.fixture
 | 
			
		||||
def aur_package_ahriman(package_ahriman: Package) -> aur.Package:
 | 
			
		||||
    return aur.Package(
 | 
			
		||||
        num_votes=None,
 | 
			
		||||
        description=package_ahriman.packages[package_ahriman.base].description,
 | 
			
		||||
        url_path=package_ahriman.web_url,
 | 
			
		||||
        last_modified=None,
 | 
			
		||||
        name=package_ahriman.base,
 | 
			
		||||
        out_of_date=None,
 | 
			
		||||
        id=None,
 | 
			
		||||
        first_submitted=None,
 | 
			
		||||
        maintainer=None,
 | 
			
		||||
        version=package_ahriman.version,
 | 
			
		||||
        license=package_ahriman.packages[package_ahriman.base].licenses,
 | 
			
		||||
        url=None,
 | 
			
		||||
        package_base=package_ahriman.base,
 | 
			
		||||
        package_base_id=None,
 | 
			
		||||
        category_id=None)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.fixture
 | 
			
		||||
def lock(args: argparse.Namespace, configuration: Configuration) -> Lock:
 | 
			
		||||
    return Lock(args, "x86_64", configuration)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										50
									
								
								tests/ahriman/application/handlers/test_handler_search.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								tests/ahriman/application/handlers/test_handler_search.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,50 @@
 | 
			
		||||
import argparse
 | 
			
		||||
import aur
 | 
			
		||||
 | 
			
		||||
from pytest_mock import MockerFixture
 | 
			
		||||
 | 
			
		||||
from ahriman.application.handlers import Search
 | 
			
		||||
from ahriman.core.configuration import Configuration
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _default_args(args: argparse.Namespace) -> argparse.Namespace:
 | 
			
		||||
    args.search = ["ahriman"]
 | 
			
		||||
    return args
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_run(args: argparse.Namespace, configuration: Configuration, aur_package_ahriman: aur.Package,
 | 
			
		||||
             mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must run command
 | 
			
		||||
    """
 | 
			
		||||
    args = _default_args(args)
 | 
			
		||||
    mocker.patch("aur.search", return_value=[aur_package_ahriman])
 | 
			
		||||
    log_mock = mocker.patch("ahriman.application.handlers.search.Search.log_fn")
 | 
			
		||||
 | 
			
		||||
    Search.run(args, "x86_64", configuration)
 | 
			
		||||
    log_mock.assert_called_once()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_run_multiple_search(args: argparse.Namespace, configuration: Configuration, mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must run command with multiple search arguments
 | 
			
		||||
    """
 | 
			
		||||
    args = _default_args(args)
 | 
			
		||||
    args.search = ["ahriman", "is", "cool"]
 | 
			
		||||
    search_mock = mocker.patch("aur.search")
 | 
			
		||||
 | 
			
		||||
    Search.run(args, "x86_64", configuration)
 | 
			
		||||
    search_mock.assert_called_with(" ".join(args.search))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_log_fn(args: argparse.Namespace, configuration: Configuration, aur_package_ahriman: aur.Package,
 | 
			
		||||
                mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    log function must call print built-in
 | 
			
		||||
    """
 | 
			
		||||
    args = _default_args(args)
 | 
			
		||||
    mocker.patch("aur.search", return_value=[aur_package_ahriman])
 | 
			
		||||
    print_mock = mocker.patch("builtins.print")
 | 
			
		||||
 | 
			
		||||
    Search.run(args, "x86_64", configuration)
 | 
			
		||||
    print_mock.assert_called()  # we don't really care about call details tbh
 | 
			
		||||
@ -71,6 +71,16 @@ def test_subparsers_config(parser: argparse.ArgumentParser) -> None:
 | 
			
		||||
    assert args.unsafe
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_subparsers_search(parser: argparse.ArgumentParser) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    search command must imply lock, no_report and unsafe
 | 
			
		||||
    """
 | 
			
		||||
    args = parser.parse_args(["-a", "x86_64", "search", "ahriman"])
 | 
			
		||||
    assert args.lock is None
 | 
			
		||||
    assert args.no_report
 | 
			
		||||
    assert args.unsafe
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_subparsers_setup(parser: argparse.ArgumentParser) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    setup command must imply lock, no_report and unsafe
 | 
			
		||||
 | 
			
		||||
@ -113,6 +113,14 @@ def test_load_includes_no_option(configuration: Configuration) -> None:
 | 
			
		||||
    configuration.load_includes()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_load_includes_no_section(configuration: Configuration) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must not fail if no option set
 | 
			
		||||
    """
 | 
			
		||||
    configuration.remove_section("settings")
 | 
			
		||||
    configuration.load_includes()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_load_logging_fallback(configuration: Configuration, mocker: MockerFixture) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    must fallback to stderr without errors
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user