Files
steipete--codexbar/Tests/CodexBarTests/SessionQuotaNotificationLogicTests.swift
2026-07-13 12:22:33 +08:00

66 lines
2.4 KiB
Swift

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)
}
}