From 53ad949eb6d1ff4ed3c4b2815e88dc9b942bd20c Mon Sep 17 00:00:00 2001 From: Ken Schlobohm Date: Sat, 3 Oct 2026 11:15:00 -0500 Subject: [PATCH] Fix nondeterministic workflow catalog ZIP fixture Assisted-by: GitHub Copilot App (model: GPT-6.1 Sol, autonomous) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .../workflows/test_catalog_versions.py | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/tests/specify_cli/workflows/test_catalog_versions.py b/tests/specify_cli/workflows/test_catalog_versions.py index f9828b3278..8c2ba06f19 100644 --- a/tests/specify_cli/workflows/test_catalog_versions.py +++ b/tests/specify_cli/workflows/test_catalog_versions.py @@ -4,6 +4,7 @@ import hashlib import io +import time import zipfile import pytest @@ -49,7 +50,8 @@ def _archive(version: str, workflow_id: str = "history-wf", requires=None) -> by document["requires"] = requires output = io.BytesIO() with zipfile.ZipFile(output, "w") as archive: - archive.writestr("workflow.yml", yaml.safe_dump(document)) + info = zipfile.ZipInfo("workflow.yml", date_time=(1980, 1, 1, 0, 0, 0)) + archive.writestr(info, yaml.safe_dump(document)) return output.getvalue() @@ -103,6 +105,25 @@ def geturl(self): return self.url +def test_archive_is_deterministic_across_clock_changes(monkeypatch): + monkeypatch.setattr( + zipfile.time, + "localtime", + lambda *args: time.struct_time((2026, 10, 3, 2, 43, 0, 5, 276, 0)), + ) + first = _archive("1.0.0", requires={"integrations": ["copilot"]}) + monkeypatch.setattr( + zipfile.time, + "localtime", + lambda *args: time.struct_time((2026, 10, 3, 2, 43, 2, 5, 276, 0)), + ) + second = _archive("1.0.0", requires={"integrations": ["copilot"]}) + + assert first == second + assert first != _archive("2.0.0", requires={"integrations": ["copilot"]}) + assert first != _archive("1.0.0", requires={"integrations": ["claude"]}) + + def test_current_and_historical_metadata(monkeypatch, project_dir): entry = _entry() catalog = _catalog(monkeypatch, project_dir, entry)