import pytest import logging from unittest.mock import MagicMock MagicMock.app_id = "com.instagram.android" MagicMock._get_current_app = MagicMock(return_value="com.instagram.android") class MockArgs: def __init__(self, **kwargs): for k, v in kwargs.items(): setattr(self, k, v) class MockConfigs: def __init__(self, args): self.args = args class MockDeviceV2: def __init__(self): self.clicks = [] self.shells = [] self.double_clicks = [] self.presses = [] self.xml_dump = "" def click(self, x, y): self.clicks.append((x, y)) def shell(self, cmd): self.shells.append(cmd) def double_click(self, x, y, duration=0): self.double_clicks.append((x, y)) def press(self, key): self.presses.append(key) def dump_hierarchy(self): return self.xml_dump class MockDevice: def __init__(self): self.deviceV2 = MockDeviceV2() def get_info(self): return {"displayWidth": 1080, "displayHeight": 2400} def cm_to_pixels(self, cm): return cm * 10 class MockTelepathicEngine: def find_best_node(self, xml, intent_description, device=None, **kwargs): description = intent_description.lower() if "story ring" in description: return {"x": 100, "y": 100, "description": "Story Ring", "score": 1.0} if "follow" in description or "folgen" in description: return {"x": 200, "y": 200, "text": "Follow", "description": "Follow Button", "score": 1.0} if "first image" in description or "profile grid" in description: return {"x": 300, "y": 300, "description": "Grid Image", "score": 1.0} return None def _extract_semantic_nodes(self, xml): return [{"x": 10, "y": 10}] def confirm_click(self, *args, **kwargs): pass def reject_click(self, *args, **kwargs): pass @classmethod def get_instance(cls): return cls() @pytest.fixture def mock_logger(): return logging.getLogger("test") @pytest.fixture def device(): return MockDevice() @pytest.fixture(autouse=True) def telepathic_mock(monkeypatch): import GramAddict.core.telepathic_engine engine = MockTelepathicEngine() monkeypatch.setattr(GramAddict.core.telepathic_engine.TelepathicEngine, "get_instance", lambda: engine) return engine @pytest.fixture def mock_cognitive_stack(): stack = { "dopamine": MagicMock(), "darwin": MagicMock(), "resonance": MagicMock(), "active_inference": MagicMock(), "growth_brain": MagicMock(), "swarm": MagicMock(), "radome": MagicMock(), "nav_graph": MagicMock(), "zero_engine": MagicMock(), "crm": MagicMock(), "telepathic": MockTelepathicEngine() } stack["radome"].sanitize_xml.side_effect = lambda x: x return stack