RetailMind / tests /test_adaptation.py
hodfa840's picture
feat: Complete RetailMind overhaul — hybrid retrieval, EWMA drift detection, self-healing adapter, premium UI, tests & CI
f69e608
"""
Unit tests for the self-healing adapter.
"""
import pytest
from modules.adaptation import Adapter
@pytest.fixture
def adapter():
return Adapter()
class TestAdapter:
"""Tests for the prompt adaptation engine."""
def test_normal_returns_base_prompt(self, adapter):
prompt = adapter.adapt_prompt("normal")
assert "RetailMind" in prompt
assert "ACTIVE ADAPTATION" not in prompt
def test_price_sensitive_injects_rules(self, adapter):
prompt = adapter.adapt_prompt("price_sensitive")
assert "PRICE SENSITIVITY" in prompt
assert "cheapest" in prompt.lower()
def test_summer_shift_injects_rules(self, adapter):
prompt = adapter.adapt_prompt("summer_shift")
assert "SEASONAL SHIFT" in prompt
assert "lightweight" in prompt.lower()
def test_eco_trend_injects_rules(self, adapter):
prompt = adapter.adapt_prompt("eco_trend")
assert "SUSTAINABILITY" in prompt
assert "recycled" in prompt.lower() or "organic" in prompt.lower()
def test_explanation_differs_per_state(self, adapter):
explanations = set()
for state in ["normal", "price_sensitive", "summer_shift", "eco_trend"]:
explanations.add(adapter.get_explanation(state))
assert len(explanations) == 4, "Each state should produce a unique explanation"
def test_label_differs_per_state(self, adapter):
labels = set()
for state in ["normal", "price_sensitive", "summer_shift", "eco_trend"]:
labels.add(adapter.get_label(state))
assert len(labels) == 4, "Each state should produce a unique label"
def test_base_prompt_contains_anti_hallucination(self, adapter):
prompt = adapter.adapt_prompt("normal")
assert "ONLY recommend" in prompt or "only recommend" in prompt.lower()