feat: implement stats subcommand (#132)

This commit is contained in:
2024-09-03 02:42:29 +03:00
parent ddd3c3f06f
commit f7a50e5294
22 changed files with 740 additions and 20 deletions

View File

@ -2,9 +2,23 @@ import pytest
from pathlib import Path
from ahriman.core.formatters import AurPrinter, ChangesPrinter, ConfigurationPathsPrinter, ConfigurationPrinter, \
PackagePrinter, PatchPrinter, RepositoryPrinter, StatusPrinter, StringPrinter, TreePrinter, UpdatePrinter, \
UserPrinter, ValidationPrinter, VersionPrinter
from ahriman.core.formatters import \
AurPrinter, \
ChangesPrinter, \
ConfigurationPathsPrinter, \
ConfigurationPrinter, \
EventStatsPrinter, \
PackagePrinter, \
PackageStatsPrinter, \
PatchPrinter, \
RepositoryPrinter, \
StatusPrinter, \
StringPrinter, \
TreePrinter, \
UpdatePrinter, \
UserPrinter, \
ValidationPrinter, \
VersionPrinter
from ahriman.models.aur_package import AURPackage
from ahriman.models.build_status import BuildStatus
from ahriman.models.changes import Changes
@ -61,6 +75,17 @@ def configuration_printer() -> ConfigurationPrinter:
return ConfigurationPrinter("section", {"key_one": "value_one", "key_two": "value_two"})
@pytest.fixture
def event_stats_printer() -> EventStatsPrinter:
"""
fixture for event stats printer
Returns:
EventStatsPrinter: event stats printer test instance
"""
return EventStatsPrinter("event", [5, 2, 7, 9, 8, 0, 4, 1, 6, 3])
@pytest.fixture
def package_ahriman_printer(package_ahriman: Package) -> PackagePrinter:
"""
@ -75,6 +100,21 @@ def package_ahriman_printer(package_ahriman: Package) -> PackagePrinter:
return PackagePrinter(package_ahriman, BuildStatus())
@pytest.fixture
def package_stats_printer(package_ahriman: Package, package_python_schedule: Package) -> PackageStatsPrinter:
"""
fixture for package stats printer
Args:
package_ahriman(Package): package fixture
package_python_schedule(Package): schedule package fixture
Returns:
PackageStatsPrinter: package stats printer test instance
"""
return PackageStatsPrinter({package_ahriman.base: 4, package_python_schedule.base: 5})
@pytest.fixture
def patch_printer(package_ahriman: Package) -> PatchPrinter:
"""

View File

@ -0,0 +1,29 @@
from ahriman.core.formatters import EventStatsPrinter
def test_properties(event_stats_printer: EventStatsPrinter) -> None:
"""
must return empty properties list
"""
assert event_stats_printer.properties()
def test_properties_empty() -> None:
"""
must correctly generate properties for empty events list
"""
assert EventStatsPrinter("event", []).properties()
def test_properties_single() -> None:
"""
must skip calculation of the standard deviation for single event
"""
assert EventStatsPrinter("event", [1]).properties()
def test_title(event_stats_printer: EventStatsPrinter) -> None:
"""
must return non-empty title
"""
assert event_stats_printer.title() is not None

View File

@ -0,0 +1,30 @@
from ahriman.core.formatters import PackageStatsPrinter
def test_properties(package_stats_printer: PackageStatsPrinter) -> None:
"""
must return non-empty properties list
"""
assert package_stats_printer.properties()
def test_properties_sorted(package_stats_printer: PackageStatsPrinter) -> None:
"""
properties list must be sorted in descending order
"""
prop1, prop2 = package_stats_printer.properties()
assert prop1.value > prop2.value
def test_properties_empty() -> None:
"""
must return empty properties list for the empty events list
"""
assert not PackageStatsPrinter({}).properties()
def test_title(package_stats_printer: PackageStatsPrinter) -> None:
"""
must return non-empty title
"""
assert package_stats_printer.title() is not None