Compare commits

..

1 Commits

14 changed files with 44 additions and 53 deletions

View File

@ -130,11 +130,12 @@ class Patch(Handler):
variables(list[str] | None): extract patches only for specified PKGBUILD variables variables(list[str] | None): extract patches only for specified PKGBUILD variables
exit_code(bool): exit with error on empty search result exit_code(bool): exit with error on empty search result
""" """
patches = [ patches = []
patch if variables is not None:
for patch in application.reporter.package_patches_get(package_base, None) for variable in variables:
if variables is None or patch.key in variables patches.extend(application.reporter.package_patches_get(package_base, variable))
] else:
patches = application.reporter.package_patches_get(package_base, variables)
Patch.check_if_empty(exit_code, not patches) Patch.check_if_empty(exit_code, not patches)
PatchPrinter(package_base, patches)(verbose=True, separator=" = ") PatchPrinter(package_base, patches)(verbose=True, separator=" = ")
@ -153,4 +154,4 @@ class Patch(Handler):
for variable in variables: # iterate over single variable for variable in variables: # iterate over single variable
application.reporter.package_patches_remove(package_base, variable) application.reporter.package_patches_remove(package_base, variable)
else: else:
application.reporter.package_patches_remove(package_base, None) # just pass as is application.reporter.package_patches_remove(package_base, variables) # just pass as is

View File

@ -25,8 +25,8 @@ class PatchSchema(Schema):
request and response patch schema request and response patch schema
""" """
key = fields.String(metadata={ key = fields.String(required=True, metadata={
"description": "environment variable name. Required in case if it is not full diff", "description": "environment variable name",
}) })
value = fields.String(metadata={ value = fields.String(metadata={
"description": "environment variable value", "description": "environment variable value",

View File

@ -96,7 +96,7 @@ class PatchesView(StatusViewGuard, BaseView):
try: try:
data = await self.request.json() data = await self.request.json()
key = data.get("key") key = data["key"]
value = data["value"] value = data["value"]
except Exception as ex: except Exception as ex:
raise HTTPBadRequest(reason=str(ex)) raise HTTPBadRequest(reason=str(ex))

View File

@ -161,12 +161,12 @@ def test_patch_set_list(application: Application, mocker: MockerFixture) -> None
must list available patches for the command must list available patches for the command
""" """
get_mock = mocker.patch("ahriman.core.status.local_client.LocalClient.package_patches_get", get_mock = mocker.patch("ahriman.core.status.local_client.LocalClient.package_patches_get",
return_value=[PkgbuildPatch(None, "patch"), PkgbuildPatch("version", "value")]) return_value=[PkgbuildPatch(None, "patch")])
print_mock = mocker.patch("ahriman.core.formatters.Printer.print") print_mock = mocker.patch("ahriman.core.formatters.Printer.print")
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty") check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
Patch.patch_set_list(application, "ahriman", ["version"], False) Patch.patch_set_list(application, "ahriman", ["version"], False)
get_mock.assert_called_once_with("ahriman", None) get_mock.assert_called_once_with("ahriman", "version")
print_mock.assert_called_once_with(verbose=True, log_fn=pytest.helpers.anyvar(int), separator=" = ") print_mock.assert_called_once_with(verbose=True, log_fn=pytest.helpers.anyvar(int), separator=" = ")
check_mock.assert_called_once_with(False, False) check_mock.assert_called_once_with(False, False)

View File

@ -27,7 +27,7 @@ def test_path(args: argparse.Namespace, configuration: Configuration) -> None:
with pytest.raises(ValueError): with pytest.raises(ValueError):
args.lock = Path("/") args.lock = Path("/")
assert Lock(args, repository_id, configuration).path # special case Lock(args, repository_id, configuration).path # special case
def test_check_user(lock: Lock, mocker: MockerFixture) -> None: def test_check_user(lock: Lock, mocker: MockerFixture) -> None:
@ -205,7 +205,7 @@ def test_exit_with_exception(lock: Lock, mocker: MockerFixture) -> None:
mocker.patch("ahriman.application.lock.Lock.create") mocker.patch("ahriman.application.lock.Lock.create")
update_status_mock = mocker.patch("ahriman.core.status.Client.status_update") update_status_mock = mocker.patch("ahriman.core.status.Client.status_update")
with pytest.raises(ValueError): with pytest.raises(Exception):
with lock: with lock:
raise ValueError() raise Exception()
update_status_mock.assert_has_calls([MockCall(BuildStatusEnum.Building), MockCall(BuildStatusEnum.Failed)]) update_status_mock.assert_has_calls([MockCall(BuildStatusEnum.Building), MockCall(BuildStatusEnum.Failed)])

View File

@ -128,7 +128,7 @@ def test_database_copy_database_exist(pacman: Pacman, mocker: MockerFixture) ->
copy_mock.assert_not_called() copy_mock.assert_not_called()
def test_database_init(pacman: Pacman) -> None: def test_database_init(pacman: Pacman, configuration: Configuration) -> None:
""" """
must init database with settings must init database with settings
""" """
@ -184,15 +184,14 @@ def test_files(pacman: Pacman, package_ahriman: Package, mocker: MockerFixture,
pacman.handle = handle_mock pacman.handle = handle_mock
tarball = resource_path_root / "core" / "arcanisrepo.files.tar.gz" tarball = resource_path_root / "core" / "arcanisrepo.files.tar.gz"
with tarfile.open(tarball, "r:gz") as fd: mocker.patch("pathlib.Path.is_file", return_value=True)
mocker.patch("pathlib.Path.is_file", return_value=True) open_mock = mocker.patch("ahriman.core.alpm.pacman.tarfile.open", return_value=tarfile.open(tarball, "r:gz"))
open_mock = mocker.patch("ahriman.core.alpm.pacman.tarfile.open", return_value=fd)
files = pacman.files() files = pacman.files()
assert len(files) == 2 assert len(files) == 2
assert package_ahriman.base in files assert package_ahriman.base in files
assert "usr/bin/ahriman" in files[package_ahriman.base] assert "usr/bin/ahriman" in files[package_ahriman.base]
open_mock.assert_called_once_with(pytest.helpers.anyvar(int), "r:gz") open_mock.assert_called_once_with(pytest.helpers.anyvar(int), "r:gz")
def test_files_package(pacman: Pacman, package_ahriman: Package, mocker: MockerFixture, def test_files_package(pacman: Pacman, package_ahriman: Package, mocker: MockerFixture,
@ -206,13 +205,12 @@ def test_files_package(pacman: Pacman, package_ahriman: Package, mocker: MockerF
tarball = resource_path_root / "core" / "arcanisrepo.files.tar.gz" tarball = resource_path_root / "core" / "arcanisrepo.files.tar.gz"
with tarfile.open(tarball, "r:gz") as fd: mocker.patch("pathlib.Path.is_file", return_value=True)
mocker.patch("pathlib.Path.is_file", return_value=True) mocker.patch("ahriman.core.alpm.pacman.tarfile.open", return_value=tarfile.open(tarball, "r:gz"))
mocker.patch("ahriman.core.alpm.pacman.tarfile.open", return_value=fd)
files = pacman.files(package_ahriman.base) files = pacman.files(package_ahriman.base)
assert len(files) == 1 assert len(files) == 1
assert package_ahriman.base in files assert package_ahriman.base in files
def test_files_skip(pacman: Pacman, mocker: MockerFixture) -> None: def test_files_skip(pacman: Pacman, mocker: MockerFixture) -> None:

View File

@ -165,6 +165,7 @@ def test_package_update_remove_get(database: SQLite, package_ahriman: Package) -
""" """
must insert, remove and retrieve package must insert, remove and retrieve package
""" """
status = BuildStatus()
database.package_update(package_ahriman) database.package_update(package_ahriman)
database.package_remove(package_ahriman.base) database.package_remove(package_ahriman.base)
assert not database.packages_get() assert not database.packages_get()

View File

@ -68,9 +68,9 @@ def test_in_package_context_failed(database: SQLite, package_ahriman: Package, m
mocker.patch("ahriman.core.log.LazyLogging._package_logger_set") mocker.patch("ahriman.core.log.LazyLogging._package_logger_set")
reset_mock = mocker.patch("ahriman.core.log.LazyLogging._package_logger_reset") reset_mock = mocker.patch("ahriman.core.log.LazyLogging._package_logger_reset")
with pytest.raises(ValueError): with pytest.raises(Exception):
with database.in_package_context(package_ahriman.base, ""): with database.in_package_context(package_ahriman.base, ""):
raise ValueError() raise Exception()
reset_mock.assert_called_once_with() reset_mock.assert_called_once_with()
@ -81,3 +81,11 @@ def test_logger(database: SQLite) -> None:
""" """
assert database.logger assert database.logger
assert database.logger.name == "ahriman.core.database.sqlite.SQLite" assert database.logger.name == "ahriman.core.database.sqlite.SQLite"
def test_logger_attribute_error(database: SQLite) -> None:
"""
must raise AttributeError in case if no attribute found
"""
with pytest.raises(AttributeError):
database.loggerrrr

View File

@ -4,7 +4,7 @@ import pytest
from pytest_mock import MockerFixture from pytest_mock import MockerFixture
from ahriman.core.status.local_client import LocalClient from ahriman.core.status.local_client import LocalClient
from ahriman.models.build_status import BuildStatus, BuildStatusEnum from ahriman.models.build_status import BuildStatusEnum, BuildStatus
from ahriman.models.changes import Changes from ahriman.models.changes import Changes
from ahriman.models.dependencies import Dependencies from ahriman.models.dependencies import Dependencies
from ahriman.models.log_record_id import LogRecordId from ahriman.models.log_record_id import LogRecordId

View File

@ -2,6 +2,7 @@ import datetime
import logging import logging
import os import os
import pytest import pytest
import shlex
from pathlib import Path from pathlib import Path
from pytest_mock import MockerFixture from pytest_mock import MockerFixture

View File

@ -60,4 +60,4 @@ def test_lt_invalid() -> None:
must raise ValueError if other is not valid repository id must raise ValueError if other is not valid repository id
""" """
with pytest.raises(ValueError): with pytest.raises(ValueError):
assert RepositoryId("x86_64", "a") < 42 RepositoryId("x86_64", "a") < 42

View File

@ -64,24 +64,6 @@ async def test_post(client: TestClient, package_ahriman: Package) -> None:
assert patches == [payload] assert patches == [payload]
async def test_post_full_diff(client: TestClient, package_ahriman: Package) -> None:
"""
must create patch from full diff
"""
await client.post(f"/api/v1/packages/{package_ahriman.base}",
json={"status": BuildStatusEnum.Success.value, "package": package_ahriman.view()})
request_schema = pytest.helpers.schema_request(PatchesView.post)
payload = {"value": "v"}
assert not request_schema.validate(payload)
response = await client.post(f"/api/v1/packages/{package_ahriman.base}/patches", json=payload)
assert response.status == 204
response = await client.get(f"/api/v1/packages/{package_ahriman.base}/patches")
patches = await response.json()
assert patches == [payload]
async def test_post_exception(client: TestClient, package_ahriman: Package) -> None: async def test_post_exception(client: TestClient, package_ahriman: Package) -> None:
""" """
must raise exception on invalid payload must raise exception on invalid payload

View File

@ -30,7 +30,7 @@ async def test_get(client: TestClient, repository_id: RepositoryId) -> None:
""" """
response_schema = pytest.helpers.schema_response(InfoView.get) response_schema = pytest.helpers.schema_response(InfoView.get)
response = await client.get("/api/v1/info") response = await client.get(f"/api/v1/info")
assert response.ok assert response.ok
json = await response.json() json = await response.json()
assert not response_schema.validate(json) assert not response_schema.validate(json)

View File

@ -29,7 +29,7 @@ async def test_get(client: TestClient, repository_id: RepositoryId) -> None:
""" """
response_schema = pytest.helpers.schema_response(RepositoriesView.get) response_schema = pytest.helpers.schema_response(RepositoriesView.get)
response = await client.get("/api/v1/repositories") response = await client.get(f"/api/v1/repositories")
assert response.ok assert response.ok
json = await response.json() json = await response.json()
assert not response_schema.validate(json, many=True) assert not response_schema.validate(json, many=True)