Ticket xavierk/voculinux#27, built on #18 (rename) plus the #25/#26 dependency templates. The template builds the app from the canonical checksum-verified release sdist, depends on Void's interpreter, GTK, desktop bindings and packaged Python libraries, and installs the renamed desktop entry, icons and a packaged-install marker. No speech models, no vendored wheels, no pip at build or install time. Packaged installs keep background update checks as a signal, but every update affordance presents the package-manager path (src/vocalinux/utils/packaging.py). Also corrects the Void distro inventory (Ayatana provider name; ydotool marked absent) and regens the installer map.
94 lines
3.5 KiB
Python
94 lines
3.5 KiB
Python
"""Unit guards for packaged-install detection and its update presentation.
|
|
|
|
Ticket #27 decides the update-checker behaviour for packaged installs:
|
|
background checks stay available as a signal, but every user-visible
|
|
update affordance presents the package-manager path instead of release
|
|
downloads. The xbps template installs the marker this module reads.
|
|
"""
|
|
|
|
from pathlib import Path
|
|
|
|
from vocalinux.utils.packaging import (
|
|
PACKAGED_MARKER_PATH,
|
|
PACKAGED_UPDATE_HINT,
|
|
is_packaged_install,
|
|
update_menu_label,
|
|
update_menu_tooltip,
|
|
update_notification_body,
|
|
updates_description,
|
|
)
|
|
|
|
|
|
def test_default_marker_lives_under_the_renamed_share_dir() -> None:
|
|
"""The template installs usr/share/voculinux/packaged; the code reads it."""
|
|
assert PACKAGED_MARKER_PATH == Path("/usr/share/voculinux/packaged")
|
|
|
|
|
|
def test_unpackaged_install_by_default(tmp_path: Path) -> None:
|
|
"""No marker in the test environment means a non-packaged install."""
|
|
assert not is_packaged_install(marker=tmp_path / "packaged")
|
|
|
|
|
|
def test_packaged_install_when_the_marker_exists(tmp_path: Path) -> None:
|
|
"""The xbps template drops the marker file at install time."""
|
|
marker = tmp_path / "packaged"
|
|
marker.touch()
|
|
assert is_packaged_install(marker=marker)
|
|
|
|
|
|
def test_packaged_hint_names_the_package_manager_path() -> None:
|
|
"""The presented path is xbps, not a release download."""
|
|
assert "package manager" in PACKAGED_UPDATE_HINT
|
|
assert "xbps-install -Syu voculinux" in PACKAGED_UPDATE_HINT
|
|
|
|
|
|
def test_unpackaged_menu_label_is_unchanged() -> None:
|
|
"""Source installs keep the release-download affordance they always had."""
|
|
assert update_menu_label("v1.2.3", packaged=False) == "Update Available (v1.2.3)…"
|
|
|
|
|
|
def test_packaged_menu_label_presents_the_package_manager() -> None:
|
|
"""Packaged installs must not misdirect users to release downloads."""
|
|
label = update_menu_label("v1.2.3", packaged=True)
|
|
assert "v1.2.3" in label
|
|
assert "package manager" in label
|
|
|
|
|
|
def test_unpackaged_menu_tooltip_is_unchanged() -> None:
|
|
"""Source installs keep pointing at release notes and download links."""
|
|
tooltip = update_menu_tooltip(packaged=False)
|
|
assert "release notes" in tooltip and "download links" in tooltip
|
|
|
|
|
|
def test_packaged_menu_tooltip_names_xbps() -> None:
|
|
"""The packaged tooltip tells the user where the update comes from."""
|
|
assert "xbps" in update_menu_tooltip(packaged=True)
|
|
|
|
|
|
def test_packaged_notification_body_presents_the_package_manager() -> None:
|
|
"""The desktop notification must not offer a download path either."""
|
|
body = update_notification_body("v1.2.3", packaged=True)
|
|
assert "v1.2.3" in body
|
|
assert "package manager" in body
|
|
|
|
|
|
def test_unpackaged_notification_body_keeps_release_notes() -> None:
|
|
"""Source installs keep the existing notification wording."""
|
|
body = update_notification_body("v1.2.3", packaged=False)
|
|
assert "v1.2.3" in body
|
|
assert "release notes" in body
|
|
|
|
|
|
def test_unpackaged_updates_description_is_unchanged() -> None:
|
|
"""The About page keeps its channel wording for source installs."""
|
|
description = updates_description("stable", packaged=False)
|
|
assert "stable" in description
|
|
assert "package manager" not in description
|
|
|
|
|
|
def test_packaged_updates_description_presents_the_package_manager() -> None:
|
|
"""The About page tells packaged users to update through xbps."""
|
|
description = updates_description("stable", packaged=True)
|
|
assert "stable" in description
|
|
assert "package manager" in description
|