Skip to main content
Glama
test_tool_get_lineage.py3.93 kB
""" Tests for toolImpl_get_lineage. """ from typing import TYPE_CHECKING if TYPE_CHECKING: from dbt_core_mcp.server import DbtCoreMcpServer async def test_get_lineage_model_both_directions(jaffle_shop_server: "DbtCoreMcpServer") -> None: """Test get_lineage for a model in both directions.""" result = await jaffle_shop_server.toolImpl_get_lineage("customers", "model", "both") assert result["resource"]["name"] == "customers" assert result["resource"]["resource_type"] == "model" assert "upstream" in result assert "downstream" in result assert "stats" in result # Customers model depends on stg_customers and stg_orders assert result["stats"]["upstream_count"] >= 2 async def test_get_lineage_upstream_only(jaffle_shop_server: "DbtCoreMcpServer") -> None: """Test get_lineage with upstream direction only.""" result = await jaffle_shop_server.toolImpl_get_lineage("customers", "model", "upstream") assert result["resource"]["name"] == "customers" assert "upstream" in result assert "downstream" not in result assert result["stats"]["upstream_count"] >= 2 assert result["stats"]["downstream_count"] == 0 async def test_get_lineage_downstream_only(jaffle_shop_server: "DbtCoreMcpServer") -> None: """Test get_lineage with downstream direction only.""" result = await jaffle_shop_server.toolImpl_get_lineage("stg_customers", "model", "downstream") assert result["resource"]["name"] == "stg_customers" assert "upstream" not in result assert "downstream" in result assert result["stats"]["downstream_count"] >= 1 # customers depends on stg_customers async def test_get_lineage_with_depth_limit(jaffle_shop_server: "DbtCoreMcpServer") -> None: """Test get_lineage with depth limit.""" result = await jaffle_shop_server.toolImpl_get_lineage("customers", "model", "upstream", depth=1) assert result["resource"]["name"] == "customers" assert "upstream" in result # With depth=1, should only get immediate parents for node in result["upstream"]: assert node["distance"] == 1 async def test_get_lineage_source(jaffle_shop_server: "DbtCoreMcpServer") -> None: """Test get_lineage for a source.""" result = await jaffle_shop_server.toolImpl_get_lineage("jaffle_shop.customers", "source", "downstream") assert result["resource"]["resource_type"] == "source" assert "downstream" in result async def test_get_lineage_auto_detect(jaffle_shop_server: "DbtCoreMcpServer") -> None: """Test get_lineage with auto-detection (no resource_type specified).""" result = await jaffle_shop_server.toolImpl_get_lineage("stg_customers") # Should find the model assert result["resource"]["name"] == "stg_customers" assert result["resource"]["resource_type"] == "model" async def test_get_lineage_multiple_matches(jaffle_shop_server: "DbtCoreMcpServer") -> None: """Test get_lineage when multiple resources match the name.""" # "customers" exists as both a model and a source result = await jaffle_shop_server.toolImpl_get_lineage("customers") # Should return multiple_matches structure assert result.get("multiple_matches") is True or result["resource"]["name"] == "customers" async def test_get_lineage_invalid_direction(jaffle_shop_server: "DbtCoreMcpServer") -> None: """Test get_lineage with invalid direction raises ValueError.""" import pytest with pytest.raises(ValueError, match="Invalid direction|Lineage error"): await jaffle_shop_server.toolImpl_get_lineage("customers", "model", "invalid") async def test_get_lineage_not_found(jaffle_shop_server: "DbtCoreMcpServer") -> None: """Test get_lineage with non-existent resource raises ValueError.""" import pytest with pytest.raises(ValueError, match="not found|Lineage error"): await jaffle_shop_server.toolImpl_get_lineage("nonexistent_model")

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/NiclasOlofsson/dbt-core-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server