Compare commits

..

2 Commits

18 changed files with 88 additions and 188 deletions

View File

@ -30,7 +30,7 @@ class DependenciesOperations(Operations):
""" """
def dependencies_get(self, package_base: str | None = None, def dependencies_get(self, package_base: str | None = None,
repository_id: RepositoryId | None = None) -> dict[str, Dependencies]: repository_id: RepositoryId | None = None) -> list[Dependencies]:
""" """
get dependencies for the specific package base if available get dependencies for the specific package base if available
@ -43,9 +43,9 @@ class DependenciesOperations(Operations):
""" """
repository_id = repository_id or self._repository_id repository_id = repository_id or self._repository_id
def run(connection: Connection) -> dict[str, Dependencies]: def run(connection: Connection) -> list[Dependencies]:
return { return [
row["package_base"]: Dependencies(row["dependencies"]) Dependencies(row["package_base"], row["dependencies"])
for row in connection.execute( for row in connection.execute(
""" """
select package_base, dependencies from package_dependencies select package_base, dependencies from package_dependencies
@ -57,17 +57,15 @@ class DependenciesOperations(Operations):
"repository": repository_id.id, "repository": repository_id.id,
} }
) )
} ]
return self.with_connection(run) return self.with_connection(run)
def dependencies_insert(self, package_base: str, dependencies: Dependencies, def dependencies_insert(self, dependencies: Dependencies, repository_id: RepositoryId | None = None) -> None:
repository_id: RepositoryId | None = None) -> None:
""" """
insert package dependencies insert package dependencies
Args: Args:
package_base(str): package base
dependencies(Dependencies): package dependencies dependencies(Dependencies): package dependencies
repository_id(RepositoryId, optional): repository unique identifier override (Default value = None) repository_id(RepositoryId, optional): repository unique identifier override (Default value = None)
""" """
@ -84,9 +82,12 @@ class DependenciesOperations(Operations):
dependencies = :dependencies dependencies = :dependencies
""", """,
{ {
"package_base": package_base, "package_base": dependencies.package_base,
"repository": repository_id.id, "repository": repository_id.id,
"dependencies": dependencies.paths, "dependencies": {
str(path): packages
for path, packages in dependencies.paths.items()
}
}) })
return self.with_connection(run, commit=True) return self.with_connection(run, commit=True)

View File

@ -81,7 +81,7 @@ class Executor(PackageInfo, Cleaner):
self.reporter.package_changes_set(single.base, Changes(last_commit_sha)) self.reporter.package_changes_set(single.base, Changes(last_commit_sha))
# update dependencies list # update dependencies list
dependencies = PackageArchive(self.paths.build_directory, single).depends_on() dependencies = PackageArchive(self.paths.build_directory, single).depends_on()
self.reporter.package_dependencies_set(single.base, dependencies) self.reporter.package_dependencies_set(dependencies)
# update result set # update result set
result.add_updated(single) result.add_updated(single)
except Exception: except Exception:

View File

@ -100,8 +100,8 @@ class UpdateHandler(PackageInfo, Cleaner):
result: list[Package] = [] result: list[Package] = []
for package in self.packages(filter_packages): for package in self.packages(filter_packages):
dependencies = self.reporter.package_dependencies_get(package.base) dependencies = next(iter(self.reporter.package_dependencies_get(package.base)), None)
if not dependencies.paths: if dependencies is None:
continue # skip check if no package dependencies found continue # skip check if no package dependencies found
required_packages = {dep for dep_packages in dependencies.paths.values() for dep in dep_packages} required_packages = {dep for dep_packages in dependencies.paths.values() for dep in dep_packages}

View File

@ -120,7 +120,7 @@ class Client:
""" """
raise NotImplementedError raise NotImplementedError
def package_dependencies_get(self, package_base: str) -> Dependencies: def package_dependencies_get(self, package_base: str) -> list[Dependencies]:
""" """
get package dependencies get package dependencies
@ -135,12 +135,11 @@ class Client:
""" """
raise NotImplementedError raise NotImplementedError
def package_dependencies_set(self, package_base: str, dependencies: Dependencies) -> None: def package_dependencies_set(self, dependencies: Dependencies) -> None:
""" """
update package dependencies update package dependencies
Args: Args:
package_base(str): package base to update
dependencies(Dependencies): dependencies descriptor dependencies(Dependencies): dependencies descriptor
Raises: Raises:

View File

@ -81,7 +81,7 @@ class LocalClient(Client):
""" """
self.database.changes_insert(package_base, changes, self.repository_id) self.database.changes_insert(package_base, changes, self.repository_id)
def package_dependencies_get(self, package_base: str) -> Dependencies: def package_dependencies_get(self, package_base: str) -> list[Dependencies]:
""" """
get package dependencies get package dependencies
@ -91,17 +91,16 @@ class LocalClient(Client):
Returns: Returns:
list[Dependencies]: package implicit dependencies if available list[Dependencies]: package implicit dependencies if available
""" """
return self.database.dependencies_get(package_base, self.repository_id).get(package_base, Dependencies()) return self.database.dependencies_get(package_base, self.repository_id)
def package_dependencies_set(self, package_base: str, dependencies: Dependencies) -> None: def package_dependencies_set(self, dependencies: Dependencies) -> None:
""" """
update package dependencies update package dependencies
Args: Args:
package_base(str): package base to update
dependencies(Dependencies): dependencies descriptor dependencies(Dependencies): dependencies descriptor
""" """
self.database.dependencies_insert(package_base, dependencies, self.repository_id) self.database.dependencies_insert(dependencies, self.repository_id)
def package_get(self, package_base: str | None) -> list[tuple[Package, BuildStatus]]: def package_get(self, package_base: str | None) -> list[tuple[Package, BuildStatus]]:
""" """

View File

@ -123,7 +123,10 @@ class Watcher(LazyLogging):
Dependencies: package dependencies if available Dependencies: package dependencies if available
""" """
_ = self.package_get(package_base) _ = self.package_get(package_base)
return self.client.package_dependencies_get(package_base) try:
return next(iter(self.client.package_dependencies_get(package_base)))
except StopIteration:
return Dependencies(package_base)
def package_dependencies_set(self, package_base: str, dependencies: Dependencies) -> None: def package_dependencies_set(self, package_base: str, dependencies: Dependencies) -> None:
""" """
@ -134,7 +137,7 @@ class Watcher(LazyLogging):
dependencies(Dependencies): package dependencies dependencies(Dependencies): package dependencies
""" """
_ = self.package_get(package_base) _ = self.package_get(package_base)
self.client.package_dependencies_set(package_base, dependencies) self.client.package_dependencies_set(dependencies)
def package_get(self, package_base: str) -> tuple[Package, BuildStatus]: def package_get(self, package_base: str) -> tuple[Package, BuildStatus]:
""" """

View File

@ -204,7 +204,7 @@ class WebClient(Client, SyncAhrimanClient):
self.make_request("POST", self._changes_url(package_base), self.make_request("POST", self._changes_url(package_base),
params=self.repository_id.query(), json=changes.view()) params=self.repository_id.query(), json=changes.view())
def package_dependencies_get(self, package_base: str) -> Dependencies: def package_dependencies_get(self, package_base: str) -> list[Dependencies]:
""" """
get package dependencies get package dependencies
@ -219,20 +219,20 @@ class WebClient(Client, SyncAhrimanClient):
params=self.repository_id.query()) params=self.repository_id.query())
response_json = response.json() response_json = response.json()
return Dependencies.from_json(response_json) dependencies = response_json if package_base is None else [response_json]
return [Dependencies.from_json(dependencies) for dependencies in dependencies]
return Dependencies() return []
def package_dependencies_set(self, package_base: str, dependencies: Dependencies) -> None: def package_dependencies_set(self, dependencies: Dependencies) -> None:
""" """
update package dependencies update package dependencies
Args: Args:
package_base(str): package base to update
dependencies(Dependencies): dependencies descriptor dependencies(Dependencies): dependencies descriptor
""" """
with contextlib.suppress(Exception): with contextlib.suppress(Exception):
self.make_request("POST", self._dependencies_url(package_base), self.make_request("POST", self._dependencies_url(dependencies.package_base),
params=self.repository_id.query(), json=dependencies.view()) params=self.repository_id.query(), json=dependencies.view())
def package_get(self, package_base: str | None) -> list[tuple[Package, BuildStatus]]: def package_get(self, package_base: str | None) -> list[tuple[Package, BuildStatus]]:

View File

@ -29,9 +29,11 @@ class Dependencies:
package paths dependencies package paths dependencies
Attributes: Attributes:
package_base(str): package base
paths(dict[str, list[str]]): map of the paths used by this package to set of packages in which they were found paths(dict[str, list[str]]): map of the paths used by this package to set of packages in which they were found
""" """
package_base: str
paths: dict[str, list[str]] = field(default_factory=dict) paths: dict[str, list[str]] = field(default_factory=dict)
@classmethod @classmethod

View File

@ -110,7 +110,7 @@ class PackageArchive:
for path in required_by: for path in required_by:
result.setdefault(str(path), []).append(package) result.setdefault(str(path), []).append(package)
return Dependencies(result) return Dependencies(self.package.base, result)
def depends_on_paths(self) -> tuple[set[str], set[Path]]: def depends_on_paths(self) -> tuple[set[str], set[Path]]:
""" """

View File

@ -25,6 +25,10 @@ class DependenciesSchema(Schema):
request/response package dependencies schema request/response package dependencies schema
""" """
package_base = fields.String(metadata={
"description": "Package base name",
"example": "ahriman",
})
paths = fields.Dict( paths = fields.Dict(
keys=fields.String(), values=fields.List(fields.String()), required=True, metadata={ keys=fields.String(), values=fields.List(fields.String()), required=True, metadata={
"description": "Map of filesystem paths to packages which contain this path", "description": "Map of filesystem paths to packages which contain this path",

View File

@ -8,19 +8,16 @@ def test_dependencies_insert_get(database: SQLite, package_ahriman: Package) ->
""" """
must insert and get dependencies must insert and get dependencies
""" """
dependencies = Dependencies({"usr/lib/python3.11/site-packages": ["python"]}) dependencies = Dependencies(package_ahriman.base, {"usr/lib/python3.11/site-packages": ["python"]})
database.dependencies_insert(package_ahriman.base, dependencies) database.dependencies_insert(dependencies)
assert database.dependencies_get(package_ahriman.base) == {package_ahriman.base: dependencies} assert database.dependencies_get(package_ahriman.base) == [dependencies]
dependencies2 = Dependencies({"usr/lib/python3.11/site-packages": ["python3"]}) dependencies2 = Dependencies(package_ahriman.base, {"usr/lib/python3.11/site-packages": ["python3"]})
database.dependencies_insert( database.dependencies_insert(dependencies2, RepositoryId("i686", database._repository_id.name))
package_ahriman.base, dependencies2, RepositoryId( assert database.dependencies_get() == [dependencies]
"i686", database._repository_id.name)) assert database.dependencies_get(package_ahriman.base) == [dependencies]
assert database.dependencies_get() == {package_ahriman.base: dependencies} assert database.dependencies_get(
assert database.dependencies_get(package_ahriman.base) == {package_ahriman.base: dependencies} package_ahriman.base, RepositoryId("i686", database._repository_id.name)) == [dependencies2]
assert database.dependencies_get(package_ahriman.base, RepositoryId("i686", database._repository_id.name)) == {
package_ahriman.base: dependencies2
}
def test_dependencies_insert_remove(database: SQLite, package_ahriman: Package, def test_dependencies_insert_remove(database: SQLite, package_ahriman: Package,
@ -28,28 +25,23 @@ def test_dependencies_insert_remove(database: SQLite, package_ahriman: Package,
""" """
must remove dependencies for the package must remove dependencies for the package
""" """
dependencies1 = Dependencies({"usr": ["python"]}) dependencies1 = Dependencies(package_ahriman.base, {"usr": ["python"]})
database.dependencies_insert(package_ahriman.base, dependencies1) database.dependencies_insert(dependencies1)
dependencies2 = Dependencies({"usr": ["filesystem"]}) dependencies2 = Dependencies(package_python_schedule.base, {"usr": ["filesystem"]})
database.dependencies_insert(package_python_schedule.base, dependencies2) database.dependencies_insert(dependencies2)
dependencies3 = Dependencies({"usr": ["python3"]}) dependencies3 = Dependencies(package_ahriman.base, {"usr": ["python3"]})
database.dependencies_insert( database.dependencies_insert(dependencies3, RepositoryId("i686", database._repository_id.name))
package_ahriman.base, dependencies3, RepositoryId(
"i686", database._repository_id.name))
assert database.dependencies_get() == { assert database.dependencies_get() == [dependencies1, dependencies2]
package_ahriman.base: dependencies1,
package_python_schedule.base: dependencies2,
}
database.dependencies_remove(package_ahriman.base) database.dependencies_remove(package_ahriman.base)
assert database.dependencies_get(package_ahriman.base) == {} assert database.dependencies_get(package_ahriman.base) == []
assert database.dependencies_get(package_python_schedule.base) == {package_python_schedule.base: dependencies2} assert database.dependencies_get(package_python_schedule.base) == [dependencies2]
# insert null # insert null
database.dependencies_remove(package_ahriman.base, RepositoryId("i686", database._repository_id.name)) database.dependencies_remove(package_ahriman.base, RepositoryId("i686", database._repository_id.name))
assert database.dependencies_get(package_ahriman.base, RepositoryId("i686", database._repository_id.name)) == {} assert database.dependencies_get(package_ahriman.base, RepositoryId("i686", database._repository_id.name)) == []
assert database.dependencies_get(package_python_schedule.base) == {package_python_schedule.base: dependencies2} assert database.dependencies_get(package_python_schedule.base) == [dependencies2]
def test_dependencies_insert_remove_full(database: SQLite, package_ahriman: Package, def test_dependencies_insert_remove_full(database: SQLite, package_ahriman: Package,
@ -57,11 +49,11 @@ def test_dependencies_insert_remove_full(database: SQLite, package_ahriman: Pack
""" """
must remove all dependencies for the repository must remove all dependencies for the repository
""" """
database.dependencies_insert(package_ahriman.base, Dependencies({"usr": ["python"]})) database.dependencies_insert(Dependencies(package_ahriman.base, {"usr": ["python"]}))
database.dependencies_insert(package_python_schedule.base, Dependencies({"usr": ["filesystem"]})) database.dependencies_insert(Dependencies(package_python_schedule.base, {"usr": ["filesystem"]}))
database.dependencies_insert(package_ahriman.base, Dependencies({"usr": ["python3"]}), database.dependencies_insert(Dependencies(package_ahriman.base, {"usr": ["python3"]}),
RepositoryId("i686", database._repository_id.name)) RepositoryId("i686", database._repository_id.name))
database.dependencies_remove(None) database.dependencies_remove(None)
assert database.dependencies_get() == {} assert database.dependencies_get() == []
assert database.dependencies_get(package_ahriman.base, RepositoryId("i686", database._repository_id.name)) assert database.dependencies_get(package_ahriman.base, RepositoryId("i686", database._repository_id.name))

View File

@ -17,6 +17,7 @@ def test_process_build(executor: Executor, package_ahriman: Package, passwd: Any
""" """
must run build process must run build process
""" """
dependencies = Dependencies(package_ahriman.base)
mocker.patch("ahriman.models.repository_paths.getpwuid", return_value=passwd) mocker.patch("ahriman.models.repository_paths.getpwuid", return_value=passwd)
mocker.patch("ahriman.core.repository.executor.Executor.packages", return_value=[package_ahriman]) mocker.patch("ahriman.core.repository.executor.Executor.packages", return_value=[package_ahriman])
mocker.patch("ahriman.core.build_tools.task.Task.build", return_value=[Path(package_ahriman.base)]) mocker.patch("ahriman.core.build_tools.task.Task.build", return_value=[Path(package_ahriman.base)])
@ -25,13 +26,13 @@ def test_process_build(executor: Executor, package_ahriman: Package, passwd: Any
status_client_mock = mocker.patch("ahriman.core.status.client.Client.set_building") status_client_mock = mocker.patch("ahriman.core.status.client.Client.set_building")
commit_sha_mock = mocker.patch("ahriman.core.status.local_client.LocalClient.package_changes_set") commit_sha_mock = mocker.patch("ahriman.core.status.local_client.LocalClient.package_changes_set")
depends_on_mock = mocker.patch("ahriman.models.package_archive.PackageArchive.depends_on", depends_on_mock = mocker.patch("ahriman.models.package_archive.PackageArchive.depends_on",
return_value=Dependencies()) return_value=dependencies)
dependencies_mock = mocker.patch("ahriman.core.status.local_client.LocalClient.package_dependencies_set") dependencies_mock = mocker.patch("ahriman.core.status.local_client.LocalClient.package_dependencies_set")
executor.process_build([package_ahriman], Packagers("packager"), bump_pkgrel=False) executor.process_build([package_ahriman], Packagers("packager"), bump_pkgrel=False)
init_mock.assert_called_once_with(pytest.helpers.anyvar(int), pytest.helpers.anyvar(int), None) init_mock.assert_called_once_with(pytest.helpers.anyvar(int), pytest.helpers.anyvar(int), None)
depends_on_mock.assert_called_once_with() depends_on_mock.assert_called_once_with()
dependencies_mock.assert_called_once_with(package_ahriman.base, Dependencies()) dependencies_mock.assert_called_once_with(dependencies)
# must move files (once) # must move files (once)
move_mock.assert_called_once_with(Path(package_ahriman.base), executor.paths.packages / package_ahriman.base) move_mock.assert_called_once_with(Path(package_ahriman.base), executor.paths.packages / package_ahriman.base)
# must update status # must update status

View File

@ -154,8 +154,12 @@ def test_updates_dependencies(update_handler: UpdateHandler, package_ahriman: Pa
packages_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.packages", packages_mock = mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.packages",
return_value=[package_ahriman, package_python_schedule]) return_value=[package_ahriman, package_python_schedule])
dependencies = { dependencies = {
package_ahriman.base: Dependencies({"usr/lib/python3.11/site-packages": ["python"]}), package_ahriman.base: [
package_python_schedule.base: Dependencies({"usr/lib/python3.12/site-packages": ["python"]}), Dependencies(package_ahriman.base, {"usr/lib/python3.11/site-packages": ["python"]})
],
package_python_schedule.base: [
Dependencies(package_python_schedule.base, {"usr/lib/python3.12/site-packages": ["python"]})
],
} }
mocker.patch("ahriman.core.status.local_client.LocalClient.package_dependencies_get", mocker.patch("ahriman.core.status.local_client.LocalClient.package_dependencies_get",
side_effect=lambda base: dependencies[base]) side_effect=lambda base: dependencies[base])
@ -172,8 +176,7 @@ def test_updates_dependencies_skip_unknown(update_handler: UpdateHandler, packag
must skip unknown package dependencies must skip unknown package dependencies
""" """
mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.packages", return_value=[package_ahriman]) mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.packages", return_value=[package_ahriman])
mocker.patch("ahriman.core.status.local_client.LocalClient.package_dependencies_get", mocker.patch("ahriman.core.database.SQLite.dependencies_get", return_value=[])
return_value=Dependencies())
mocker.patch("ahriman.core.alpm.pacman.Pacman.files", mocker.patch("ahriman.core.alpm.pacman.Pacman.files",
return_value={"python": {Path("usr/lib/python3.12/site-packages")}}) return_value={"python": {Path("usr/lib/python3.12/site-packages")}})
@ -186,8 +189,10 @@ def test_updates_dependencies_partial(update_handler: UpdateHandler, package_ahr
must skip broken dependencies update if at least one package provides file must skip broken dependencies update if at least one package provides file
""" """
mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.packages", return_value=[package_ahriman]) mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.packages", return_value=[package_ahriman])
dependencies = Dependencies({"usr": ["filesystem", "python"]}) dependencies = [
mocker.patch("ahriman.core.status.local_client.LocalClient.package_dependencies_get", return_value=dependencies) Dependencies(package_ahriman.base, {"usr": ["filesystem", "python"]}),
]
mocker.patch("ahriman.core.database.SQLite.dependencies_get", return_value=dependencies)
mocker.patch("ahriman.core.alpm.pacman.Pacman.files", return_value={ mocker.patch("ahriman.core.alpm.pacman.Pacman.files", return_value={
"filesystem": {Path("usr")}, "filesystem": {Path("usr")},
"python": {Path("usr")}, "python": {Path("usr")},

View File

@ -131,7 +131,7 @@ def test_package_dependencies_set(client: Client, package_ahriman: Package) -> N
must raise not implemented on dependencies update must raise not implemented on dependencies update
""" """
with pytest.raises(NotImplementedError): with pytest.raises(NotImplementedError):
client.package_dependencies_set(package_ahriman.base, Dependencies()) client.package_dependencies_set(Dependencies(package_ahriman.base))
def test_package_get(client: Client, package_ahriman: Package) -> None: def test_package_get(client: Client, package_ahriman: Package) -> None:

View File

@ -58,8 +58,10 @@ def test_package_dependencies_set(local_client: LocalClient, package_ahriman: Pa
must update package dependencies must update package dependencies
""" """
dependencies_mock = mocker.patch("ahriman.core.database.SQLite.dependencies_insert") dependencies_mock = mocker.patch("ahriman.core.database.SQLite.dependencies_insert")
local_client.package_dependencies_set(package_ahriman.base, Dependencies()) dependencies = Dependencies(package_ahriman.base)
dependencies_mock.assert_called_once_with(package_ahriman.base, Dependencies(), local_client.repository_id)
local_client.package_dependencies_set(dependencies)
dependencies_mock.assert_called_once_with(dependencies, local_client.repository_id)
def test_package_get(local_client: LocalClient, package_ahriman: Package, mocker: MockerFixture) -> None: def test_package_get(local_client: LocalClient, package_ahriman: Package, mocker: MockerFixture) -> None:

View File

@ -7,31 +7,20 @@ from ahriman.core.exceptions import UnknownPackageError
from ahriman.core.status.watcher import Watcher from ahriman.core.status.watcher import Watcher
from ahriman.models.build_status import BuildStatus, BuildStatusEnum from ahriman.models.build_status import BuildStatus, BuildStatusEnum
from ahriman.models.changes import Changes from ahriman.models.changes import Changes
from ahriman.models.dependencies import Dependencies
from ahriman.models.log_record_id import LogRecordId from ahriman.models.log_record_id import LogRecordId
from ahriman.models.package import Package from ahriman.models.package import Package
from ahriman.models.pkgbuild_patch import PkgbuildPatch from ahriman.models.pkgbuild_patch import PkgbuildPatch
def test_packages(watcher: Watcher, package_ahriman: Package) -> None:
"""
must return list of available packages
"""
assert not watcher.packages
watcher._known = {package_ahriman.base: (package_ahriman, BuildStatus())}
assert watcher.packages
def test_load(watcher: Watcher, package_ahriman: Package, mocker: MockerFixture) -> None: def test_load(watcher: Watcher, package_ahriman: Package, mocker: MockerFixture) -> None:
""" """
must correctly load packages must correctly load packages
""" """
cache_mock = mocker.patch("ahriman.core.status.local_client.LocalClient.package_get", cache_mock = mocker.patch("ahriman.core.database.SQLite.packages_get",
return_value=[(package_ahriman, BuildStatus())]) return_value=[(package_ahriman, BuildStatus())])
watcher.load() watcher.load()
cache_mock.assert_called_once_with(None) cache_mock.assert_called_once_with(watcher.repository_id)
package, status = watcher._known[package_ahriman.base] package, status = watcher._known[package_ahriman.base]
assert package == package_ahriman assert package == package_ahriman
assert status.status == BuildStatusEnum.Unknown assert status.status == BuildStatusEnum.Unknown
@ -42,7 +31,7 @@ def test_load_known(watcher: Watcher, package_ahriman: Package, mocker: MockerFi
must correctly load packages with known statuses must correctly load packages with known statuses
""" """
status = BuildStatus(BuildStatusEnum.Success) status = BuildStatus(BuildStatusEnum.Success)
mocker.patch("ahriman.core.status.local_client.LocalClient.package_get", return_value=[(package_ahriman, status)]) mocker.patch("ahriman.core.database.SQLite.packages_get", return_value=[(package_ahriman, status)])
watcher._known = {package_ahriman.base: (package_ahriman, status)} watcher._known = {package_ahriman.base: (package_ahriman, status)}
watcher.load() watcher.load()
@ -50,105 +39,6 @@ def test_load_known(watcher: Watcher, package_ahriman: Package, mocker: MockerFi
assert status.status == BuildStatusEnum.Success assert status.status == BuildStatusEnum.Success
def test_package_add(watcher: Watcher, package_ahriman: Package, mocker: MockerFixture) -> None:
"""
must add package to cache
"""
cache_mock = mocker.patch("ahriman.core.status.local_client.LocalClient.package_add")
watcher.package_add(package_ahriman, BuildStatusEnum.Unknown)
assert watcher.packages
cache_mock.assert_called_once_with(package_ahriman, pytest.helpers.anyvar(int))
def test_package_changes_get(watcher: Watcher, package_ahriman: Package, mocker: MockerFixture) -> None:
"""
must retrieve package changes
"""
cache_mock = mocker.patch("ahriman.core.status.local_client.LocalClient.package_changes_get")
watcher._known = {package_ahriman.base: (package_ahriman, BuildStatus())}
watcher.package_changes_get(package_ahriman.base)
cache_mock.assert_called_once_with(package_ahriman.base)
def test_package_changes_get_failed(watcher: Watcher, package_ahriman: Package, mocker: MockerFixture) -> None:
"""
must fail if package is unknown during fetching changes
"""
cache_mock = mocker.patch("ahriman.core.status.local_client.LocalClient.package_changes_get")
with pytest.raises(UnknownPackageError):
watcher.package_changes_get(package_ahriman.base)
cache_mock.assert_not_called()
def test_package_changes_set(watcher: Watcher, package_ahriman: Package, mocker: MockerFixture) -> None:
"""
must update package changes
"""
cache_mock = mocker.patch("ahriman.core.status.local_client.LocalClient.package_changes_set")
watcher._known = {package_ahriman.base: (package_ahriman, BuildStatus())}
watcher.package_changes_set(package_ahriman.base, Changes())
cache_mock.assert_called_once_with(package_ahriman.base, Changes())
def test_package_changes_set_failed(watcher: Watcher, package_ahriman: Package, mocker: MockerFixture) -> None:
"""
must fail if package is unknown during updating changes
"""
cache_mock = mocker.patch("ahriman.core.status.local_client.LocalClient.package_changes_set")
with pytest.raises(UnknownPackageError):
watcher.package_changes_set(package_ahriman.base, Changes())
cache_mock.assert_not_called()
def test_package_dependencies_get(watcher: Watcher, package_ahriman: Package, mocker: MockerFixture) -> None:
"""
must retrieve package dependencies
"""
cache_mock = mocker.patch("ahriman.core.status.local_client.LocalClient.package_dependencies_get")
watcher._known = {package_ahriman.base: (package_ahriman, BuildStatus())}
watcher.package_dependencies_get(package_ahriman.base)
cache_mock.assert_called_once_with(package_ahriman.base)
def test_package_dependencies_get_failed(watcher: Watcher, package_ahriman: Package, mocker: MockerFixture) -> None:
"""
must fail if package is unknown during fetching dependencies
"""
cache_mock = mocker.patch("ahriman.core.status.local_client.LocalClient.package_dependencies_get")
with pytest.raises(UnknownPackageError):
watcher.package_dependencies_get(package_ahriman.base)
cache_mock.assert_not_called()
def test_package_dependencies_set(watcher: Watcher, package_ahriman: Package, mocker: MockerFixture) -> None:
"""
must update package dependencies
"""
cache_mock = mocker.patch("ahriman.core.status.local_client.LocalClient.package_dependencies_set")
watcher._known = {package_ahriman.base: (package_ahriman, BuildStatus())}
watcher.package_dependencies_set(package_ahriman.base, Dependencies())
cache_mock.assert_called_once_with(package_ahriman.base, Dependencies())
def test_package_dependencies_set_failed(watcher: Watcher, package_ahriman: Package, mocker: MockerFixture) -> None:
"""
must fail if package is unknown during updating dependencies
"""
cache_mock = mocker.patch("ahriman.core.status.local_client.LocalClient.package_dependencies_set")
with pytest.raises(UnknownPackageError):
watcher.package_dependencies_set(package_ahriman.base, Dependencies())
cache_mock.assert_not_called()
def test_logs_get(watcher: Watcher, package_ahriman: Package, mocker: MockerFixture) -> None: def test_logs_get(watcher: Watcher, package_ahriman: Package, mocker: MockerFixture) -> None:
""" """
must return package logs must return package logs

View File

@ -1,9 +1,10 @@
from ahriman.models.dependencies import Dependencies from ahriman.models.dependencies import Dependencies
from ahriman.models.package import Package
def test_from_json_view() -> None: def test_from_json_view(package_ahriman: Package) -> None:
""" """
must construct and serialize dependencies to json must construct and serialize dependencies to json
""" """
dependencies = Dependencies({"/usr/bin/python3": ["python"]}) dependencies = Dependencies(package_ahriman.base, {"/usr/bin/python3": ["python"]})
assert Dependencies.from_json(dependencies.view()) == dependencies assert Dependencies.from_json(dependencies.view()) == dependencies

View File

@ -65,6 +65,7 @@ def test_depends_on(package_archive_ahriman: PackageArchive, mocker: MockerFixtu
)) ))
result = package_archive_ahriman.depends_on() result = package_archive_ahriman.depends_on()
assert result.package_base == package_archive_ahriman.package.base
assert result.paths == { assert result.paths == {
Path("package1") / "file1": ["package1"], Path("package1") / "file1": ["package1"],
Path("package2") / "file3": ["package2"], Path("package2") / "file3": ["package2"],