Files
Priceflow/verify_vision_priority.py
T

51 lines
1.9 KiB
Python

import sys
import unittest
# Mock modules to avoid ImportError for app dependencies we don't need for this specific test
from unittest.mock import MagicMock
sys.modules["sqlalchemy"] = MagicMock()
sys.modules["sqlalchemy.orm"] = MagicMock()
sys.modules["app.database"] = MagicMock()
sys.modules["app.utils.image"] = MagicMock()
sys.modules["app.utils.text"] = MagicMock()
sys.modules["app.utils.text"].filter_relevant_text = lambda text, max_length: text
# Mock pydantic
mock_pydantic = MagicMock()
class MockBaseModel:
pass
mock_pydantic.BaseModel = MockBaseModel
mock_pydantic.Field = MagicMock(return_value=None)
mock_pydantic.field_validator = MagicMock(return_value=lambda x: x)
sys.modules["pydantic"] = mock_pydantic
# Import the schema module
from app.ai_schema import get_extraction_prompt
class TestVisionPriorityPrompt(unittest.TestCase):
def test_vision_first_directives(self):
"""Verify that the prompt contains the Vision-First directives."""
# Scenario: Some random text context
page_text = "Some random text content from the page."
prompt = get_extraction_prompt(page_text)
print("\nGenerated Prompt Snippet:\n", prompt[:500], "...\n")
# Check for Critical Directives
self.assertIn("Vision-First Price Extraction Agent", prompt)
self.assertIn("**SOURCE OF TRUTH = IMAGE**", prompt)
self.assertIn("IF IMAGE AND TEXT CONFLICT, TRUST THE IMAGE", prompt)
# Check for stock rules
self.assertIn("STOCK STATUS RULES", prompt)
def test_prompt_without_text(self):
"""Verify prompt structure when no text is provided."""
prompt = get_extraction_prompt(None)
self.assertIn("**SOURCE OF TRUTH = IMAGE**", prompt)
self.assertNotIn("**Relevant text from page:**", prompt)
if __name__ == "__main__":
unittest.main()