|
1 | 1 | """Tests for link resolution service.""" |
2 | 2 |
|
| 3 | +import uuid |
3 | 4 | from datetime import datetime, timezone |
4 | 5 |
|
5 | 6 | import pytest |
@@ -857,3 +858,44 @@ async def test_simple_link_no_slash_skips_relative_resolution(relative_path_reso |
857 | 858 | # testing/nested/ is not the same folder as testing/, but it's closer than nested/ |
858 | 859 | # The context-aware resolution will pick the closest match |
859 | 860 | assert result.file_path == "testing/nested/deep-note.md" |
| 861 | + |
| 862 | + |
| 863 | +# ============================================================================ |
| 864 | +# External ID (UUID) resolution tests |
| 865 | +# ============================================================================ |
| 866 | + |
| 867 | + |
| 868 | +@pytest.mark.asyncio |
| 869 | +async def test_resolve_link_by_external_id(link_resolver, test_entities): |
| 870 | + """Test resolving a link using a valid external_id (UUID).""" |
| 871 | + entity = test_entities[0] |
| 872 | + result = await link_resolver.resolve_link(entity.external_id) |
| 873 | + assert result is not None |
| 874 | + assert result.id == entity.id |
| 875 | + assert result.external_id == entity.external_id |
| 876 | + |
| 877 | + |
| 878 | +@pytest.mark.asyncio |
| 879 | +async def test_resolve_link_by_external_id_uppercase(link_resolver, test_entities): |
| 880 | + """Test that uppercase UUID is canonicalized and resolves correctly.""" |
| 881 | + entity = test_entities[0] |
| 882 | + upper_id = entity.external_id.upper() |
| 883 | + result = await link_resolver.resolve_link(upper_id) |
| 884 | + assert result is not None |
| 885 | + assert result.id == entity.id |
| 886 | + |
| 887 | + |
| 888 | +@pytest.mark.asyncio |
| 889 | +async def test_resolve_link_by_external_id_nonexistent(link_resolver): |
| 890 | + """Test that a valid UUID format that doesn't match any entity returns None.""" |
| 891 | + fake_id = str(uuid.uuid4()) |
| 892 | + result = await link_resolver.resolve_link(fake_id) |
| 893 | + assert result is None |
| 894 | + |
| 895 | + |
| 896 | +@pytest.mark.asyncio |
| 897 | +async def test_resolve_link_non_uuid_falls_through(link_resolver, test_entities, project_prefix): |
| 898 | + """Test that non-UUID strings skip UUID resolution and use normal lookup.""" |
| 899 | + result = await link_resolver.resolve_link("Core Service") |
| 900 | + assert result is not None |
| 901 | + assert result.permalink == f"{project_prefix}/components/core-service" |
0 commit comments