73 lines
2.3 KiB
Swift
73 lines
2.3 KiB
Swift
import Testing
|
|
@testable import CodexBarCore
|
|
|
|
struct ProviderPlanLineParsingTests {
|
|
@Test
|
|
func `Claude plan matching does not bridge usage lines`() {
|
|
let usageText = """
|
|
Skills, subagents, plugins, and MCP servers
|
|
Noattributiondatayet·accumulatesasyouuseClaude
|
|
|
|
dtoday·wtoweek
|
|
|
|
Usagecredits
|
|
Usagecreditsareoff·/usage-creditstoturnthemon
|
|
"""
|
|
|
|
let identity = ClaudeStatusProbe.parseIdentity(usageText: usageText, statusText: nil)
|
|
|
|
#expect(identity.loginMethod == nil)
|
|
}
|
|
|
|
@Test
|
|
func `Claude plan matching keeps single line phrases`() {
|
|
let identity = ClaudeStatusProbe.parseIdentity(
|
|
usageText: nil,
|
|
statusText: "Sonnet 4.6 · Claude Max · you@example.com")
|
|
|
|
#expect(identity.loginMethod == "Max")
|
|
}
|
|
|
|
@Test
|
|
func `Kiro legacy plan matching does not bridge lines`() throws {
|
|
let output = """
|
|
|
|
|
KIRO FREE
|
|
████████████████████████████████████████████████████ 25%
|
|
(12.50 of 50 covered in plan), resets on 01/15
|
|
"""
|
|
|
|
let snapshot = try KiroStatusProbe().parse(output: output)
|
|
|
|
#expect(snapshot.planName == "Kiro")
|
|
}
|
|
|
|
@Test
|
|
func `Kiro estimated usage plan matching does not bridge lines`() throws {
|
|
let output = """
|
|
Estimated Usage | resets on 2026-06-01 |
|
|
KIRO FREE
|
|
████████████████████████████████████████████████████ 25%
|
|
(12.50 of 50 covered in plan), resets on 01/15
|
|
"""
|
|
|
|
let snapshot = try KiroStatusProbe().parse(output: output)
|
|
|
|
#expect(snapshot.planName == "Kiro")
|
|
}
|
|
|
|
@Test
|
|
func `Kiro labeled plan matching does not bridge lines`() throws {
|
|
let output = """
|
|
Plan:
|
|
Q Developer Pro
|
|
████████████████████████████████████████████████████ 25%
|
|
(12.50 of 50 covered in plan), resets on 01/15
|
|
"""
|
|
|
|
let snapshot = try KiroStatusProbe().parse(output: output)
|
|
|
|
#expect(snapshot.planName == "Kiro")
|
|
}
|
|
}
|