"""'Atualização disponível' must compare the Agent with the real default release, semantically.""" from datetime import datetime, timezone from central.app.control_plane import dashboard_summary, list_installations from central.app.installation_identity import compute_version_drift, outdated_versions, parse_version, reference_agent_version from central.app.models import AgentRelease from central.tests.test_control_plane import setup_db from central.tests.test_operational_view_models import NOW, _installation def _release(session, version, status="PUBLISHED", platform="windows"): session.add(AgentRelease(version=version, platform=platform, architecture="x64", filename=f"GTIFiscalAgent-Setup-{version}.exe", storage_path=f"{version}.exe", size_bytes=1, sha256=version.ljust(64, "0")[:64], status=status)) session.flush() def test_versions_compare_semantically_not_as_strings(): assert compute_version_drift("1.1.7", "1.1.7") == "CURRENT" assert compute_version_drift("1.1.10", "1.1.9") == "CURRENT" # string compare would say older assert compute_version_drift("1.1.6", "1.1.7") == "OUTDATED" assert compute_version_drift("1.2.0", "1.1.7") == "CURRENT" # ahead of the release is not "outdated" assert compute_version_drift("1.0.0rc1", "1.0.0") == "OUTDATED" # pre-release sorts below its final assert compute_version_drift(None, "1.1.7") == "UNKNOWN" assert parse_version("garbage") is None def test_reference_is_the_highest_published_release_and_ignores_revoked_and_drafts(): with setup_db()() as session: _release(session, "1.1.5", "REVOKED") _release(session, "1.1.6") _release(session, "1.1.7") _release(session, "1.9.9", "REVOKED") _release(session, "2.0.0", "DRAFT") _release(session, "3.0.0", platform="linux") assert reference_agent_version(session) == "1.1.7" def test_agent_on_the_default_release_is_current_everywhere_even_with_a_stale_snapshot(): with setup_db()() as session: _release(session, "1.1.7") _release(session, "1.1.6", "REVOKED") # snapshot was written as OUTDATED by an older heartbeat (compared with a stale reference) _installation(session, 1, version="1.1.7") _installation(session, 2, version="1.1.6") session.commit() assert reference_agent_version(session) == "1.1.7" assert outdated_versions(session, "1.1.7") == ["1.1.6"] rows = {item["agent_version"]: item for item in list_installations(session, now=NOW)["items"]} assert rows["1.1.7"]["version_drift"] == "CURRENT" and rows["1.1.6"]["version_drift"] == "OUTDATED" assert [i["agent_version"] for i in list_installations(session, version="outdated", now=NOW)["items"]] == ["1.1.6"] summary = dashboard_summary(session, now=NOW) assert [a["agent_version"] for a in summary["outdated_agents"]] == ["1.1.6"] def test_a_newer_published_release_makes_the_previous_one_outdated(): with setup_db()() as session: _release(session, "1.1.7") _installation(session, 1, version="1.1.7") session.commit() assert list_installations(session, version="outdated", now=NOW)["total"] == 0 _release(session, "1.1.8") session.commit() assert list_installations(session, version="outdated", now=NOW)["total"] == 1