Add submit-task flow aligned with Android and extract profile edit page.
Implement task creation with cloud/local media, order linking, and OSS upload; wire home entry and move profile nickname/avatar editing to ProfileEditViewController. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
77
suixinkanTests/TaskModelsTests.swift
Normal file
77
suixinkanTests/TaskModelsTests.swift
Normal file
@ -0,0 +1,77 @@
|
||||
//
|
||||
// TaskModelsTests.swift
|
||||
// suixinkanTests
|
||||
//
|
||||
|
||||
import XCTest
|
||||
@testable import suixinkan
|
||||
|
||||
/// 任务模型编解码测试。
|
||||
final class TaskModelsTests: XCTestCase {
|
||||
|
||||
func testAddTaskRequestEncodesSnakeCaseFields() throws {
|
||||
let request = AddTaskRequest(
|
||||
scenicId: 10,
|
||||
name: "测试任务",
|
||||
orderNumber: "NO001",
|
||||
remark: "描述",
|
||||
urgentHour: 2,
|
||||
cloudFile: [TaskCloudFileItem(fileId: 1, remark: "云备注")],
|
||||
uploadFile: [TaskUploadFileItem(fileUrl: "https://cdn/a.jpg", fileName: "a.jpg", remark: "")]
|
||||
)
|
||||
let data = try JSONEncoder().encode(request)
|
||||
let json = try JSONSerialization.jsonObject(with: data) as? [String: Any]
|
||||
|
||||
XCTAssertEqual(json?["scenic_id"] as? Int, 10)
|
||||
XCTAssertEqual(json?["name"] as? String, "测试任务")
|
||||
XCTAssertEqual(json?["order_number"] as? String, "NO001")
|
||||
XCTAssertEqual(json?["photog_remark"] as? String, "描述")
|
||||
XCTAssertEqual(json?["urgent_hour"] as? Int, 2)
|
||||
}
|
||||
|
||||
func testAvailableOrderDecodesSnakeCaseFields() throws {
|
||||
let json = """
|
||||
{
|
||||
"project_name": "航拍项目",
|
||||
"order_number": "NO001",
|
||||
"order_status": 1,
|
||||
"order_status_label": "已付款",
|
||||
"pay_time": "2024-01-01 10:00:00",
|
||||
"user_id": 100,
|
||||
"user_phone": "13800138000"
|
||||
}
|
||||
""".data(using: .utf8)!
|
||||
|
||||
let order = try JSONDecoder().decode(AvailableOrder.self, from: json)
|
||||
XCTAssertEqual(order.projectName, "航拍项目")
|
||||
XCTAssertEqual(order.orderNumber, "NO001")
|
||||
XCTAssertEqual(order.orderStatusLabel, "已付款")
|
||||
}
|
||||
|
||||
func testCloudFileListResponseDecodesList() throws {
|
||||
let json = """
|
||||
{
|
||||
"total": 1,
|
||||
"list": [
|
||||
{
|
||||
"id": 5,
|
||||
"parent_folder_id": 0,
|
||||
"file_url": "https://cdn/a.jpg",
|
||||
"cover_url": "",
|
||||
"updated_at": "",
|
||||
"name": "图片1",
|
||||
"created_at": "",
|
||||
"child_num": 0,
|
||||
"type": 2,
|
||||
"file_size": 100
|
||||
}
|
||||
]
|
||||
}
|
||||
""".data(using: .utf8)!
|
||||
|
||||
let response = try JSONDecoder().decode(CloudFileListResponse.self, from: json)
|
||||
XCTAssertEqual(response.total, 1)
|
||||
XCTAssertEqual(response.list[0].id, 5)
|
||||
XCTAssertTrue(response.list[0].isImage)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user