chore: run ty on tests/ and make the new ingest tests pass it
Stop excluding tests/ from the ty-check pre-commit hook so touched test files are type-checked. Fix the new ingest tests under the now-active check: - cast duck-typed JobContext / App test doubles to their declared types; - narrow the gated Postgres fixture's str | None URL (pytest.skip isn't modelled as NoReturn by ty). Pre-existing type issues in untouched test modules are unaffected (the hook checks only changed files); they'll be cleaned as those files are next touched. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
21b7922bac
commit
3407e3cf64
@@ -22,5 +22,4 @@ repos:
|
|||||||
name: ty-check
|
name: ty-check
|
||||||
language: system
|
language: system
|
||||||
types: [python]
|
types: [python]
|
||||||
exclude: tests/.*
|
|
||||||
entry: uv run ty check
|
entry: uv run ty check
|
||||||
|
|||||||
@@ -57,6 +57,8 @@ def postgres_url() -> str:
|
|||||||
"`docker compose --profile postgres up -d postgres-test` and export "
|
"`docker compose --profile postgres up -d postgres-test` and export "
|
||||||
"TEST_DATABASE_URL=postgresql+asyncpg://mcp:mcp@localhost:5433/mcp"
|
"TEST_DATABASE_URL=postgresql+asyncpg://mcp:mcp@localhost:5433/mcp"
|
||||||
)
|
)
|
||||||
|
# pytest.skip raises, but ty doesn't model it as NoReturn — narrow explicitly.
|
||||||
|
assert url is not None
|
||||||
if not _reachable(url):
|
if not _reachable(url):
|
||||||
pytest.skip(f"Postgres at {url} is not reachable")
|
pytest.skip(f"Postgres at {url} is not reachable")
|
||||||
return url
|
return url
|
||||||
|
|||||||
@@ -3,10 +3,11 @@
|
|||||||
Uses procrastinate's in-memory connector so no live Postgres is required.
|
Uses procrastinate's in-memory connector so no live Postgres is required.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from typing import cast
|
||||||
from unittest.mock import AsyncMock
|
from unittest.mock import AsyncMock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from procrastinate import testing
|
from procrastinate import App, JobContext, testing
|
||||||
|
|
||||||
import nextcloud_mcp_server.vector.queue.procrastinate as pq
|
import nextcloud_mcp_server.vector.queue.procrastinate as pq
|
||||||
from nextcloud_mcp_server.vector.scanner import DocumentTask
|
from nextcloud_mcp_server.vector.scanner import DocumentTask
|
||||||
@@ -158,7 +159,7 @@ class TestReclaimStalledJobs:
|
|||||||
class Ctx:
|
class Ctx:
|
||||||
app = FakeApp()
|
app = FakeApp()
|
||||||
|
|
||||||
await pq.reclaim_stalled_ingest_jobs(Ctx(), timestamp=0)
|
await pq.reclaim_stalled_ingest_jobs(cast(JobContext, Ctx()), timestamp=0)
|
||||||
assert retried == [1, 2]
|
assert retried == [1, 2]
|
||||||
|
|
||||||
|
|
||||||
@@ -184,7 +185,7 @@ class TestGetIngestJobCounts:
|
|||||||
class FakeApp:
|
class FakeApp:
|
||||||
job_manager = FakeManager()
|
job_manager = FakeManager()
|
||||||
|
|
||||||
counts = await pq.get_ingest_job_counts(FakeApp())
|
counts = await pq.get_ingest_job_counts(cast(App, FakeApp()))
|
||||||
assert counts["todo"] == 3
|
assert counts["todo"] == 3
|
||||||
assert counts["doing"] == 1
|
assert counts["doing"] == 1
|
||||||
assert counts["failed"] == 2
|
assert counts["failed"] == 2
|
||||||
|
|||||||
Reference in New Issue
Block a user