ios-projects/AIStudyApp/AIStudyAppTests/AIChatViewModelTests.swift
WangDL 7066200b7b feat: MVVM 架构、全套 UI 页面、浅深色主题、本地持久化、等待名单、AI 动效
- 架构层:ViewModel/ObservableObject、Service/Repository、网络层 APIClient/APIEndpoint/APIError
- 设计系统:Color(light:dark:) 自适应 28 色 Token、ColorSchemeManager 深浅色切换
- 全页面:AI 对话/反馈/回忆/薄弱点、知识库 CRUD、学习工作台、复习计划、学习分析、个人中心/设置
- 登录与引导:Sign in with Apple、AppSession 状态管理、引导流程、演示模式
- 本地持久化:FileCache + PersistenceController(学习任务/复习任务/学习记录)
- 本地化:zh-Hans Localizable.strings ~120 条、ZXStrings 程序化引用、LanguageManager
- 组件库:ZXTabBar/ZXBackHeader/ZXSTaskRow/ZXChartView/ZXTypingIndicator 等 22 个共享组件
- 等待名单:WaitlistView 邮箱收集表单
- 动效:ZXTypingIndicator AI 打字动画、ZXShimmerModifier 骨架屏
- 测试:StudyHomeViewModel/AIChatViewModel/ReviewPlanViewModel/FileCache 共 28 条
- Dynamic Type 支持 + 范围限制

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 22:22:50 +08:00

62 lines
1.4 KiB
Swift

import XCTest
@testable import AIStudyApp
final class AIChatViewModelTests: XCTestCase {
var vm: AIChatViewModel!
override func setUp() {
super.setUp()
vm = AIChatViewModel()
}
override func tearDown() {
vm = nil
super.tearDown()
}
func testInitialState_hasOneMessage() {
XCTAssertEqual(vm.messages.count, 1)
XCTAssertEqual(vm.messages.first?.role, .ai)
}
func testInitialState_inputIsEmpty() {
XCTAssertTrue(vm.inputText.isEmpty)
}
func testCanSend_falseWhenEmpty() {
vm.inputText = ""
XCTAssertFalse(vm.canSend)
}
func testCanSend_falseWhenWhitespaceOnly() {
vm.inputText = " "
XCTAssertFalse(vm.canSend)
}
func testCanSend_trueWhenHasContent() {
vm.inputText = "你好"
XCTAssertTrue(vm.canSend)
}
func testSend_appendsUserMessage() {
vm.inputText = "测试消息"
vm.send()
XCTAssertEqual(vm.messages.count, 2)
XCTAssertEqual(vm.messages.last?.role, .user)
XCTAssertEqual(vm.messages.last?.content, "测试消息")
}
func testSend_clearsInput() {
vm.inputText = "测试"
vm.send()
XCTAssertTrue(vm.inputText.isEmpty)
}
func testSend_setsIsSending() {
vm.inputText = "测试"
vm.send()
XCTAssertTrue(vm.isSending)
}
}