first pass of merging in warp (doesn't build)
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
use chrono::Utc;
|
||||
|
||||
use super::{
|
||||
api_key_table_min_non_resizable_columns_width, compute_api_key_name_column_max_width,
|
||||
APIKeyProperties, ApiKeyScope, API_KEY_KEY_COLUMN_WIDTH, API_KEY_NAME_COLUMN_MIN_WIDTH,
|
||||
API_KEY_TABLE_LAYOUT_SAFETY_PADDING, API_KEY_TABLE_MIN_SCOPE_COLUMN_WIDTH,
|
||||
SETTINGS_PAGE_HORIZONTAL_PADDING, SETTINGS_PAGE_MAX_CONTENT_WIDTH,
|
||||
SETTINGS_SECTION_BORDER_WIDTH, SETTINGS_SIDEBAR_WIDTH_DEFAULT,
|
||||
};
|
||||
|
||||
fn table_width_chrome() -> f32 {
|
||||
SETTINGS_SIDEBAR_WIDTH_DEFAULT
|
||||
+ SETTINGS_SECTION_BORDER_WIDTH
|
||||
+ SETTINGS_PAGE_HORIZONTAL_PADDING
|
||||
+ API_KEY_TABLE_LAYOUT_SAFETY_PADDING
|
||||
}
|
||||
|
||||
fn assert_f32_eq(actual: f32, expected: f32) {
|
||||
assert!(
|
||||
(actual - expected).abs() < f32::EPSILON,
|
||||
"expected {expected}, got {actual}"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn key_column_width_is_fixed_and_narrow() {
|
||||
assert_f32_eq(API_KEY_KEY_COLUMN_WIDTH, 120.);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn name_column_max_width_reserves_non_resizable_columns_without_scope() {
|
||||
let min_non_resizable_columns_width = api_key_table_min_non_resizable_columns_width(false);
|
||||
let max_width = compute_api_key_name_column_max_width(
|
||||
2000.,
|
||||
API_KEY_NAME_COLUMN_MIN_WIDTH,
|
||||
min_non_resizable_columns_width,
|
||||
table_width_chrome(),
|
||||
);
|
||||
|
||||
let expected = SETTINGS_PAGE_MAX_CONTENT_WIDTH - min_non_resizable_columns_width;
|
||||
assert_f32_eq(max_width, expected);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn name_column_max_width_reserves_extra_scope_budget_when_scope_enabled() {
|
||||
let min_without_scope = api_key_table_min_non_resizable_columns_width(false);
|
||||
let min_with_scope = api_key_table_min_non_resizable_columns_width(true);
|
||||
assert_f32_eq(
|
||||
min_with_scope - min_without_scope,
|
||||
API_KEY_TABLE_MIN_SCOPE_COLUMN_WIDTH,
|
||||
);
|
||||
|
||||
let max_without_scope = compute_api_key_name_column_max_width(
|
||||
2000.,
|
||||
API_KEY_NAME_COLUMN_MIN_WIDTH,
|
||||
min_without_scope,
|
||||
table_width_chrome(),
|
||||
);
|
||||
let max_with_scope = compute_api_key_name_column_max_width(
|
||||
2000.,
|
||||
API_KEY_NAME_COLUMN_MIN_WIDTH,
|
||||
min_with_scope,
|
||||
table_width_chrome(),
|
||||
);
|
||||
assert_f32_eq(
|
||||
max_without_scope - max_with_scope,
|
||||
API_KEY_TABLE_MIN_SCOPE_COLUMN_WIDTH,
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn name_column_max_width_never_drops_below_min_width() {
|
||||
let max_width = compute_api_key_name_column_max_width(
|
||||
200.,
|
||||
API_KEY_NAME_COLUMN_MIN_WIDTH,
|
||||
api_key_table_min_non_resizable_columns_width(false),
|
||||
table_width_chrome(),
|
||||
);
|
||||
assert_f32_eq(max_width, API_KEY_NAME_COLUMN_MIN_WIDTH);
|
||||
}
|
||||
|
||||
fn test_api_key(name: &str, agent_name: Option<&str>) -> APIKeyProperties {
|
||||
APIKeyProperties {
|
||||
uid: "api-key-uid".to_string(),
|
||||
name: name.to_string(),
|
||||
key_suffix: "abcd".to_string(),
|
||||
scope: ApiKeyScope::Personal,
|
||||
agent_name: agent_name.map(str::to_string),
|
||||
created_at: Utc::now(),
|
||||
last_used_at: None,
|
||||
expires_at: None,
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn api_key_search_matches_key_name_case_insensitively() {
|
||||
let key = test_api_key("Production Deploy Key", None);
|
||||
|
||||
assert!(key.matches_search_query("deploy", false));
|
||||
assert!(key.matches_search_query("PRODUCTION", false));
|
||||
assert!(!key.matches_search_query("staging", false));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn api_key_search_matches_agent_name_only_when_enabled() {
|
||||
let key = test_api_key("Production Key", Some("Release Manager"));
|
||||
|
||||
assert!(key.matches_search_query("release", true));
|
||||
assert!(!key.matches_search_query("release", false));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn api_key_search_treats_empty_query_as_match() {
|
||||
let key = test_api_key("Production Key", Some("Release Manager"));
|
||||
|
||||
assert!(key.matches_search_query("", false));
|
||||
assert!(key.matches_search_query(" ", true));
|
||||
}
|
||||
Reference in New Issue
Block a user