Files
galaxy/app/src/settings_view/billing_and_usage_page_tests.rs
T

147 lines
5.3 KiB
Rust

use super::{sort_user_items_in_place, SortKey, SortOrder, UserSortingCriteria};
#[test]
pub fn test_default_sorting_pins_current_user_first_then_display_name_asc() {
let mut items = vec![
UserSortingCriteria::new("Zed".to_string(), 10, ()),
UserSortingCriteria::new("Alice".to_string(), 5, ()),
UserSortingCriteria::new("Bob".to_string(), 15, ()),
];
sort_user_items_in_place(&mut items, "Bob", None, SortOrder::Asc);
// Expected: Bob (current user) first, then Alice, then Zed (by display name asc)
assert_eq!(items[0].display_name, "Bob");
assert_eq!(items[1].display_name, "Alice");
assert_eq!(items[2].display_name, "Zed");
}
#[test]
fn test_display_name_az_sorting_pins_current_user() {
let mut items = vec![
UserSortingCriteria::new("Zed".to_string(), 10, ()),
UserSortingCriteria::new("Alice".to_string(), 5, ()),
UserSortingCriteria::new("Bob".to_string(), 15, ()),
UserSortingCriteria::new("charlie@example.com".to_string(), 8, ()), // Using email as display name fallback
];
sort_user_items_in_place(
&mut items,
"Bob",
Some(SortKey::DisplayName),
SortOrder::Asc,
);
// Expected: Bob (current user) first, then Alice, charlie@ (fallback to email), Zed
assert_eq!(items[0].display_name, "Bob");
assert_eq!(items[1].display_name, "Alice");
assert_eq!(items[2].display_name, "charlie@example.com"); // Email as display name fallback
assert_eq!(items[3].display_name, "Zed");
}
#[test]
fn test_display_name_za_sorting_pins_current_user() {
let mut items = vec![
UserSortingCriteria::new("Zed".to_string(), 10, ()),
UserSortingCriteria::new("Alice".to_string(), 5, ()),
UserSortingCriteria::new("Bob".to_string(), 15, ()),
];
sort_user_items_in_place(
&mut items,
"Alice",
Some(SortKey::DisplayName),
SortOrder::Desc,
);
// Expected: Alice (current user) first, then Zed, Bob (by name desc)
assert_eq!(items[0].display_name, "Alice");
assert_eq!(items[1].display_name, "Zed");
assert_eq!(items[2].display_name, "Bob");
}
#[test]
fn test_requests_usage_desc_sorting_pins_current_user_with_display_name_tie_breaker() {
let mut items = vec![
UserSortingCriteria::new("Alice".to_string(), 10, ()),
UserSortingCriteria::new("Bob".to_string(), 15, ()),
UserSortingCriteria::new("Charlie".to_string(), 10, ()), // Same usage as Alice
UserSortingCriteria::new("Diana".to_string(), 5, ()),
];
sort_user_items_in_place(
&mut items,
"Diana",
Some(SortKey::Requests),
SortOrder::Desc,
);
// Expected: Diana (current user) first, then Bob (15), then Alice/Charlie by name (10 tie)
assert_eq!(items[0].display_name, "Diana");
assert_eq!(items[1].display_name, "Bob"); // Highest usage (15)
assert_eq!(items[2].display_name, "Alice"); // Tied at 10, "Alice" < "Charlie"
assert_eq!(items[3].display_name, "Charlie");
}
#[test]
fn test_requests_usage_asc_sorting_pins_current_user_with_display_name_tie_breaker() {
let mut items = vec![
UserSortingCriteria::new("Alice".to_string(), 10, ()),
UserSortingCriteria::new("Bob".to_string(), 15, ()),
UserSortingCriteria::new("Charlie".to_string(), 10, ()), // Same usage as Alice
UserSortingCriteria::new("Diana".to_string(), 5, ()),
];
sort_user_items_in_place(&mut items, "Bob", Some(SortKey::Requests), SortOrder::Asc);
// Expected: Bob (current user) first, then Diana (5), then Alice/Charlie by name (10 tie)
assert_eq!(items[0].display_name, "Bob");
assert_eq!(items[1].display_name, "Diana"); // Lowest usage (5)
assert_eq!(items[2].display_name, "Alice"); // Tied at 10, "Alice" < "Charlie"
assert_eq!(items[3].display_name, "Charlie");
}
#[test]
fn test_display_name_az_sorting_with_emails() {
let mut items = vec![
UserSortingCriteria::new("zuser@example.com".to_string(), 10, ()),
UserSortingCriteria::new("Alice".to_string(), 5, ()),
UserSortingCriteria::new("buser@example.com".to_string(), 15, ()),
];
sort_user_items_in_place(
&mut items,
"Alice",
Some(SortKey::DisplayName),
SortOrder::Asc,
);
// Expected: Alice (current user) first, then buser@... < zuser@... (by email fallback)
assert_eq!(items[0].display_name, "Alice");
assert_eq!(items[1].display_name, "buser@example.com"); // Email as display name
assert_eq!(items[2].display_name, "zuser@example.com"); // Email as display name
}
#[test]
fn test_case_insensitive_display_name_sorting() {
let mut items = vec![
UserSortingCriteria::new("alice".to_string(), 10, ()),
UserSortingCriteria::new("Bob".to_string(), 5, ()),
UserSortingCriteria::new("CHARLIE".to_string(), 8, ()),
UserSortingCriteria::new("Diana".to_string(), 12, ()),
];
sort_user_items_in_place(
&mut items,
"Diana",
Some(SortKey::DisplayName),
SortOrder::Asc,
);
// Expected: Diana (current user) first, then alice, Bob, CHARLIE (case-insensitive asc)
assert_eq!(items[0].display_name, "Diana");
assert_eq!(items[1].display_name, "alice"); // "alice" (lowercase)
assert_eq!(items[2].display_name, "Bob"); // "Bob"
assert_eq!(items[3].display_name, "CHARLIE"); // "CHARLIE"
}