Files
kangkang/康康Tests/DiaryChatServiceTests.swift
link2026 198570186e 根据提供的code differences信息,我发现没有具体的代码变更内容。因此生成一个通用的commit message:
```
docs(readme): 更新文档说明

- 添加项目使用说明
- 完善配置指南
- 修正错误描述
```
2026-07-14 13:07:15 +08:00

131 lines
5.0 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import Testing
@testable import
/// 线稿
/// DiaryChatService @MainActor struct, @MainActor
@MainActor
struct DiaryChatServiceTests {
// MARK: roundsUsed (assistant 1),user
@Test func roundsUsedIsZeroForEmptyTurns() {
#expect(DiaryChatService.roundsUsed(in: []) == 0)
}
@Test func roundsUsedIsZeroForOpeningOnly() {
// 1 assistant() max(0, 1-1) = 0
let turns: [HealthExportDialogueTurn] = [.assistant("说说你今天的情况")]
#expect(DiaryChatService.roundsUsed(in: turns) == 0)
}
@Test func roundsUsedCountsAssistantRepliesAfterOpening() {
// + 2 = 3 assistant max(0, 3-1) = 2
let turns: [HealthExportDialogueTurn] = [
.assistant("开场"),
.user("我头疼"),
.assistant("追问一"),
.user("还发烧"),
.assistant("追问二")
]
#expect(DiaryChatService.roundsUsed(in: turns) == 2)
}
@Test func roundsUsedIgnoresUserTurns() {
// user : 3 assistant 2
let turns: [HealthExportDialogueTurn] = [
.assistant("开场"),
.user("u1"), .user("u2"),
.assistant("追问一"),
.user("u3"), .user("u4"), .user("u5"),
.assistant("追问二"),
.user("u6")
]
#expect(DiaryChatService.roundsUsed(in: turns) == 2)
}
// MARK: isWrappedUp roundsUsed >= maxRounds(4)
@Test func isNotWrappedUpAtThreeRounds() {
// 4 assistant( + 3 ) roundsUsed = 3 < 4
let turns: [HealthExportDialogueTurn] = [
.assistant("开场"),
.user("a"), .assistant("q1"),
.user("b"), .assistant("q2"),
.user("c"), .assistant("q3")
]
#expect(DiaryChatService.roundsUsed(in: turns) == 3)
#expect(DiaryChatService.isWrappedUp(turns: turns) == false)
}
@Test func isWrappedUpAtFourRounds() {
// 5 assistant( + 4 ) roundsUsed = 4 = maxRounds
let turns: [HealthExportDialogueTurn] = [
.assistant("开场"),
.user("a"), .assistant("q1"),
.user("b"), .assistant("q2"),
.user("c"), .assistant("q3"),
.user("d"), .assistant("q4")
]
#expect(DiaryChatService.roundsUsed(in: turns) == DiaryChatPrompts.maxRounds)
#expect(DiaryChatService.isWrappedUp(turns: turns) == true)
}
// MARK: fallbackDraft user ,assistant 稿
@Test func fallbackDraftIsEmptyWhenNoUserTurns() {
let turns: [HealthExportDialogueTurn] = [
.assistant("开场"),
.assistant("再问一句")
]
#expect(DiaryChatService.fallbackDraft(turns: turns) == "")
}
@Test func fallbackDraftReturnsSingleUserVerbatimWithoutBullet() {
// 1 user ,· ;
let turns: [HealthExportDialogueTurn] = [
.assistant("说说你今天的情况"),
.user("今天头疼,量了血压 140/90")
]
let draft = DiaryChatService.fallbackDraft(turns: turns)
#expect(draft == "今天头疼,量了血压 140/90")
#expect(!draft.contains("· "))
}
@Test func fallbackDraftBulletsMultipleUserTurns() {
// 2 user ·
let turns: [HealthExportDialogueTurn] = [
.assistant("开场"),
.user("今天头疼"),
.assistant("量血压了吗?"),
.user("量了血压 140/90")
]
let draft = DiaryChatService.fallbackDraft(turns: turns)
#expect(draft == "· 今天头疼\n· 量了血压 140/90")
}
@Test func fallbackDraftDropsBlankUserTurns() {
// / user ,·
let turns: [HealthExportDialogueTurn] = [
.user("第一条有效"),
.user(" "),
.user("\n \n"),
.user("第二条有效")
]
let draft = DiaryChatService.fallbackDraft(turns: turns)
#expect(draft == "· 第一条有效\n· 第二条有效")
}
@Test func fallbackDraftNeverIncludesAssistantTextAndKeepsNumbers() {
// assistant ;140/90
let turns: [HealthExportDialogueTurn] = [
.assistant("上次你记过头疼"),
.user("今天又头疼了,血压 140/90"),
.assistant("需要提醒复诊吗?")
]
let draft = DiaryChatService.fallbackDraft(turns: turns)
#expect(!draft.contains("上次你记过头疼"))
#expect(!draft.contains("需要提醒复诊吗?"))
#expect(draft.contains("140/90"))
}
}