Pre-existing ruff violations surfaced by CI on PR #188: - TC001: move runtime `Neo4jDriver` imports into `TYPE_CHECKING` blocks (queries.py, chunk_writer.py, schema.py, tree_reader.py, tree_writer.py) - SIM117: combine nested `async with` in chunk_writer.write_chunks and tree_writer.write_document - SIM105: replace try/except/pass with `contextlib.suppress` in tree_writer._element_props - F401: remove unused `Neo4jDriver` import in main._init_neo4j - RUF100: remove unused `# noqa: E402` in tests/neo4j/conftest.py - I001: sort imports in tests/neo4j/test_chunk_writer.py and test_tree_writer.py Zero behaviour change. `ruff check .` now passes cleanly.
40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
"""Shared fixtures for Neo4j integration tests.
|
|
|
|
These tests are skipped unless a live Neo4j is reachable via NEO4J_TEST_URI
|
|
(defaulting to bolt://localhost:7687). CI spins up `neo4j:5.15-community`
|
|
alongside the job; locally run `docker compose -f docker-compose.dev.yml up neo4j`.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
|
|
import pytest
|
|
|
|
# Skip the entire module cleanly when the neo4j driver package is absent
|
|
# (e.g. local dev without the dependency installed).
|
|
pytest.importorskip("neo4j")
|
|
|
|
from infra.neo4j import close_driver, get_driver
|
|
|
|
|
|
def _cfg() -> tuple[str, str, str]:
|
|
return (
|
|
os.environ.get("NEO4J_TEST_URI", "bolt://localhost:7687"),
|
|
os.environ.get("NEO4J_TEST_USER", "neo4j"),
|
|
os.environ.get("NEO4J_TEST_PASSWORD", "changeme"),
|
|
)
|
|
|
|
|
|
@pytest.fixture
|
|
async def neo4j_driver():
|
|
uri, user, password = _cfg()
|
|
try:
|
|
neo = await get_driver(uri, user, password)
|
|
except Exception as exc:
|
|
pytest.skip(f"Neo4j not reachable at {uri}: {exc}")
|
|
# Wipe DB before each test — integration tests assume an empty graph.
|
|
async with neo.driver.session(database=neo.database) as session:
|
|
await session.run("MATCH (n) DETACH DELETE n")
|
|
yield neo
|
|
await close_driver()
|