61 lines
1.5 KiB
Swift
61 lines
1.5 KiB
Swift
|
|
import XCTest
|
||
|
|
@testable import AIStudyApp
|
||
|
|
|
||
|
|
final class StudyHomeViewModelTests: XCTestCase {
|
||
|
|
|
||
|
|
var vm: StudyHomeViewModel!
|
||
|
|
|
||
|
|
override func setUp() {
|
||
|
|
super.setUp()
|
||
|
|
vm = StudyHomeViewModel()
|
||
|
|
}
|
||
|
|
|
||
|
|
override func tearDown() {
|
||
|
|
vm = nil
|
||
|
|
super.tearDown()
|
||
|
|
}
|
||
|
|
|
||
|
|
func testInitialState_hasFiveTasks() {
|
||
|
|
XCTAssertEqual(vm.tasks.count, 5)
|
||
|
|
}
|
||
|
|
|
||
|
|
func testInitialState_twoTasksDone() {
|
||
|
|
XCTAssertEqual(vm.doneCount, 2)
|
||
|
|
}
|
||
|
|
|
||
|
|
func testProgress_calculatesCorrectly() {
|
||
|
|
XCTAssertEqual(vm.progress, 0.4, accuracy: 0.01)
|
||
|
|
}
|
||
|
|
|
||
|
|
func testToggleTask_changesDoneCount() {
|
||
|
|
let task = vm.tasks.first(where: { !$0.d })!
|
||
|
|
vm.toggleTask(task)
|
||
|
|
XCTAssertEqual(vm.doneCount, 3)
|
||
|
|
}
|
||
|
|
|
||
|
|
func testToggleTask_togglingBackRestoresCount() {
|
||
|
|
let task = vm.tasks.first(where: { $0.d })!
|
||
|
|
vm.toggleTask(task)
|
||
|
|
XCTAssertEqual(vm.doneCount, 1)
|
||
|
|
}
|
||
|
|
|
||
|
|
func testDoneMinutes_sumsCompletedTasks() {
|
||
|
|
XCTAssertEqual(vm.doneMinutes, 25) // 10 + 15
|
||
|
|
}
|
||
|
|
|
||
|
|
func testRemainingMinutes_sumsPendingTasks() {
|
||
|
|
XCTAssertEqual(vm.remainingMinutes, 30) // 8 + 12 + 10
|
||
|
|
}
|
||
|
|
|
||
|
|
func testToggleTask_updatesProgress() {
|
||
|
|
let task = vm.tasks.first(where: { !$0.d })!
|
||
|
|
vm.toggleTask(task)
|
||
|
|
XCTAssertEqual(vm.progress, 0.6, accuracy: 0.01)
|
||
|
|
}
|
||
|
|
|
||
|
|
func testWeekActivity_hasSevenDays() {
|
||
|
|
XCTAssertEqual(vm.weekActivity.count, 7)
|
||
|
|
XCTAssertEqual(vm.dayLabels.count, 7)
|
||
|
|
}
|
||
|
|
}
|