添加提交任务流程并抽取资料编辑页
This commit is contained in:
84
suixinkanTests/TaskAddViewModelTests.swift
Normal file
84
suixinkanTests/TaskAddViewModelTests.swift
Normal file
@ -0,0 +1,84 @@
|
||||
//
|
||||
// TaskAddViewModelTests.swift
|
||||
// suixinkanTests
|
||||
//
|
||||
|
||||
import XCTest
|
||||
@testable import suixinkan
|
||||
|
||||
/// 添加任务 ViewModel 测试。
|
||||
@MainActor
|
||||
final class TaskAddViewModelTests: XCTestCase {
|
||||
|
||||
private var appStore: AppStore!
|
||||
private var defaults: UserDefaults!
|
||||
|
||||
override func setUp() {
|
||||
defaults = UserDefaults(suiteName: "TaskAddViewModelTests")!
|
||||
defaults.removePersistentDomain(forName: "TaskAddViewModelTests")
|
||||
appStore = AppStore(defaults: defaults)
|
||||
appStore.currentScenicId = 10
|
||||
}
|
||||
|
||||
func testValidateRequiresTaskName() async {
|
||||
let viewModel = TaskAddViewModel(appStore: appStore)
|
||||
var message: String?
|
||||
viewModel.onShowMessage = { message = $0 }
|
||||
|
||||
await viewModel.validateAndSubmit(api: TaskAPI(client: makeClient()))
|
||||
|
||||
XCTAssertEqual(message, "请填写任务名称!")
|
||||
}
|
||||
|
||||
func testBuildAddTaskRequestSplitsCloudAndUploadFiles() {
|
||||
let viewModel = TaskAddViewModel(appStore: appStore)
|
||||
viewModel.updateTaskName("任务A")
|
||||
viewModel.updateTaskDetails("描述")
|
||||
viewModel.setSelectedOrderNumber("NO001")
|
||||
viewModel.setUrgentHour(2)
|
||||
viewModel.addCloudFiles([CloudFile(id: 1, name: "云文件", type: 2)])
|
||||
viewModel.addUploadPlaceholder(fileName: "a.jpg", fileType: 2, uploadTaskId: "task1")
|
||||
viewModel.markUploadSucceeded(uploadTaskId: "task1", fileURL: "https://cdn/a.jpg", autoRemarkWhenSingle: false)
|
||||
|
||||
let request = viewModel.buildAddTaskRequest()
|
||||
|
||||
XCTAssertEqual(request.name, "任务A")
|
||||
XCTAssertEqual(request.orderNumber, "NO001")
|
||||
XCTAssertEqual(request.urgentHour, 2)
|
||||
XCTAssertEqual(request.cloudFile.count, 1)
|
||||
XCTAssertEqual(request.uploadFile.count, 1)
|
||||
XCTAssertEqual(request.uploadFile[0].fileUrl, "https://cdn/a.jpg")
|
||||
}
|
||||
|
||||
func testAddCloudFilesDedupesAndAutoRemarkSingleFile() {
|
||||
let viewModel = TaskAddViewModel(appStore: appStore)
|
||||
viewModel.addCloudFiles([CloudFile(id: 1, name: "A", type: 2)])
|
||||
XCTAssertEqual(viewModel.selectedFiles.count, 1)
|
||||
XCTAssertEqual(viewModel.consumePendingRemarkFileID(), viewModel.selectedFiles[0].id)
|
||||
|
||||
viewModel.addCloudFiles([
|
||||
CloudFile(id: 1, name: "A", type: 2),
|
||||
CloudFile(id: 2, name: "B", type: 2),
|
||||
CloudFile(id: 3, name: "C", type: 2),
|
||||
])
|
||||
XCTAssertEqual(viewModel.selectedFiles.count, 3)
|
||||
XCTAssertNil(viewModel.consumePendingRemarkFileID())
|
||||
}
|
||||
|
||||
func testResetAllStateClearsForm() {
|
||||
let viewModel = TaskAddViewModel(appStore: appStore)
|
||||
viewModel.updateTaskName("任务")
|
||||
viewModel.setSelectedOrderNumber("NO001")
|
||||
viewModel.addCloudFiles([CloudFile(id: 1, type: 2)])
|
||||
|
||||
viewModel.resetAllState()
|
||||
|
||||
XCTAssertEqual(viewModel.taskName, "")
|
||||
XCTAssertNil(viewModel.selectedOrderNumber)
|
||||
XCTAssertTrue(viewModel.selectedFiles.isEmpty)
|
||||
}
|
||||
|
||||
private func makeClient() -> APIClient {
|
||||
APIClient(environment: .testing, session: MockURLSession(responses: []))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user