haiku.rag/tests
Yiorgis Gozadinos da6cdfbc51
Resolve file:// URIs to paths through url2pathname
urlparse().path keeps the leading slash in front of a Windows drive, so
file:///C:/docs/a.pdf read as \C:\docs\a.pdf and the ingester reported
"File does not exist" for every file it discovered. url2pathname is the
stdlib conversion that strips it, per platform.

Four sites each decided both "is this local" and "what path is this":
FSSource._uri_to_path and supports, resolve_adhoc_fetcher,
create_document_from_source and check_source_accessible, and convert.
is_local_uri and uri_to_path in haiku.rag.uri own those two decisions now,
which closes two more cases of the same root cause. A bare C:\docs\a.pdf
parses with scheme "c", so add-src raised "No source adapter for URI scheme
'c'" and convert silently treated the path as raw text. And convert and
check_source_accessible never percent-decoded at all, so a file named
a[b] c.md read as missing on Linux and macOS too.

A file URI's host is reattached after conversion rather than passed to
url2pathname, which as of 3.14 rejects a non-local authority off Windows.
file:////server/share is the empty-authority spelling of a UNC path, its
host being the first path segment, so that host is normalised into the
authority before conversion. Output is identical on 3.12, 3.13 and 3.14.

The ad-hoc FS fetcher roots at the path's own anchor rather than "/", which
on Windows is only the current drive.

test_uri.py runs on ubuntu, macos and windows across 3.13 and 3.14 without
the project installed: --noconftest because the repo conftest imports
dependencies that job does not need, and -o addopts= to drop the
repository's -n auto. The Windows legs are what cover the drive conversion.

Fixes #574.
2026-08-21 10:22:26 +03:00
..
capabilities Return "No results found." and accumulate repeated search results 2026-08-21 10:09:25 +03:00
cassettes Put multi-table writes behind one transaction boundary 2026-08-19 14:05:40 +03:00
chat Give the capsule to one return, and the run its own copy of state 2026-08-13 13:00:02 +03:00
data Remove repliqa from test setup 2026-06-01 10:40:52 +03:00
docker Add a docker-compose for integration test services 2026-06-04 11:13:16 +03:00
ingester Move source adapters out of the ingester package 2026-08-20 11:46:55 +03:00
sandbox Point the limit comments at the right limits 2026-07-28 19:11:37 +03:00
sources Resolve file:// URIs to paths through url2pathname 2026-08-21 10:22:26 +03:00
store Split the store module by responsibility 2026-08-20 12:13:51 +03:00
tools Make get_config the only configuration lookup 2026-08-19 14:43:40 +03:00
__init__.py Use LLM-as-a-judge to test QA 2025-06-25 18:18:28 +03:00
conftest.py Consolidate duplicated client-side tests 2026-07-26 13:30:59 +03:00
json_body_serializer.py Keep cross-encoder rerank scores apart when they saturate 2026-08-07 14:07:53 +03:00
services.py Add a docker-compose for integration test services 2026-06-04 11:13:16 +03:00
test_app.py Measure the CLI and its application layer 2026-08-20 13:23:00 +03:00
test_ask_images.py Accept images on ask/analyze 2026-07-25 10:23:55 +03:00
test_cascade_delete.py Skip embedding validation on document deletion 2026-07-22 10:48:00 +03:00
test_chunk.py Make get_config the only configuration lookup 2026-08-19 14:43:40 +03:00
test_chunker.py Reject unknown and out-of-range configuration values 2026-08-19 15:32:51 +03:00
test_cli.py Measure the CLI and its application layer 2026-08-20 13:23:00 +03:00
test_client.py Resolve file:// URIs to paths through url2pathname 2026-08-21 10:22:26 +03:00
test_client_analyze.py replace haiku.skills with native Pydantic AI capabilities 2026-07-24 15:26:17 +03:00
test_config.py Make the documented configuration match the code 2026-08-19 15:52:50 +03:00
test_context.py Remove the single-document item accessors the batching replaced 2026-08-18 17:12:10 +03:00
test_context_enhancement.py Make get_config the only configuration lookup 2026-08-19 14:43:40 +03:00
test_converters.py Reject unknown and out-of-range configuration values 2026-08-19 15:32:51 +03:00
test_database_autocreate.py Test vacuum against real table state 2026-07-27 12:11:01 +03:00
test_docling_serve_client.py Wire providers.docling_serve.timeout through to the client 2026-08-19 13:30:45 +03:00
test_doctor.py Split the store module by responsibility 2026-08-20 12:13:51 +03:00
test_document.py Load document blobs only when asked 2026-08-06 13:04:51 +03:00
test_download_models.py Make get_config the only configuration lookup 2026-08-19 14:43:40 +03:00
test_duplicate_ingestion.py Re-check URI under the write lock to prevent duplicate ingestion 2026-07-08 11:26:45 +03:00
test_embedder.py Make get_config the only configuration lookup 2026-08-19 14:43:40 +03:00
test_embedder_config.py Fix defects found reviewing the coverage work 2026-07-27 10:44:32 +03:00
test_enrichment_batching.py Stop the reranker fetch reading text it discards 2026-08-18 18:00:00 +03:00
test_filter.py Rename document_meta identity column document_id to id 2026-07-08 16:32:55 +03:00
test_info.py Split the store module by responsibility 2026-08-20 12:13:51 +03:00
test_inspector.py Do not duplicate metadata items in inspector 2026-08-18 12:30:13 +02:00
test_lancedb_connection.py Make get_config the only configuration lookup 2026-08-19 14:43:40 +03:00
test_logging.py Additional tests 2026-02-13 18:08:46 +02:00
test_mcp.py Make get_config the only configuration lookup 2026-08-19 14:43:40 +03:00
test_pdf_attachments.py Move source adapters out of the ingester package 2026-08-20 11:46:55 +03:00
test_pdf_concurrency.py Serialize all in-process pdfium access under a shared lock 2026-06-14 10:50:42 +03:00
test_pdf_split.py Cover MCP, ingester and converter error paths 2026-07-26 19:14:26 +03:00
test_picture_description.py cover picture-description provider and rebuild edge cases 2026-05-05 14:20:37 +03:00
test_picture_in_context.py Make get_config the only configuration lookup 2026-08-19 14:43:40 +03:00
test_processing.py Resolve file:// URIs to paths through url2pathname 2026-08-21 10:22:26 +03:00
test_reader.py Make get_config the only configuration lookup 2026-08-19 14:43:40 +03:00
test_rebuild.py Split the store module by responsibility 2026-08-20 12:13:51 +03:00
test_reranker.py Reject unknown and out-of-range configuration values 2026-08-19 15:32:51 +03:00
test_s3_integration.py Split the store module by responsibility 2026-08-20 12:13:51 +03:00
test_s3_source.py canonical metadata keys: source_revision + content_type, bump to 0.50.0 2026-05-26 11:43:30 +03:00
test_search.py Make get_config the only configuration lookup 2026-08-19 14:43:40 +03:00
test_settings.py Make get_config the only configuration lookup 2026-08-19 14:43:40 +03:00
test_telemetry.py Route eval scripts through the shared telemetry configure 2026-07-10 11:38:33 +03:00
test_title_generation.py Reach and enforce 100% coverage 2026-07-26 20:11:02 +03:00
test_uri.py Resolve file:// URIs to paths through url2pathname 2026-08-21 10:22:26 +03:00
test_utils.py Make get_config the only configuration lookup 2026-08-19 14:43:40 +03:00
test_vacuum_debounce.py Make get_config the only configuration lookup 2026-08-19 14:43:40 +03:00
test_versioning.py Make get_config the only configuration lookup 2026-08-19 14:43:40 +03:00