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>
78 lines
2.4 KiB
Swift
78 lines
2.4 KiB
Swift
//
|
|
// 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)
|
|
}
|
|
}
|