Skip to content

Commit a2f8c09

Browse files
committed
test: stabilize approval loader fixtures
1 parent a4cb19a commit a2f8c09

5 files changed

Lines changed: 44 additions & 18 deletions

File tree

tests/test_cli_hardening.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ def __init__(self, args: Namespace) -> None:
125125
self.args = args
126126
self.error_message: str | None = None
127127

128-
def parse_args(self) -> Namespace:
128+
def parse_args(self, args=None) -> Namespace:
129129
return self.args
130130

131131
def error(self, message: str) -> None:

tests/test_draft_readmes.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import tempfile
66
import warnings
7+
from datetime import datetime, timezone
78
from pathlib import Path
89
from typing import Any
910
from unittest.mock import MagicMock, patch
@@ -25,6 +26,10 @@
2526
# ── Helpers ───────────────────────────────────────────────────────────────────
2627

2728

29+
def _recent_generated_at() -> str:
30+
return datetime.now(timezone.utc).isoformat()
31+
32+
2833
def _make_repo(
2934
name: str = "my-repo",
3035
*,
@@ -512,7 +517,7 @@ def _make_approved_packet(
512517
repo_name: str = "my-repo",
513518
*,
514519
status: str = "approved-manual",
515-
generated_at: str = "2026-05-11T10:00:00+00:00",
520+
generated_at: str | None = None,
516521
proposed_readme: str = "# My Repo\n\nA great project.",
517522
) -> DraftReadmePacket:
518523
return DraftReadmePacket(
@@ -523,7 +528,7 @@ def _make_approved_packet(
523528
llm_provider="fake",
524529
llm_model="fake-model",
525530
llm_cost_usd=0.001,
526-
generated_at=generated_at,
531+
generated_at=generated_at or _recent_generated_at(),
527532
context_repos=[],
528533
)
529534

tests/test_per_action_approval.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import json
66
import tempfile
7+
from datetime import datetime, timezone
78
from pathlib import Path
89

910
import pytest
@@ -22,12 +23,17 @@
2223
# ---------------------------------------------------------------------------
2324

2425

26+
def _recent_generated_at() -> str:
27+
return datetime.now(timezone.utc).isoformat()
28+
29+
2530
def _make_packet(
2631
goal: str = "add CI to all repos",
2732
*,
2833
num_actions: int = 2,
29-
generated_at: str = "2026-05-12T00:00:00+00:00",
34+
generated_at: str | None = None,
3035
) -> CampaignPlanPacket:
36+
generated_at = generated_at or _recent_generated_at()
3137
actions = [
3238
CampaignAction(
3339
repo_name=f"repo-{i}",
@@ -215,6 +221,7 @@ def test_load_approved_campaign_plans_defaults_missing_state_to_pending(self) ->
215221

216222
with tempfile.TemporaryDirectory() as tmp:
217223
output_dir = Path(tmp)
224+
generated_at = _recent_generated_at()
218225
# Write a record whose actions have NO 'state' field
219226
save_approval_record(
220227
output_dir,
@@ -224,7 +231,7 @@ def test_load_approved_campaign_plans_defaults_missing_state_to_pending(self) ->
224231
"approval_subject_type": "campaign-plan",
225232
"subject_key": "legacykey001",
226233
"source_run_id": "",
227-
"approved_at": "2026-05-12T00:00:00+00:00",
234+
"approved_at": generated_at,
228235
"approved_by": "tester",
229236
"approval_note": "legacy",
230237
"action_type": "campaign-plan",
@@ -235,7 +242,7 @@ def test_load_approved_campaign_plans_defaults_missing_state_to_pending(self) ->
235242
"llm_provider": "fake",
236243
"llm_model": "m",
237244
"llm_cost_usd": 0.0,
238-
"generated_at": "2026-05-12T00:00:00+00:00",
245+
"generated_at": generated_at,
239246
"status": "approved-manual",
240247
"actions": [
241248
{
@@ -260,6 +267,7 @@ def test_load_approved_campaign_plans_preserves_existing_state(self) -> None:
260267

261268
with tempfile.TemporaryDirectory() as tmp:
262269
output_dir = Path(tmp)
270+
generated_at = _recent_generated_at()
263271
save_approval_record(
264272
output_dir,
265273
{
@@ -268,7 +276,7 @@ def test_load_approved_campaign_plans_preserves_existing_state(self) -> None:
268276
"approval_subject_type": "campaign-plan",
269277
"subject_key": "statekey002",
270278
"source_run_id": "",
271-
"approved_at": "2026-05-12T00:00:00+00:00",
279+
"approved_at": generated_at,
272280
"approved_by": "tester",
273281
"approval_note": "state test",
274282
"action_type": "campaign-plan",
@@ -279,7 +287,7 @@ def test_load_approved_campaign_plans_preserves_existing_state(self) -> None:
279287
"llm_provider": "fake",
280288
"llm_model": "m",
281289
"llm_cost_usd": 0.0,
282-
"generated_at": "2026-05-12T00:00:00+00:00",
290+
"generated_at": generated_at,
283291
"status": "approved-manual",
284292
"actions": [
285293
{
@@ -319,6 +327,7 @@ def _make_approved_manual_packet(
319327
from src.plan_campaign import _goal_subject_key, _packet_record_id
320328
from src.warehouse import save_approval_record
321329

330+
generated_at = _recent_generated_at()
322331
packet = CampaignPlanPacket(
323332
goal=goal,
324333
actions=actions,
@@ -327,7 +336,7 @@ def _make_approved_manual_packet(
327336
llm_provider="fake",
328337
llm_model="m",
329338
llm_cost_usd=0.0,
330-
generated_at="2026-05-12T00:00:00+00:00",
339+
generated_at=generated_at,
331340
)
332341
record_id = _packet_record_id(packet)
333342
actions_dicts = [
@@ -351,7 +360,7 @@ def _make_approved_manual_packet(
351360
"approval_subject_type": "campaign-plan",
352361
"subject_key": _goal_subject_key(goal),
353362
"source_run_id": "",
354-
"approved_at": "2026-05-12T00:00:00+00:00",
363+
"approved_at": generated_at,
355364
"approved_by": "tester",
356365
"approval_note": goal,
357366
"action_type": "campaign-plan",
@@ -362,7 +371,7 @@ def _make_approved_manual_packet(
362371
"llm_provider": "fake",
363372
"llm_model": "m",
364373
"llm_cost_usd": 0.0,
365-
"generated_at": "2026-05-12T00:00:00+00:00",
374+
"generated_at": generated_at,
366375
"status": "approved-manual",
367376
"actions": actions_dicts,
368377
},

tests/test_per_section_draft_readmes.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from __future__ import annotations
44

55
import tempfile
6+
from datetime import datetime, timezone
67
from pathlib import Path
78

89
import pytest
@@ -21,10 +22,14 @@
2122
# ── Helpers ───────────────────────────────────────────────────────────────────
2223

2324

25+
def _recent_generated_at() -> str:
26+
return datetime.now(timezone.utc).isoformat()
27+
28+
2429
def _make_packet(
2530
repo_name: str = "test-repo",
2631
proposed_readme: str = "## Installation\npip install foo\n\n## Usage\nrun it\n",
27-
generated_at: str = "2026-05-11T00:00:00+00:00",
32+
generated_at: str | None = None,
2833
) -> DraftReadmePacket:
2934
return DraftReadmePacket(
3035
repo_name=repo_name,
@@ -34,7 +39,7 @@ def _make_packet(
3439
llm_provider="openai",
3540
llm_model="gpt-4",
3641
llm_cost_usd=0.001,
37-
generated_at=generated_at,
42+
generated_at=generated_at or _recent_generated_at(),
3843
)
3944

4045

@@ -233,6 +238,7 @@ def test_legacy_records_load_via_load_approved_drafts(self) -> None:
233238

234239
with tempfile.TemporaryDirectory() as tmp:
235240
output_dir = Path(tmp)
241+
generated_at = _recent_generated_at()
236242
save_approval_record(
237243
output_dir,
238244
{
@@ -241,13 +247,13 @@ def test_legacy_records_load_via_load_approved_drafts(self) -> None:
241247
"approval_subject_type": "draft-readme",
242248
"subject_key": "legacy-repo",
243249
"source_run_id": "",
244-
"approved_at": "2026-05-11T00:00:00+00:00",
250+
"approved_at": generated_at,
245251
"approved_by": "tester",
246252
"approval_note": "legacy",
247253
"action_type": "draft-readme",
248254
"target_context": "legacy-repo",
249255
"decision": "",
250-
"timestamp": "2026-05-11T00:00:00+00:00",
256+
"timestamp": generated_at,
251257
"status": "approved-manual",
252258
"repo_name": "legacy-repo",
253259
"current_readme_sha": None,
@@ -256,7 +262,7 @@ def test_legacy_records_load_via_load_approved_drafts(self) -> None:
256262
"llm_provider": "openai",
257263
"llm_model": "gpt-4",
258264
"llm_cost_usd": 0.0,
259-
"generated_at": "2026-05-11T00:00:00+00:00",
265+
"generated_at": generated_at,
260266
"context_repos": [],
261267
},
262268
)

tests/test_plan_campaign.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import json
66
import tempfile
7+
from datetime import datetime, timezone
78
from pathlib import Path
89
from typing import Any
910
from unittest.mock import MagicMock, patch
@@ -28,6 +29,10 @@
2829
# ── Helpers ───────────────────────────────────────────────────────────────────
2930

3031

32+
def _recent_generated_at() -> str:
33+
return datetime.now(timezone.utc).isoformat()
34+
35+
3136
def _make_repo(name: str = "my-repo", **kwargs: Any) -> dict:
3237
return {
3338
"repo_name": name,
@@ -531,12 +536,13 @@ def test_boot_no_truth_file_exits_cleanly(self) -> None:
531536

532537
def _make_approved_packet(
533538
goal: str = "archive dead repos",
534-
generated_at: str = "2026-05-11T00:00:00+00:00",
539+
generated_at: str | None = None,
535540
status: str = "approved-manual",
536541
) -> tuple[CampaignPlanPacket, dict]:
537542
"""Return a (packet, ledger_record) pair for test setup."""
538543
from src.plan_campaign import _goal_subject_key, _packet_record_id
539544

545+
generated_at = generated_at or _recent_generated_at()
540546
actions = [
541547
CampaignAction(
542548
repo_name="old-repo",
@@ -612,7 +618,7 @@ def test_skips_packets_older_than_30_days(self) -> None:
612618
with tempfile.TemporaryDirectory() as tmp:
613619
output_dir = Path(tmp)
614620
_, fresh_record = _make_approved_packet(
615-
"fresh goal", generated_at="2026-05-11T00:00:00+00:00"
621+
"fresh goal", generated_at=_recent_generated_at()
616622
)
617623
_, stale_record = _make_approved_packet(
618624
"stale goal", generated_at="2026-01-01T00:00:00+00:00"

0 commit comments

Comments
 (0)