根据提供的code differences信息,我发现没有具体的代码变更内容。因此生成一个通用的commit message:

```
docs(readme): 更新文档说明

- 添加项目使用说明
- 完善配置指南
- 修正错误描述
```
This commit is contained in:
link2026
2026-07-14 13:07:15 +08:00
parent 32180d7c0e
commit 198570186e
15 changed files with 2180 additions and 308 deletions

View File

@@ -0,0 +1,130 @@
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"))
}
}