"""Tests for ImageFrame API contract.""" import pytest from cf_vision.models import BoundingBox, ImageElement, ImageFrame def test_imageframe_text_blocks(): frame = ImageFrame( source="mock", image_bytes=None, elements=[ ImageElement(element_type="title", text="My Doc", confidence=0.99), ImageElement(element_type="barcode", text="123456", confidence=1.0), ImageElement(element_type="plain_text", text="Body text.", confidence=0.9), ], model="mock", ) blocks = frame.text_blocks() assert len(blocks) == 2 assert all(b.element_type in ("title", "plain_text") for b in blocks) def test_imageframe_barcodes(): frame = ImageFrame( source="mock", image_bytes=None, elements=[ ImageElement(element_type="barcode", text="0123456789012", confidence=1.0, metadata={"format": "EAN13"}), ], model="mock", ) barcodes = frame.barcodes() assert len(barcodes) == 1 assert barcodes[0].text == "0123456789012" def test_imageframe_full_text(): frame = ImageFrame( source="mock", image_bytes=None, elements=[ ImageElement(element_type="title", text="Title", confidence=0.99), ImageElement(element_type="plain_text", text="Paragraph.", confidence=0.9), ], model="mock", ) assert frame.full_text() == "Title\nParagraph." def test_visionrouter_mock(): from cf_vision.router import VisionRouter router = VisionRouter(mock=True) frame = router.analyze(b"fake_image_bytes", task="document") assert frame.source == "mock" assert len(frame.elements) > 0 def test_visionrouter_mock_barcode(): from cf_vision.router import VisionRouter router = VisionRouter(mock=True) frame = router.analyze(b"fake", task="barcode") barcodes = frame.barcodes() assert len(barcodes) == 1 assert barcodes[0].element_type == "barcode" def test_visionrouter_real_raises(): from cf_vision.router import VisionRouter router = VisionRouter(mock=False) with pytest.raises(NotImplementedError): router.analyze(b"fake")