@@ -168,6 +168,72 @@ fn exact_match_first_on_queries() {
168
168
assert_eq ! ( json. crates[ 2 ] . name, "foo" ) ;
169
169
}
170
170
171
+ #[ test]
172
+ fn exact_match_on_queries_with_sort ( ) {
173
+ let ( _b, app, middle) = :: app ( ) ;
174
+
175
+ let mut req = :: req ( app, Method :: Get , "/api/v1/crates" ) ;
176
+ let _ = :: mock_user ( & mut req, :: user ( "foo" ) ) ;
177
+ let mut krate = :: krate ( "foo" ) ;
178
+ krate. description = Some ( "bar baz const" . to_string ( ) ) ;
179
+ krate. downloads = 50 ;
180
+ let ( k, _) = :: mock_crate ( & mut req, krate. clone ( ) ) ;
181
+ let mut krate2 = :: krate ( "bar" ) ;
182
+ krate2. description = Some ( "foo baz foo baz const" . to_string ( ) ) ;
183
+ krate2. downloads = 3333 ;
184
+ let ( k2, _) = :: mock_crate ( & mut req, krate2. clone ( ) ) ;
185
+ let mut krate3 = :: krate ( "baz" ) ;
186
+ krate3. description = Some ( "foo bar foo bar foo bar const" . to_string ( ) ) ;
187
+ krate3. downloads = 100000 ;
188
+ let ( k3, _) = :: mock_crate ( & mut req, krate3. clone ( ) ) ;
189
+ let mut krate4 = :: krate ( "other" ) ;
190
+ krate4. description = Some ( "other const" . to_string ( ) ) ;
191
+ krate4. downloads = 999999 ;
192
+ let ( k4, _) = :: mock_crate ( & mut req, krate4. clone ( ) ) ;
193
+
194
+ {
195
+ let req2: & mut Request = & mut req;
196
+ let tx = req2. tx ( ) . unwrap ( ) ;
197
+ tx. execute ( "UPDATE crates set downloads = $1
198
+ WHERE id = $2" , & [ & krate. downloads , & k. id ] ) . unwrap ( ) ;
199
+ tx. execute ( "UPDATE crates set downloads = $1
200
+ WHERE id = $2" , & [ & krate2. downloads , & k2. id ] ) . unwrap ( ) ;
201
+ tx. execute ( "UPDATE crates set downloads = $1
202
+ WHERE id = $2" , & [ & krate3. downloads , & k3. id ] ) . unwrap ( ) ;
203
+ tx. execute ( "UPDATE crates set downloads = $1
204
+ WHERE id = $2" , & [ & krate4. downloads , & k4. id ] ) . unwrap ( ) ;
205
+ }
206
+
207
+ let mut response = ok_resp ! ( middle. call( req. with_query( "q=foo&sort=downloads" ) ) ) ;
208
+ let json: CrateList = :: json ( & mut response) ;
209
+ assert_eq ! ( json. meta. total, 3 ) ;
210
+ assert_eq ! ( json. crates[ 0 ] . name, "foo" ) ;
211
+ assert_eq ! ( json. crates[ 1 ] . name, "baz" ) ;
212
+ assert_eq ! ( json. crates[ 2 ] . name, "bar" ) ;
213
+
214
+ let mut response = ok_resp ! ( middle. call( req. with_query( "q=bar&sort=downloads" ) ) ) ;
215
+ let json: CrateList = :: json ( & mut response) ;
216
+ assert_eq ! ( json. meta. total, 3 ) ;
217
+ assert_eq ! ( json. crates[ 0 ] . name, "bar" ) ;
218
+ assert_eq ! ( json. crates[ 1 ] . name, "baz" ) ;
219
+ assert_eq ! ( json. crates[ 2 ] . name, "foo" ) ;
220
+
221
+ let mut response = ok_resp ! ( middle. call( req. with_query( "q=baz&sort=downloads" ) ) ) ;
222
+ let json: CrateList = :: json ( & mut response) ;
223
+ assert_eq ! ( json. meta. total, 3 ) ;
224
+ assert_eq ! ( json. crates[ 0 ] . name, "baz" ) ;
225
+ assert_eq ! ( json. crates[ 1 ] . name, "bar" ) ;
226
+ assert_eq ! ( json. crates[ 2 ] . name, "foo" ) ;
227
+
228
+ let mut response = ok_resp ! ( middle. call( req. with_query( "q=const&sort=downloads" ) ) ) ;
229
+ let json: CrateList = :: json ( & mut response) ;
230
+ assert_eq ! ( json. meta. total, 4 ) ;
231
+ assert_eq ! ( json. crates[ 0 ] . name, "other" ) ;
232
+ assert_eq ! ( json. crates[ 1 ] . name, "baz" ) ;
233
+ assert_eq ! ( json. crates[ 2 ] . name, "bar" ) ;
234
+ assert_eq ! ( json. crates[ 3 ] . name, "foo" ) ;
235
+ }
236
+
171
237
#[ test]
172
238
fn show ( ) {
173
239
let ( _b, app, middle) = :: app ( ) ;
0 commit comments