修复任务提交与弹窗交互问题

This commit is contained in:
2026-07-10 14:51:34 +08:00
parent df547a16dc
commit f88a85a807
48 changed files with 1065 additions and 254 deletions

View File

@ -118,6 +118,45 @@ final class MaterialManagementViewModelTests: XCTestCase {
XCTAssertNil(api.lastUploadRequest?.id)
}
func testCloudMediaImportBuildsMaterialRequestWithoutUploadingAgain() async {
let api = MockMaterialAPI()
api.spotResponse = ScenicSpotListResponse(list: [ScenicSpotItem(id: 9, name: "打卡点")], total: 1)
let viewModel = MaterialFormViewModel(mode: .create, currentScenicIdProvider: { 3 })
var didSucceed = false
viewModel.onSubmitSuccess = { didSucceed = true }
await viewModel.loadInitial(api: api)
viewModel.updateMaterialName("云盘素材")
viewModel.selectScenicSpot(ScenicSpotItem(id: 9, name: "打卡点"))
viewModel.addCloudMediaFiles([
CloudFile(id: 31, fileUrl: "https://cdn/cloud.jpg", coverUrl: "https://cdn/cover-thumb.jpg", name: "cloud.jpg", type: 2, fileSize: 88),
])
await viewModel.setCoverImage(makeUploadItem(fileName: "cover.jpg"), uploader: MockMaterialUploader(urls: ["https://cdn/cover.jpg"]))
await viewModel.submit(api: api)
XCTAssertTrue(didSucceed)
XCTAssertEqual(viewModel.importedCloudFileIDs, Set([31]))
XCTAssertEqual(api.lastUploadRequest?.mediaList.first?.originalName, "cloud.jpg")
XCTAssertEqual(api.lastUploadRequest?.mediaList.first?.ossUrl, "https://cdn/cloud.jpg")
XCTAssertEqual(api.lastUploadRequest?.mediaList.first?.size, 88)
}
func testCloudMediaImportFiltersByCurrentMaterialTypeAndDeduplicates() {
let viewModel = MaterialFormViewModel(mode: .create, currentScenicIdProvider: { 3 })
var messages: [String] = []
viewModel.onShowMessage = { messages.append($0) }
viewModel.addCloudMediaFiles([
CloudFile(id: 1, fileUrl: "https://cdn/video.mp4", name: "video.mp4", type: 1),
CloudFile(id: 2, fileUrl: "https://cdn/image.jpg", name: "image.jpg", type: 2),
CloudFile(id: 2, fileUrl: "https://cdn/image.jpg", name: "image.jpg", type: 2),
])
XCTAssertEqual(viewModel.uploadedMediaList.map(\.ossUrl), ["https://cdn/image.jpg"])
XCTAssertEqual(viewModel.importedCloudFileIDs, Set([2]))
XCTAssertTrue(messages.isEmpty)
}
func testUploadDialogStaysHiddenAfterCompletionProgressCallback() async {
let viewModel = MaterialFormViewModel(mode: .create, currentScenicIdProvider: { 3 })
let uploader = MockMaterialUploader(urls: ["https://cdn/a.jpg"])