@@ -2,10 +2,12 @@
2 2 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
3 3 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
import json
4 4 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
import tempfile
5 5 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
from pathlib import Path
6 6 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
from unittest.mock import MagicMock
7 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
8 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ import pytest
7 9 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
8 10 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
from navegador.graph.schema import NodeLabel
9 11 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
from navegador.ingestion.planopticon import (
10 12 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
EDGE_MAP,
11 13 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
NODE_TYPE_MAP,
@@ -214,15 +216,15 @@
214 216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = Path(tmpdir) / "kg.json"
215 217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p.write_text(json.dumps(data))
216 218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
stats = ingester.ingest_kg(p)
217 219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert stats["edges"] == 0
218 220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- def test_missing_file_returns_empty_stats(self):
221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_missing_file_raises(self):
220 222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
store = _make_store()
221 223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ingester = PlanopticonIngester(store)
222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- stats = ingester.ingest_kg("/nonexistent/kg.json")
223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert stats["nodes"] == 0
224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ with pytest.raises(FileNotFoundError):
225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ingester.ingest_kg("/nonexistent/kg.json")
224 226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
225 227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
def test_returns_stats_dict(self):
226 228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
store = _make_store()
227 229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ingester = PlanopticonIngester(store)
228 230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
with tempfile.TemporaryDirectory() as tmpdir:
@@ -409,11 +411,11 @@
409 411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = Path(tmpdir) / "batch.json"
410 412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p.write_text(json.dumps(batch))
411 413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
stats = ingester.ingest_batch(p)
412 414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert "nodes" in stats
413 415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- def test_skips_missing_manifest_gracefully(self):
416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_missing_manifest_raises(self):
415 417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
store = _make_store()
416 418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ingester = PlanopticonIngester(store)
417 419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
with tempfile.TemporaryDirectory() as tmpdir:
418 420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
batch = {
419 421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"videos": [
@@ -420,12 +422,12 @@
420 422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{"status": "completed", "manifest_path": "nonexistent.json"},
421 423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
]
422 424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
423 425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = Path(tmpdir) / "batch.json"
424 426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p.write_text(json.dumps(batch))
425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # Should not raise
426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ingester.ingest_batch(p)
427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ with pytest.raises(FileNotFoundError):
428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ingester.ingest_batch(p)
427 429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
428 430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
def test_merges_stats_across_videos(self):
429 431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
store = _make_store()
430 432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ingester = PlanopticonIngester(store)
431 433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
with tempfile.TemporaryDirectory() as tmpdir:
@@ -461,24 +463,24 @@
461 463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ingester._merge_stats({"nodes": 3, "edges": 2, "pages": 1})
462 464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert ingester._stats["nodes"] == 5
463 465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert ingester._stats["edges"] == 3
464 466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert ingester._stats["pages"] == 1
465 467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- def test_load_json_missing_file(self):
468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_load_json_missing_file_raises(self):
467 469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
store = _make_store()
468 470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ingester = PlanopticonIngester(store)
469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- result = ingester._load_json(Path("/nonexistent/file.json"))
470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert result == {}
471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ with pytest.raises(FileNotFoundError):
472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ingester._load_json(Path("/nonexistent/file.json"))
471 473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- def test_load_json_invalid_json(self):
474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_load_json_invalid_json_raises(self):
473 475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
store = _make_store()
474 476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ingester = PlanopticonIngester(store)
475 477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
with tempfile.TemporaryDirectory() as tmpdir:
476 478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = Path(tmpdir) / "bad.json"
477 479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p.write_text("{ not valid json }")
478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- result = ingester._load_json(p)
479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert result == {}
480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ with pytest.raises((json.JSONDecodeError, ValueError)):
481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ingester._load_json(p)
480 482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
481 483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
482 484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# ── ingest_interchange relationship/source branches (lines 201, 209) ──────────
483 485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
484 486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
class TestInterchangeRelationshipsAndSources:
485 487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!