"""
Unit tests for app/services/cache_service.py cache key generation.
"""

from app.services.cache_service import build_cache_key


class TestBuildCacheKey:
    def test_same_inputs_produce_same_key(self):
        key1 = build_cache_key("thanjavur", "rice", 6, "v1")
        key2 = build_cache_key("thanjavur", "rice", 6, "v1")
        assert key1 == key2

    def test_different_district_produces_different_key(self):
        key1 = build_cache_key("thanjavur", "rice", 6, "v1")
        key2 = build_cache_key("madurai", "rice", 6, "v1")
        assert key1 != key2

    def test_different_crop_produces_different_key(self):
        key1 = build_cache_key("thanjavur", "rice", 6, "v1")
        key2 = build_cache_key("thanjavur", "maize", 6, "v1")
        assert key1 != key2

    def test_different_month_produces_different_key(self):
        key1 = build_cache_key("thanjavur", "rice", 6, "v1")
        key2 = build_cache_key("thanjavur", "rice", 7, "v1")
        assert key1 != key2

    def test_different_model_version_produces_different_key(self):
        """Critical: a model retrain/redeploy must invalidate old cached
        results automatically, which only works if version is part of the key."""
        key1 = build_cache_key("thanjavur", "rice", 6, "v1")
        key2 = build_cache_key("thanjavur", "rice", 6, "v2")
        assert key1 != key2

    def test_key_has_expected_prefix(self):
        key = build_cache_key("thanjavur", "rice", 6, "v1")
        assert key.startswith("analysis:")
