1+ from pathlib import Path
2+
13from lsprotocol .types import Position
4+
5+ from sqlmesh import Config
26from sqlmesh .core .context import Context
37from sqlmesh .core .linter .helpers import read_range_from_file
48from sqlmesh .lsp .context import LSPContext , ModelTarget
59from sqlmesh .lsp .helpers import to_sqlmesh_range
610from sqlmesh .lsp .reference import get_references , LSPExternalModelReference
711from sqlmesh .lsp .uri import URI
12+ from tests .utils .test_filesystem import create_temp_file
813
914
1015def test_reference () -> None :
@@ -25,14 +30,38 @@ def test_reference() -> None:
2530 assert len (references ) == 1
2631 reference = references [0 ]
2732 assert isinstance (reference , LSPExternalModelReference )
28- assert reference .uri .endswith ("external_models.yaml" )
33+ uri = reference .uri
34+ assert uri is not None
35+ assert uri .endswith ("external_models.yaml" )
2936
3037 source_range = read_range_from_file (customers , to_sqlmesh_range (reference .range ))
3138 assert source_range == "raw.demographics"
3239
3340 if reference .target_range is None :
3441 raise AssertionError ("Reference target range should not be None" )
42+ uri = reference .uri
43+ assert uri is not None
3544 target_range = read_range_from_file (
36- URI (reference . uri ).to_path (), to_sqlmesh_range (reference .target_range )
45+ URI (uri ).to_path (), to_sqlmesh_range (reference .target_range )
3746 )
3847 assert target_range == "raw.demographics"
48+
49+ def test (tmp_path : Path ):
50+ model_path = tmp_path / "models" / "foo.sql"
51+ contents = "MODEL (name test.foo, kind FULL); SELECT * FROM external_model"
52+ create_temp_file (
53+ tmp_path , model_path , contents
54+ )
55+ ctx = Context (paths = [tmp_path ], config = Config ())
56+ lsp_context = LSPContext (ctx )
57+
58+ uri = URI .from_path (model_path )
59+ references = get_references (lsp_context , uri , Position (line = 0 , character = len (contents ) - 3 ))
60+
61+ assert len (references ) == 1
62+ reference = references [0 ]
63+ assert isinstance (reference , LSPExternalModelReference )
64+ assert reference .uri is None
65+ assert reference .target_range is None
66+ assert reference .markdown_description == "Unregistered external model"
67+ assert read_range_from_file (model_path , to_sqlmesh_range (reference .range )) == "external_model"
0 commit comments