diff --git a/Sources/CodexBar/PreferencesGeneralPane.swift b/Sources/CodexBar/PreferencesGeneralPane.swift index d8750a5c1f..8f9eb75f6a 100644 --- a/Sources/CodexBar/PreferencesGeneralPane.swift +++ b/Sources/CodexBar/PreferencesGeneralPane.swift @@ -80,6 +80,7 @@ enum PreferredCurrencyOption: String, CaseIterable, Identifiable { case usd = "USD" case gbp = "GBP" case eur = "EUR" + case czk = "CZK" case cny = "CNY" case jpy = "JPY" case krw = "KRW" @@ -100,6 +101,7 @@ enum PreferredCurrencyOption: String, CaseIterable, Identifiable { case .usd: "USD ($)" case .gbp: "GBP (£)" case .eur: "EUR (€)" + case .czk: "CZK (Kč)" case .cny: "CNY (¥)" case .jpy: "JPY (¥)" case .krw: "KRW (₩)" diff --git a/Sources/CodexBarCore/CurrencyExchange.swift b/Sources/CodexBarCore/CurrencyExchange.swift index bf8b96d9a2..a03f8ff218 100644 --- a/Sources/CodexBarCore/CurrencyExchange.swift +++ b/Sources/CodexBarCore/CurrencyExchange.swift @@ -15,7 +15,7 @@ public final class CurrencyExchange: @unchecked Sendable { /// All currency codes supported by the converter. public static let supportedCurrencies: [String] = [ - "USD", "GBP", "EUR", "CNY", "JPY", "KRW", "CAD", "AUD", "HKD", "TWD", "SGD", "INR", + "USD", "GBP", "EUR", "CZK", "CNY", "JPY", "KRW", "CAD", "AUD", "HKD", "TWD", "SGD", "INR", ] private let lock = NSLock() @@ -25,6 +25,7 @@ public final class CurrencyExchange: @unchecked Sendable { "USD": 1.0, "GBP": 0.79, "EUR": 0.92, + "CZK": 21.0, "CNY": 7.27, "JPY": 154.0, "KRW": 1428.90, diff --git a/Tests/CodexBarTests/UsageFormatterTests.swift b/Tests/CodexBarTests/UsageFormatterTests.swift index b68b64ac57..bf7792d7dc 100644 --- a/Tests/CodexBarTests/UsageFormatterTests.swift +++ b/Tests/CodexBarTests/UsageFormatterTests.swift @@ -517,6 +517,12 @@ struct UsageFormatterTests { #expect(explicitKRW.contains("₩")) #expect(!explicitKRW.contains(".")) + let czkRate = exchange.rate(for: "CZK") ?? 21.0 + #expect(abs((exchange.convert(usdAmount: 10.0, to: "CZK") ?? 0) - 10.0 * czkRate) < epsilon) + let explicitCZK = UsageFormatter.convertedCostString(10.0, preferredCurrency: "CZK", providerCurrency: "USD") + #expect(explicitCZK.contains("CZK")) + #expect(explicitCZK.contains(".")) + #expect(exchange.convert(amount: 10.0, from: "CHF", to: "USD") == nil) let unavailable = UsageFormatter.convertedCostString( 10.0, @@ -535,6 +541,7 @@ struct UsageFormatterTests { #expect(CurrencyExchange.requiresLiveRates(preferredCurrencyCode: "GBP")) #expect(CurrencyExchange.requiresLiveRates(preferredCurrencyCode: " eur ")) #expect(CurrencyExchange.requiresLiveRates(preferredCurrencyCode: "KRW")) + #expect(CurrencyExchange.requiresLiveRates(preferredCurrencyCode: "CZK")) } @Test