Add: Config for tool enable/disable, BETA warnings
Config system: - 10 env vars to enable/disable each tool - Disabled by default: get_deals_by_radius, get_street_deals, get_market_activity_metrics - Enabled by default: all other tools BETA warnings: - analyze_market_trends: added BETA notice - compare_addresses: added BETA notice Tests: - 17 tests skipped when tools disabled - All 311 tests pass 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,7 @@ import json
|
||||
|
||||
import pytest
|
||||
|
||||
from nadlan_mcp.config import get_config
|
||||
from nadlan_mcp.fastmcp_server import (
|
||||
autocomplete_address,
|
||||
find_recent_deals_for_address,
|
||||
@@ -40,6 +41,9 @@ class TestMCPToolsSmokeTests:
|
||||
|
||||
def test_get_street_deals_works(self):
|
||||
"""Smoke test: Can fetch street deals."""
|
||||
|
||||
if not get_config().tool_get_street_deals_enabled:
|
||||
pytest.skip("test_get_street_deals tool is disabled")
|
||||
# Use small limit for speed
|
||||
result = get_street_deals(self.TEST_POLYGON_ID, limit=5, deal_type=2)
|
||||
data = json.loads(result)
|
||||
@@ -50,6 +54,9 @@ class TestMCPToolsSmokeTests:
|
||||
|
||||
def test_get_deals_by_radius_works(self):
|
||||
"""Smoke test: Can fetch polygon metadata by radius."""
|
||||
|
||||
if not get_config().tool_get_deals_by_radius_enabled:
|
||||
pytest.skip("test_get_deals_by_radius tool is disabled")
|
||||
# Use small radius for speed
|
||||
result = get_deals_by_radius(self.TEST_LAT, self.TEST_LON, radius_meters=100)
|
||||
data = json.loads(result)
|
||||
|
||||
@@ -11,6 +11,7 @@ import json
|
||||
|
||||
import pytest
|
||||
|
||||
from nadlan_mcp.config import get_config
|
||||
from nadlan_mcp.fastmcp_server import (
|
||||
analyze_market_trends,
|
||||
autocomplete_address,
|
||||
@@ -132,6 +133,9 @@ class TestMCPToolsE2E:
|
||||
|
||||
def test_get_market_activity_metrics(self):
|
||||
"""Test market activity metrics."""
|
||||
|
||||
if not get_config().tool_get_market_activity_metrics_enabled:
|
||||
pytest.skip("test_get_market_activity tool is disabled")
|
||||
result = get_market_activity_metrics(self.TEST_ADDRESS_1, years_back=3)
|
||||
data = json.loads(result)
|
||||
|
||||
@@ -151,6 +155,9 @@ class TestMCPToolsE2E:
|
||||
|
||||
def test_get_street_deals(self):
|
||||
"""Test getting street-level deals."""
|
||||
|
||||
if not get_config().tool_get_street_deals_enabled:
|
||||
pytest.skip("test_get_street_deals tool is disabled")
|
||||
result = get_street_deals(self.TEST_POLYGON_ID, limit=100, deal_type=2)
|
||||
data = json.loads(result)
|
||||
|
||||
@@ -180,6 +187,9 @@ class TestMCPToolsE2E:
|
||||
|
||||
def test_get_deals_by_radius(self):
|
||||
"""Test getting polygon metadata by radius."""
|
||||
|
||||
if not get_config().tool_get_deals_by_radius_enabled:
|
||||
pytest.skip("test_get_deals_by_radius tool is disabled")
|
||||
result = get_deals_by_radius(self.TEST_LAT, self.TEST_LON, radius_meters=500)
|
||||
data = json.loads(result)
|
||||
|
||||
@@ -196,6 +206,9 @@ class TestMCPToolsE2E:
|
||||
|
||||
def test_get_deals_by_radius_no_results(self):
|
||||
"""Test get_deals_by_radius with coords that have no data."""
|
||||
if not get_config().tool_get_deals_by_radius_enabled:
|
||||
pytest.skip("test_get_deals_by_radius tool is disabled")
|
||||
|
||||
# Use coordinates unlikely to have data
|
||||
result = get_deals_by_radius(37.66, 38.71, radius_meters=10)
|
||||
|
||||
|
||||
@@ -10,7 +10,10 @@ Updated for Phase 4.1 - Pydantic models integration.
|
||||
import json
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
|
||||
from nadlan_mcp import fastmcp_server
|
||||
from nadlan_mcp.config import get_config
|
||||
from nadlan_mcp.govmap.models import (
|
||||
AutocompleteResponse,
|
||||
AutocompleteResult,
|
||||
@@ -127,6 +130,10 @@ class TestAutocompleteAddress:
|
||||
assert "API Error" in result
|
||||
|
||||
|
||||
@pytest.mark.skipif(
|
||||
not get_config().tool_get_deals_by_radius_enabled,
|
||||
reason="get_deals_by_radius tool is disabled",
|
||||
)
|
||||
class TestGetDealsByRadius:
|
||||
"""Test get_deals_by_radius MCP tool."""
|
||||
|
||||
@@ -433,6 +440,10 @@ class TestGetDealStatistics:
|
||||
assert parsed["market_statistics"]["deal_breakdown"]["total_deals"] == 2
|
||||
|
||||
|
||||
@pytest.mark.skipif(
|
||||
not get_config().tool_get_market_activity_metrics_enabled,
|
||||
reason="get_market_activity_metrics tool is disabled",
|
||||
)
|
||||
class TestGetMarketActivityMetrics:
|
||||
"""Test get_market_activity_metrics MCP tool."""
|
||||
|
||||
@@ -464,6 +475,9 @@ class TestGetMarketActivityMetrics:
|
||||
assert "investment_potential" in parsed
|
||||
|
||||
|
||||
@pytest.mark.skipif(
|
||||
not get_config().tool_get_street_deals_enabled, reason="get_street_deals tool is disabled"
|
||||
)
|
||||
class TestGetStreetDeals:
|
||||
"""Test get_street_deals MCP tool."""
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
|
||||
from nadlan_mcp.config import get_config
|
||||
from nadlan_mcp.fastmcp_server import (
|
||||
autocomplete_address,
|
||||
get_deals_by_radius,
|
||||
@@ -78,6 +79,9 @@ class TestMCPToolsFast:
|
||||
@patch("nadlan_mcp.fastmcp_server.client")
|
||||
def test_get_street_deals_fast(self, mock_client, mock_street_deals_data):
|
||||
"""Test street deals with cached data."""
|
||||
if not get_config().tool_get_street_deals_enabled:
|
||||
pytest.skip("get_street_deals tool is disabled")
|
||||
|
||||
mock_client.get_street_deals.return_value = mock_street_deals_data
|
||||
|
||||
result = get_street_deals("52385050", limit=100, deal_type=2)
|
||||
@@ -108,6 +112,9 @@ class TestMCPToolsFast:
|
||||
@patch("nadlan_mcp.fastmcp_server.client")
|
||||
def test_get_deals_by_radius_fast(self, mock_client, mock_polygon_metadata_data):
|
||||
"""Test deals by radius with cached data."""
|
||||
|
||||
if not get_config().tool_get_deals_by_radius_enabled:
|
||||
pytest.skip("test_get_deals_by_radius tool is disabled")
|
||||
mock_client.get_deals_by_radius.return_value = mock_polygon_metadata_data
|
||||
|
||||
result = get_deals_by_radius(37.6629, 38.7093, radius_meters=500)
|
||||
@@ -138,6 +145,9 @@ class TestMCPToolsFast:
|
||||
@patch("nadlan_mcp.fastmcp_server.client")
|
||||
def test_no_deals_found(self, mock_client):
|
||||
"""Test handling when no deals are found."""
|
||||
if not get_config().tool_get_street_deals_enabled:
|
||||
pytest.skip("get_street_deals tool is disabled")
|
||||
|
||||
mock_client.get_street_deals.return_value = []
|
||||
|
||||
result = get_street_deals("999999", limit=100, deal_type=2)
|
||||
@@ -149,6 +159,9 @@ class TestMCPToolsFast:
|
||||
@patch("nadlan_mcp.fastmcp_server.client")
|
||||
def test_deal_type_filtering(self, mock_client, mock_street_deals_data):
|
||||
"""Test that deal_type parameter is passed correctly."""
|
||||
if not get_config().tool_get_street_deals_enabled:
|
||||
pytest.skip("get_street_deals tool is disabled")
|
||||
|
||||
mock_client.get_street_deals.return_value = mock_street_deals_data
|
||||
|
||||
# Test with deal_type=1 (first hand)
|
||||
|
||||
Reference in New Issue
Block a user