import unittest
from types import SimpleNamespace
from unittest.mock import Mock, patch
from app import multi_pipeline as mp
from app.native_metadata import NativeFrame


class MetadataOnlyTest(unittest.TestCase):
    def test_no_pixel_extraction_without_consumer(self):
        fm=SimpleNamespace(buffer_pts=0,frame_number=0,source_width=160,source_height=90)
        buffer=SimpleNamespace(batch_meta=SimpleNamespace(frame_items=[fm]),extract=Mock(side_effect=AssertionError('pixel extraction')))
        path=SimpleNamespace(ingress=Mock(),visual=None,submit=Mock())
        receiver=mp._make_retriever('det','unused','unused',Mock(),0,{'n':0},component_id=7,result_path=path)()
        with patch.object(mp,'copy_detection_frame',return_value=NativeFrame(0,0,160,90,(),160,90)):
            self.assertEqual(receiver.consume(buffer),1)
        path.submit.assert_called_once()
        buffer.extract.assert_not_called()

    def test_no_legacy_snapshot_route_or_cache(self):
        from app.main import app
        self.assertFalse(any(getattr(r,'path','').endswith('/snapshot') for r in app.routes))
        self.assertFalse(hasattr(mp.StorageWriter,'snapshot'))
