@@ -143,12 +143,86 @@ mod tests {
143143 let params = get_test_params ( & tree, & cache, case. get_input_query ( ) ) ;
144144 let mut items = complete ( params) ;
145145
146- let _ = items. split_off ( 3 ) ;
146+ let _ = items. split_off ( 6 ) ;
147147
148- items. sort_by ( |a, b| a. label . cmp ( & b. label ) ) ;
148+ #[ derive( Eq , PartialEq , Debug ) ]
149+ struct LabelAndDesc {
150+ label : String ,
151+ desc : String ,
152+ }
153+
154+ let labels: Vec < LabelAndDesc > = items
155+ . into_iter ( )
156+ . map ( |c| LabelAndDesc {
157+ label : c. label ,
158+ desc : c. description ,
159+ } )
160+ . collect ( ) ;
161+
162+ let expected = vec ! [
163+ ( "name" , "Table: public.users" ) ,
164+ ( "narrator" , "Table: public.audio_books" ) ,
165+ ( "narrator_id" , "Table: private.audio_books" ) ,
166+ ( "name" , "Schema: pg_catalog" ) ,
167+ ( "nameconcatoid" , "Schema: pg_catalog" ) ,
168+ ( "nameeq" , "Schema: pg_catalog" ) ,
169+ ]
170+ . into_iter ( )
171+ . map ( |( label, schema) | LabelAndDesc {
172+ label : label. into ( ) ,
173+ desc : schema. into ( ) ,
174+ } )
175+ . collect :: < Vec < LabelAndDesc > > ( ) ;
176+
177+ assert_eq ! ( labels, expected) ;
178+ }
179+
180+ #[ tokio:: test]
181+ async fn suggests_relevant_columns_without_letters ( ) {
182+ let setup = r#"
183+ create table users (
184+ id serial primary key,
185+ name text,
186+ address text,
187+ email text
188+ );
189+ "# ;
190+
191+ let test_case = TestCase {
192+ message : "suggests user created tables first" ,
193+ query : format ! ( r#"select {} from users"# , CURSOR_POS ) ,
194+ label : "" ,
195+ description : "" ,
196+ } ;
197+
198+ let ( tree, cache) = get_test_deps ( setup, test_case. get_input_query ( ) ) . await ;
199+ let params = get_test_params ( & tree, & cache, test_case. get_input_query ( ) ) ;
200+ let results = complete ( params) ;
149201
150- let labels: Vec < String > = items. into_iter ( ) . map ( |c| c. label ) . collect ( ) ;
202+ let ( first_four, _rest) = results. split_at ( 4 ) ;
203+
204+ let has_column_in_first_four = |col : & ' static str | {
205+ first_four
206+ . iter ( )
207+ . find ( |compl_item| compl_item. label . as_str ( ) == col)
208+ . is_some ( )
209+ } ;
151210
152- assert_eq ! ( labels, vec![ "name" , "narrator" , "narrator_id" ] ) ;
211+ assert ! (
212+ has_column_in_first_four( "id" ) ,
213+ "`id` not present in first four completion items."
214+ ) ;
215+ assert ! (
216+ has_column_in_first_four( "name" ) ,
217+ "`name` not present in first four completion items."
218+ ) ;
219+ assert ! (
220+ has_column_in_first_four( "address" ) ,
221+ "`address` not present in first four completion items."
222+ ) ;
223+ assert ! (
224+ has_column_in_first_four( "email" ) ,
225+ "`email` not present in first four completion items."
226+ ) ;
153227 }
154228}
0 commit comments