mirror of
https://github.com/arcan1s/ahriman.git
synced 2025-04-26 16:27:17 +00:00
91 lines
3.0 KiB
Python
91 lines
3.0 KiB
Python
import datetime
|
|
import json
|
|
import pyalpm # typing: ignore
|
|
|
|
from dataclasses import asdict, fields
|
|
from pathlib import Path
|
|
from pytest_mock import MockerFixture
|
|
from typing import Any
|
|
|
|
from ahriman.models.aur_package import AURPackage
|
|
|
|
|
|
def _get_aur_data(resource_path_root: Path) -> dict[str, Any]:
|
|
"""
|
|
load package description from resource file
|
|
|
|
Args:
|
|
resource_path_root(Path): path to resource root
|
|
|
|
Returns:
|
|
dict[str, Any]: json descriptor
|
|
"""
|
|
response = (resource_path_root / "models" / "package_ahriman_aur").read_text()
|
|
return json.loads(response)["results"][0]
|
|
|
|
|
|
def _get_official_data(resource_path_root: Path) -> dict[str, Any]:
|
|
"""
|
|
load package description from resource file
|
|
|
|
Args:
|
|
resource_path_root(Path): path to resource root
|
|
|
|
Returns:
|
|
dict[str, Any]: json descriptor
|
|
"""
|
|
response = (resource_path_root / "models" / "package_akonadi_aur").read_text()
|
|
return json.loads(response)["results"][0]
|
|
|
|
|
|
def test_from_json(aur_package_ahriman: AURPackage, resource_path_root: Path) -> None:
|
|
"""
|
|
must load package from json
|
|
"""
|
|
model = _get_aur_data(resource_path_root)
|
|
assert AURPackage.from_json(model) == aur_package_ahriman
|
|
|
|
|
|
def test_from_json_2(aur_package_ahriman: AURPackage, mocker: MockerFixture) -> None:
|
|
"""
|
|
must load the same package from json
|
|
"""
|
|
mocker.patch("ahriman.models.aur_package.AURPackage.convert", side_effect=lambda v: v)
|
|
assert AURPackage.from_json(asdict(aur_package_ahriman)) == aur_package_ahriman
|
|
|
|
|
|
def test_from_pacman(pyalpm_package_ahriman: pyalpm.Package, aur_package_ahriman: AURPackage) -> None:
|
|
"""
|
|
must load package from repository database
|
|
"""
|
|
model = AURPackage.from_pacman(pyalpm_package_ahriman)
|
|
# some fields are missing so we are changing them
|
|
object.__setattr__(model, "id", aur_package_ahriman.id)
|
|
object.__setattr__(model, "package_base_id", aur_package_ahriman.package_base_id)
|
|
object.__setattr__(model, "first_submitted", aur_package_ahriman.first_submitted)
|
|
object.__setattr__(model, "url_path", aur_package_ahriman.url_path)
|
|
object.__setattr__(model, "maintainer", aur_package_ahriman.maintainer)
|
|
object.__setattr__(model, "submitter", aur_package_ahriman.submitter)
|
|
|
|
assert model == aur_package_ahriman
|
|
|
|
|
|
def test_from_repo(aur_package_akonadi: AURPackage, resource_path_root: Path) -> None:
|
|
"""
|
|
must load package from repository api json
|
|
"""
|
|
model = _get_official_data(resource_path_root)
|
|
assert AURPackage.from_repo(model) == aur_package_akonadi
|
|
|
|
|
|
def test_convert(resource_path_root: Path) -> None:
|
|
"""
|
|
must convert fields to snakecase and also apply converters
|
|
"""
|
|
model = _get_aur_data(resource_path_root)
|
|
converted = AURPackage.convert(model)
|
|
known_fields = [pair.name for pair in fields(AURPackage)]
|
|
assert all(field in known_fields for field in converted)
|
|
assert isinstance(converted.get("first_submitted"), datetime.datetime)
|
|
assert isinstance(converted.get("last_modified"), datetime.datetime)
|