import Foundation import Testing @testable import CodexBar @Suite(.serialized) struct SessionQuotaNotificationLogicTests { @Test func `does nothing without previous value`() { let transition = SessionQuotaNotificationLogic.transition(previousRemaining: nil, currentRemaining: 0) #expect(transition == .none) } @Test func `detects depleted transition`() { let transition = SessionQuotaNotificationLogic.transition(previousRemaining: 12, currentRemaining: 0) #expect(transition == .depleted) } @Test func `detects restored transition`() { let transition = SessionQuotaNotificationLogic.transition(previousRemaining: 0, currentRemaining: 5) #expect(transition == .restored) } @Test func `ignores non transitions`() { #expect(SessionQuotaNotificationLogic.transition(previousRemaining: 0, currentRemaining: 0) == .none) #expect(SessionQuotaNotificationLogic.transition(previousRemaining: 10, currentRemaining: 10) == .none) #expect(SessionQuotaNotificationLogic.transition(previousRemaining: 10, currentRemaining: 9) == .none) } @Test func `treats tiny positive remaining as depleted`() { let transition = SessionQuotaNotificationLogic.transition(previousRemaining: 0, currentRemaining: 0.00001) #expect(transition == .none) } @Test func `depleted notification copy follows Traditional Chinese app language`() { Self.withAppLanguage("zh-Hant") { let copy = SessionQuotaNotificationLogic.notificationCopy( transition: .depleted, providerName: "Codex") #expect(copy.title == "Codex 工作階段已用完") #expect(copy.body == "剩餘 0%。恢復可用時會再通知。") } } @Test func `restored notification copy follows Traditional Chinese app language`() { Self.withAppLanguage("zh-Hant") { let copy = SessionQuotaNotificationLogic.notificationCopy( transition: .restored, providerName: "Codex") #expect(copy.title == "Codex 工作階段已恢復") #expect(copy.body == "工作階段配額已恢復可用。") } } private static func withAppLanguage(_ language: String, perform body: () -> Void) { CodexBarLocalizationOverride.$appLanguage.withValue(language, operation: body) } }