wangdl
86054edd5f
test: add resolveKnowledgeSource + full type inference tests
...
- Add resolveKnowledgeSource path test (knowledge_sources/<id>/)
- Add empty knowledge_sources directory test
- Add .txt→text and .epub→epub type inference
- Add .png/.jpg/.jpeg/.webp→image inference
- Remove misleading test that only asserted nil
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 13:07:30 +08:00
wangdl
2fa459d9ea
test: add MaterialPathResolver unit tests (IOS-INFO-033)
...
- 7 tests covering resolve and materialType inference
- resolve nil for nonexistent file
- resolve finds file in Documents directory
- resolve finds file in Caches directory
- type inference: .md→markdown, .pdf→pdf
- unknown apiType defaults to .unknown
- temp file creation + cleanup in test
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 13:04:37 +08:00
wangdl
335859df0e
test: remove redundant singleton test in MarkedReadStore tests
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 13:04:03 +08:00
wangdl
cdc5c10076
test: add MarkedReadStore unit tests (IOS-INFO-032)
...
- 10 tests covering MarkedReadStore full API
- contains: unmarked=false, after-mark=true, after-unmark=false
- mark: persists to UserDefaults, idempotent, multiple IDs
- unmark: removes from persisted array, nonexistent safe
- Persistence: survives re-init (UserDefaults-backed)
- Edge case: empty string as materialId
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 13:00:26 +08:00
wangdl
3abe17a84e
test: add queue UUID path coverage in LocalQueueTests
...
- Add test_markRetry_works_with_queue_item_id (uses queue UUID not eventId)
- Update test_markDead_after_max_retries to use queue item id from batch
- Fixes review finding: tests previously only used eventId, not queue UUID
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-15 21:58:04 +08:00
wangdl
4ba747af46
feat: iOS learning info P0 complete (IOS-INFO-000~017, 038~039)
...
Models: ReadingMaterialContext, ReadingEventUploadItem, AppContext
Runtime: ReadingRuntimeAdapter, SessionManager, RecoveryService
Reader: MaterialReaderView lifecycle, Heartbeat Timer, Position Adapter
Export: EventMapper, UploadQueue, export→queue→ack flow
Tests: 16 test files covering models, runtime, lifecycle, upload
Docs: ios-learning-info-architecture.md
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-15 21:53:36 +08:00
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