@@ -143,12 +143,86 @@ mod tests {
143
143
let params = get_test_params ( & tree, & cache, case. get_input_query ( ) ) ;
144
144
let mut items = complete ( params) ;
145
145
146
- let _ = items. split_off ( 3 ) ;
146
+ let _ = items. split_off ( 6 ) ;
147
147
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) ;
149
201
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
+ } ;
151
210
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
+ ) ;
153
227
}
154
228
}
0 commit comments