diff --git a/AIStudyApp/AIStudyAppTests/StudyHomeViewModelTests.swift b/AIStudyApp/AIStudyAppTests/StudyHomeViewModelTests.swift index 47a9058..a7a9b4d 100644 --- a/AIStudyApp/AIStudyAppTests/StudyHomeViewModelTests.swift +++ b/AIStudyApp/AIStudyAppTests/StudyHomeViewModelTests.swift @@ -187,4 +187,31 @@ final class StudyHomeViewModelTests: XCTestCase { XCTAssertEqual(vm.weeklyActiveDays, 5) XCTAssertEqual(vm.streakDays, 3) } + + // MARK: - P1 fallback: continueService throws → unfinished session + + func test_priority_fallback_to_unfinished_session_when_continueService_throws() async { + mockContinue.response = nil // throws + mockSession.sessions = [LearningSession( + id: "s1", userId: nil, knowledgeBaseId: "kb1", knowledgeItemId: nil, + mode: nil, status: "in_progress", startedAt: "2026-01-02T00:00:00.000Z", + endedAt: nil, durationSeconds: nil, focusMinutes: nil, createdAt: nil + )] + mockKB.kbs = [KnowledgeBase(id: "kb1", title: "My KB", description: nil, knowledgeCount: 5, sourceCount: 1, userId: "u1", createdAt: "2026-01-01")] + + await vm.loadAll() + + guard case .continueSession = vm.mainAction else { + return XCTFail("Expected continueSession fallback, got \(String(describing: vm.mainAction))") + } + } + + // MARK: - refresh() + + func test_refresh_updates_review_count() async { + mockReview.cards = [] + await vm.refresh() + XCTAssertEqual(vm.todayReviewCount, 0) + XCTAssertEqual(vm.loadingState, .idle) // refresh doesn't set loadingState + } }