fix(config): normalize cost currency display comparison
This commit is contained in:
@@ -1124,14 +1124,16 @@ impl ConfigView {
|
||||
}
|
||||
|
||||
fn row_display_value(&self, row: &ConfigRow) -> String {
|
||||
if row.key == "cost_currency"
|
||||
&& row.scope == ConfigScope::Saved
|
||||
&& row.value != self.effective_cost_currency
|
||||
{
|
||||
format!("{} (effective {})", row.value, self.effective_cost_currency)
|
||||
} else {
|
||||
row.value.clone()
|
||||
if row.key == "cost_currency" && row.scope == ConfigScope::Saved {
|
||||
let saved_cost_currency = crate::pricing::CostCurrency::from_setting(&row.value);
|
||||
let effective_cost_currency =
|
||||
crate::pricing::CostCurrency::from_setting(&self.effective_cost_currency);
|
||||
if saved_cost_currency != effective_cost_currency {
|
||||
return format!("{} (effective {})", row.value, self.effective_cost_currency);
|
||||
}
|
||||
}
|
||||
|
||||
row.value.clone()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2120,6 +2122,26 @@ mod tests {
|
||||
App::new(options, &Config::default())
|
||||
}
|
||||
|
||||
fn cost_currency_row_for_settings(
|
||||
settings_toml: &str,
|
||||
) -> (String, String, crate::pricing::CostCurrency, Locale) {
|
||||
let _guard = ConfigSettingsEnvGuard::new(settings_toml);
|
||||
let app = create_test_app();
|
||||
let view = ConfigView::new_for_app(&app);
|
||||
let row = view
|
||||
.rows
|
||||
.iter()
|
||||
.find(|row| row.key == "cost_currency")
|
||||
.expect("cost_currency row");
|
||||
|
||||
(
|
||||
row.value.clone(),
|
||||
view.row_display_value(row),
|
||||
app.cost_currency,
|
||||
app.ui_locale,
|
||||
)
|
||||
}
|
||||
|
||||
fn type_filter(view: &mut ConfigView, text: &str) {
|
||||
for ch in text.chars() {
|
||||
let action = view.handle_key(KeyEvent::new(KeyCode::Char(ch), KeyModifiers::NONE));
|
||||
@@ -2319,6 +2341,43 @@ mod tests {
|
||||
assert_eq!(Settings::load().expect("settings").cost_currency, "usd");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn config_view_cost_currency_aliases_matching_effective_currency_are_silent() {
|
||||
for alias in ["rmb", "yuan", "¥"] {
|
||||
let (saved_value, display_value, effective_currency, locale) =
|
||||
cost_currency_row_for_settings(&format!(
|
||||
"locale = \"zh-Hans\"\ncost_currency = \"{alias}\"\n"
|
||||
));
|
||||
|
||||
assert_eq!(locale, Locale::ZhHans);
|
||||
assert_eq!(effective_currency, crate::pricing::CostCurrency::Cny);
|
||||
assert_eq!(saved_value, alias);
|
||||
assert_eq!(display_value, alias);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn config_view_cost_currency_matching_cny_setting_is_silent() {
|
||||
let (saved_value, display_value, effective_currency, locale) =
|
||||
cost_currency_row_for_settings("locale = \"zh-Hans\"\ncost_currency = \"cny\"\n");
|
||||
|
||||
assert_eq!(locale, Locale::ZhHans);
|
||||
assert_eq!(effective_currency, crate::pricing::CostCurrency::Cny);
|
||||
assert_eq!(saved_value, "cny");
|
||||
assert_eq!(display_value, "cny");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn config_view_cost_currency_non_zh_hans_locale_uses_saved_currency() {
|
||||
let (saved_value, display_value, effective_currency, locale) =
|
||||
cost_currency_row_for_settings("locale = \"en\"\ncost_currency = \"cny\"\n");
|
||||
|
||||
assert_eq!(locale, Locale::En);
|
||||
assert_eq!(effective_currency, crate::pricing::CostCurrency::Cny);
|
||||
assert_eq!(saved_value, "cny");
|
||||
assert_eq!(display_value, "cny");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn config_view_exposes_all_available_saved_settings() {
|
||||
let app = create_test_app();
|
||||
|
||||
Reference in New Issue
Block a user