Files
suixinkan_uikit/suixinkanTests/PunchPointModelsTests.swift

86 lines
3.2 KiB
Swift

//
// PunchPointModelsTests.swift
// suixinkanTests
//
import XCTest
@testable import suixinkan
///
final class PunchPointModelsTests: XCTestCase {
func testListItemDecodesRegionImagesQRCodeAndAuditFields() throws {
let json = """
{
"total": 1,
"list": [{
"id": "9001",
"name": "",
"status": 1,
"status_label": "",
"region": {"lat": 30.1, "lot": 120.2, "address": "", "scenic_spot_str": ""},
"scenic_spot_str": "",
"guide_imgs": ["https://cdn/1.jpg", "https://cdn/2.jpg"],
"mp_qrcode": "https://cdn/qr.png",
"created_at": "2026-07-08 10:00:00",
"creator_id": "77",
"creator": "张三",
"creator_phone": "13800138000",
"auditor": "李四",
"audit_time": "2026-07-08 11:00:00",
"audit_remark": "通过"
}]
}
""".data(using: .utf8)!
let response = try JSONDecoder().decode(PunchPointListResponse.self, from: json)
XCTAssertEqual(response.total, 1)
let item = try XCTUnwrap(response.list.first)
XCTAssertEqual(item.id, 9001)
XCTAssertEqual(item.statusLabel, "")
XCTAssertEqual(item.region?.lat, 30.1)
XCTAssertEqual(item.region?.lot, 120.2)
XCTAssertEqual(item.displayAddress, "")
XCTAssertEqual(item.guideImages.count, 2)
XCTAssertEqual(item.mpQrcode, "https://cdn/qr.png")
XCTAssertEqual(item.creatorId, 77)
XCTAssertEqual(item.auditTime, "2026-07-08 11:00:00")
XCTAssertEqual(PunchPointDisplayFormatter.maskedPhone(item.creatorPhone), "138****8000")
}
func testDetailDecodesDefaultsAndCoordinateFallbacks() throws {
let json = """
{
"id": 12,
"name": "",
"status": 3,
"region": {"lat": 31.2, "lot": 121.3, "address": ""},
"scenic_spot_str": "",
"description": ""
}
""".data(using: .utf8)!
let detail = try JSONDecoder().decode(PunchPointDetail.self, from: json)
XCTAssertEqual(detail.statusLabel, "")
XCTAssertEqual(detail.guideImages, [])
XCTAssertNil(detail.mpQrcode)
XCTAssertEqual(detail.displayAddress, "景区入口")
XCTAssertEqual(detail.coordinate?.latitude, 31.2)
XCTAssertEqual(detail.coordinate?.longitude, 121.3)
XCTAssertEqual(detail.description, "集合点")
XCTAssertEqual(PunchPointFilterType.rejected.apiStatus, 4)
XCTAssertEqual(PunchPointFilterType.pendingReview.title, "未审核")
}
func testImageRemoteStateUsesURLAndUploadedFlag() {
let image = PunchPointImageState.remote(url: "https://cdn.example.com/path/a.jpg")
XCTAssertEqual(image.fileName, "a.jpg")
XCTAssertEqual(image.previewURL, "https://cdn.example.com/path/a.jpg")
XCTAssertEqual(image.uploadedURL, "https://cdn.example.com/path/a.jpg")
XCTAssertTrue(image.isUploaded)
XCTAssertFalse(image.isUploading)
}
}