fix(config): normalize cost currency display comparison

This commit is contained in:
LING71671
2026-05-27 23:34:05 +08:00
parent df63a18a26
commit ab192fe69c
+66 -7
View File
@@ -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();