Files
voculinux/tests/test_packaged_install.py
T
soubarnak d7a4b8c21e feat(void): add xbps template for the voculinux app
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.
2026-11-06 03:03:33 +05:30

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