Skip to content

Commit fa8a72a

Browse files
committed
Bug 1966719 - Search Engine Selector should order by name rather than identifier.
1 parent 2407f72 commit fa8a72a

File tree

3 files changed

+43
-31
lines changed

3 files changed

+43
-31
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@
2424

2525
- Fixed setting a new app context with `RemoteSettingsService::update_config`
2626

27+
### Search
28+
29+
- The `SearchEngineSelector::filter_engine_configuration` will now sort any
30+
unordered engines by name rather than identifier.
31+
2732
## 🦊 What's Changed 🦊
2833

2934
### Glean

components/search/src/selector.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1592,7 +1592,7 @@ mod tests {
15921592
"recordType": "engine",
15931593
"identifier": "b-engine",
15941594
"base": {
1595-
"name": "b-engine",
1595+
"name": "First Alphabetical",
15961596
"classification": "general",
15971597
"urls": {
15981598
"search": {
@@ -1611,7 +1611,7 @@ mod tests {
16111611
"recordType": "engine",
16121612
"identifier": "a-engine",
16131613
"base": {
1614-
"name": "a-engine",
1614+
"name": "Last Alphabetical",
16151615
"classification": "general",
16161616
"urls": {
16171617
"search": {
@@ -1731,10 +1731,10 @@ mod tests {
17311731
"default-engine".to_string(),
17321732
"default-private-engine".to_string(),
17331733
"after-defaults".to_string(),
1734-
"a-engine".to_string(),
17351734
"b-engine".to_string(),
1735+
"a-engine".to_string(),
17361736
],
1737-
"Should order the default engine first, default private engine second, and the rest of the engines based on order hint then alphabetically."
1737+
"Should order the default engine first, default private engine second, and the rest of the engines based on order hint then alphabetically by name."
17381738
);
17391739

17401740
let starts_with_wiki_config = Arc::clone(&selector).set_search_config(

components/search/src/sort_helpers.rs

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ pub(crate) fn sort(
3232
// See Bug 1945295: https://bugzilla.mozilla.org/show_bug.cgi?id=1945295
3333
// If order is equal and order_hint is None for both, fall back to alphabetical sorting
3434
if order == std::cmp::Ordering::Equal {
35-
return a.identifier.cmp(&b.identifier);
35+
return a.name.cmp(&b.name);
3636
}
3737

3838
order
@@ -76,9 +76,14 @@ mod tests {
7676
use crate::types::*;
7777
use pretty_assertions::assert_eq;
7878

79-
fn create_engine(engine_id: &str, order_hint: Option<u32>) -> SearchEngineDefinition {
79+
fn create_engine(
80+
engine_id: &str,
81+
order_hint: Option<u32>,
82+
name: Option<&str>,
83+
) -> SearchEngineDefinition {
8084
SearchEngineDefinition {
8185
identifier: engine_id.to_string(),
86+
name: name.unwrap_or(engine_id).to_string(),
8287
order_hint,
8388
..Default::default()
8489
}
@@ -87,9 +92,9 @@ mod tests {
8792
#[test]
8893
fn test_find_engine_with_match_mut_starts_with() {
8994
let mut engines = vec![
90-
create_engine("wiki-ca", None),
91-
create_engine("wiki-uk", None),
92-
create_engine("test-engine", None),
95+
create_engine("wiki-ca", None, None),
96+
create_engine("wiki-uk", None, None),
97+
create_engine("test-engine", None, None),
9398
];
9499
let found_engine = find_engine_with_match_mut(&mut engines, &"wiki*".to_string());
95100

@@ -103,9 +108,9 @@ mod tests {
103108
#[test]
104109
fn test_set_engine_order_full_list() {
105110
let mut engines = vec![
106-
create_engine("last-engine", None),
107-
create_engine("secondary-engine", None),
108-
create_engine("primary-engine", None),
111+
create_engine("last-engine", None, None),
112+
create_engine("secondary-engine", None, None),
113+
create_engine("primary-engine", None, None),
109114
];
110115
let ordered_engines_list = vec![
111116
"primary-engine".to_string(),
@@ -133,9 +138,9 @@ mod tests {
133138
#[test]
134139
fn test_set_engine_order_partial_list() {
135140
let mut engines = vec![
136-
create_engine("secondary-engine", None),
137-
create_engine("primary-engine", None),
138-
create_engine("no-order-hint-engine", None),
141+
create_engine("secondary-engine", None, None),
142+
create_engine("primary-engine", None, None),
143+
create_engine("no-order-hint-engine", None, None),
139144
];
140145
let ordered_engines_list =
141146
vec!["primary-engine".to_string(), "secondary-engine".to_string()];
@@ -161,9 +166,9 @@ mod tests {
161166
let default_engine_id = None;
162167
let default_private_engine_id = None;
163168
let mut engines = vec![
164-
create_engine("c-engine", Some(3)),
165-
create_engine("b-engine", Some(2)),
166-
create_engine("a-engine", Some(1)),
169+
create_engine("c-engine", Some(3), None),
170+
create_engine("b-engine", Some(2), None),
171+
create_engine("a-engine", Some(1), None),
167172
];
168173
engines.sort_by(|a, b| {
169174
sort(
@@ -187,9 +192,9 @@ mod tests {
187192
let default_engine_id = None;
188193
let default_private_engine_id = None;
189194
let mut engines = vec![
190-
create_engine("c-engine", None),
191-
create_engine("b-engine", None),
192-
create_engine("a-engine", None),
195+
create_engine("c-engine", None, None),
196+
create_engine("b-engine", None, None),
197+
create_engine("a-engine", None, None),
193198
];
194199
engines.sort_by(|a, b| {
195200
sort(
@@ -213,12 +218,14 @@ mod tests {
213218
let default_engine_id = None;
214219
let default_private_engine_id = None;
215220
let mut engines = vec![
216-
create_engine("f-engine", None),
217-
create_engine("e-engine", None),
218-
create_engine("d-engine", None),
219-
create_engine("c-engine", Some(4)),
220-
create_engine("b-engine", Some(5)),
221-
create_engine("a-engine", Some(6)),
221+
// Identifiers are the opposite order to the names, so that we
222+
// can show that we are sorting alphabetically by name.
223+
create_engine("d-engine", None, Some("Charlie")),
224+
create_engine("e-engine", None, Some("Beta")),
225+
create_engine("f-engine", None, Some("Alpha")),
226+
create_engine("c-engine", Some(4), None),
227+
create_engine("b-engine", Some(5), None),
228+
create_engine("a-engine", Some(6), None),
222229
];
223230
engines.sort_by(|a, b| {
224231
sort(
@@ -231,7 +238,7 @@ mod tests {
231238

232239
let actual_order: Vec<&str> = engines.iter().map(|e| e.identifier.as_str()).collect();
233240
let expected_order = vec![
234-
"a-engine", "b-engine", "c-engine", "d-engine", "e-engine", "f-engine",
241+
"a-engine", "b-engine", "c-engine", "f-engine", "e-engine", "d-engine",
235242
];
236243
assert_eq!(
237244
actual_order, expected_order,
@@ -244,9 +251,9 @@ mod tests {
244251
let default_engine_id = Some("a-engine".to_string());
245252
let default_private_engine_id = Some("b-engine".to_string());
246253
let mut engines = vec![
247-
create_engine("c-engine", Some(3)),
248-
create_engine("a-engine", Some(1)), // Default engine should be first
249-
create_engine("b-engine", Some(2)), // Default private engine should be second
254+
create_engine("c-engine", Some(3), None),
255+
create_engine("a-engine", Some(1), None), // Default engine should be first
256+
create_engine("b-engine", Some(2), None), // Default private engine should be second
250257
];
251258
engines.sort_by(|a, b| {
252259
sort(

0 commit comments

Comments
 (0)