@@ -30,8 +30,8 @@ def test_find_references_for_model_usages():
3030 # Click on the model reference
3131 position = Position (line = ranges [0 ].start .line , character = ranges [0 ].start .character + 6 )
3232 references = get_model_find_all_references (lsp_context , URI .from_path (customers_path ), position )
33- assert len (references ) >= 6 , (
34- f"Expected at least 6 references to sushi.orders, found { len (references )} "
33+ assert len (references ) >= 7 , (
34+ f"Expected at least 7 references to sushi.orders (including column prefix) , found { len (references )} "
3535 )
3636
3737 # Verify expected files are present
@@ -50,44 +50,62 @@ def test_find_references_for_model_usages():
5050 )
5151
5252 # Verify exact ranges for each reference pattern
53+ # Note: customers file has multiple references due to column prefix support
5354 expected_ranges = {
54- "orders" : (0 , 0 , 0 , 0 ), # the start for the model itself
55- "customers" : (30 , 7 , 30 , 19 ),
56- "waiter_revenue_by_day" : (19 , 5 , 19 , 17 ),
57- "customer_revenue_lifetime" : (38 , 7 , 38 , 19 ),
58- "customer_revenue_by_day" : (33 , 5 , 33 , 17 ),
59- "latest_order" : (12 , 5 , 12 , 17 ),
55+ "orders" : [ (0 , 0 , 0 , 0 )] , # the start for the model itself
56+ "customers" : [ (30 , 7 , 30 , 19 ), ( 44 , 6 , 44 , 18 )], # FROM clause and WHERE clause
57+ "waiter_revenue_by_day" : [ (19 , 5 , 19 , 17 )] ,
58+ "customer_revenue_lifetime" : [ (38 , 7 , 38 , 19 )] ,
59+ "customer_revenue_by_day" : [ (33 , 5 , 33 , 17 )] ,
60+ "latest_order" : [ (12 , 5 , 12 , 17 )] ,
6061 }
6162
63+ # Group references by file pattern
64+ refs_by_pattern = {}
6265 for ref in references :
6366 matched_pattern = None
6467 for pattern in expected_patterns :
6568 if pattern in ref .uri :
6669 matched_pattern = pattern
6770 break
6871
69- assert matched_pattern is not None , (
70- f"Reference URI { ref .uri } doesn't match any expected pattern"
71- )
72+ if matched_pattern :
73+ if matched_pattern not in refs_by_pattern :
74+ refs_by_pattern [matched_pattern ] = []
75+ refs_by_pattern [matched_pattern ].append (ref )
7276
73- # Get expected range for this model
74- expected_start_line , expected_start_char , expected_end_line , expected_end_char = (
75- expected_ranges [matched_pattern ]
76- )
77+ # Verify each pattern has the expected references
78+ for pattern , expected_range_list in expected_ranges .items ():
79+ assert pattern in refs_by_pattern , f"Missing references for pattern '{ pattern } '"
7780
78- # Assert exact range match
79- assert ref .range .start .line == expected_start_line , (
80- f"Expected { matched_pattern } reference start line { expected_start_line } , found { ref .range .start .line } "
81- )
82- assert ref .range .start .character == expected_start_char , (
83- f"Expected { matched_pattern } reference start character { expected_start_char } , found { ref .range .start .character } "
81+ actual_refs = refs_by_pattern [pattern ]
82+ assert len (actual_refs ) == len (expected_range_list ), (
83+ f"Expected { len (expected_range_list )} references for { pattern } , found { len (actual_refs )} "
8484 )
85- assert ref .range .end .line == expected_end_line , (
86- f"Expected { matched_pattern } reference end line { expected_end_line } , found { ref .range .end .line } "
87- )
88- assert ref .range .end .character == expected_end_char , (
89- f"Expected { matched_pattern } reference end character { expected_end_char } , found { ref .range .end .character } "
85+
86+ # Sort both actual and expected by line number for consistent comparison
87+ actual_refs_sorted = sorted (
88+ actual_refs , key = lambda r : (r .range .start .line , r .range .start .character )
9089 )
90+ expected_sorted = sorted (expected_range_list , key = lambda r : (r [0 ], r [1 ]))
91+
92+ for i , (ref , expected_range ) in enumerate (zip (actual_refs_sorted , expected_sorted )):
93+ expected_start_line , expected_start_char , expected_end_line , expected_end_char = (
94+ expected_range
95+ )
96+
97+ assert ref .range .start .line == expected_start_line , (
98+ f"Expected { pattern } reference #{ i + 1 } start line { expected_start_line } , found { ref .range .start .line } "
99+ )
100+ assert ref .range .start .character == expected_start_char , (
101+ f"Expected { pattern } reference #{ i + 1 } start character { expected_start_char } , found { ref .range .start .character } "
102+ )
103+ assert ref .range .end .line == expected_end_line , (
104+ f"Expected { pattern } reference #{ i + 1 } end line { expected_end_line } , found { ref .range .end .line } "
105+ )
106+ assert ref .range .end .character == expected_end_char , (
107+ f"Expected { pattern } reference #{ i + 1 } end character { expected_end_char } , found { ref .range .end .character } "
108+ )
91109
92110
93111def test_find_references_for_marketing_model ():
0 commit comments