Skip to content

Commit f7e3d0f

Browse files
committed
Fix tests and depcreation warnings
1 parent 05c592d commit f7e3d0f

File tree

6 files changed

+20
-27
lines changed

6 files changed

+20
-27
lines changed

src/specfact_cli/analyzers/ambiguity_scanner.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -910,12 +910,8 @@ def _extract_target_users(self, plan_bundle: PlanBundle) -> list[str]:
910910
# Look for role/permission constants (e.g., ADMIN = "admin")
911911
if (
912912
"role" in attr_name or "permission" in attr_name
913-
) and isinstance(item.value, (ast.Str, ast.Constant)):
914-
role_value = (
915-
item.value.s
916-
if isinstance(item.value, ast.Str)
917-
else item.value
918-
)
913+
) and isinstance(item.value, ast.Constant):
914+
role_value = item.value.value
919915
if isinstance(role_value, str) and len(role_value) > 2:
920916
role_clean = role_value.strip().lower()
921917
if (

src/specfact_cli/validators/sidecar/crosshair_summary.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,10 +189,10 @@ def generate_summary_file(
189189
Returns:
190190
Path to generated summary file
191191
"""
192-
from datetime import datetime
192+
from datetime import UTC, datetime
193193

194194
if timestamp is None:
195-
timestamp = datetime.utcnow().strftime("%Y%m%dT%H%M%SZ")
195+
timestamp = datetime.now(UTC).strftime("%Y%m%dT%H%M%SZ")
196196

197197
# Ensure reports directory exists (creates parent directories if needed)
198198
reports_dir.mkdir(parents=True, exist_ok=True)

src/specfact_cli/validators/sidecar/frameworks/django.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -199,12 +199,9 @@ def _get_function_name(self, func_node: ast.AST) -> str:
199199

200200
@beartype
201201
def _extract_string_literal(self, node: ast.AST) -> str | None:
202-
"""Extract string literal from AST node."""
203-
if isinstance(node, ast.Constant):
204-
if isinstance(node.value, str):
205-
return node.value
206-
elif hasattr(ast, "Str") and isinstance(node, ast.Str):
207-
return node.s # type: ignore[attr-defined, deprecated]
202+
"""Extract string literal from AST node (Python 3.8+ uses ast.Constant)."""
203+
if isinstance(node, ast.Constant) and isinstance(node.value, str):
204+
return node.value
208205
return None
209206

210207
@beartype

src/specfact_cli/validators/sidecar/frameworks/fastapi.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -182,12 +182,9 @@ def _extract_route_from_function(
182182

183183
@beartype
184184
def _extract_string_literal(self, node: ast.AST) -> str | None:
185-
"""Extract string literal from AST node."""
186-
if isinstance(node, ast.Constant):
187-
if isinstance(node.value, str):
188-
return node.value
189-
elif hasattr(ast, "Str") and isinstance(node, ast.Str):
190-
return node.s # type: ignore[attr-defined, deprecated]
185+
"""Extract string literal from AST node (Python 3.8+ uses ast.Constant)."""
186+
if isinstance(node, ast.Constant) and isinstance(node.value, str):
187+
return node.value
191188
return None
192189

193190
@beartype

src/specfact_cli/validators/sidecar/frameworks/flask.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -222,12 +222,9 @@ def _extract_route_from_function(
222222

223223
@beartype
224224
def _extract_string_literal(self, node: ast.AST) -> str | None:
225-
"""Extract string literal from AST node."""
226-
if isinstance(node, ast.Constant):
227-
if isinstance(node.value, str):
228-
return node.value
229-
elif hasattr(ast, "Str") and isinstance(node, ast.Str):
230-
return node.s # type: ignore[attr-defined, deprecated]
225+
"""Extract string literal from AST node (Python 3.8+ uses ast.Constant)."""
226+
if isinstance(node, ast.Constant) and isinstance(node.value, str):
227+
return node.value
231228
return None
232229

233230
@beartype

tests/integration/sync/test_ado_backlog_sync.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,13 @@ def test_openspec_to_ado_export(
8989
mock_patch.assert_called_once()
9090

9191
@beartype
92-
def test_ado_to_openspec_import(self, ado_adapter: AdoAdapter, tmp_path: Path) -> None:
92+
@patch.object(AdoAdapter, "_get_work_item_comments", return_value=[])
93+
def test_ado_to_openspec_import(
94+
self,
95+
mock_get_comments: MagicMock,
96+
ado_adapter: AdoAdapter,
97+
tmp_path: Path,
98+
) -> None:
9399
"""Test ADO → OpenSpec import (ADO work item → change proposal)."""
94100
from unittest.mock import MagicMock
95101

0 commit comments

Comments
 (0)