feat: update wallet punch point and report success

This commit is contained in:
2026-07-09 14:27:18 +08:00
parent 2970f1514b
commit 43e6133c21
34 changed files with 6671 additions and 71 deletions

View File

@ -0,0 +1,93 @@
//
// PunchPointAPITests.swift
// suixinkanTests
//
import XCTest
@testable import suixinkan
/// API
@MainActor
final class PunchPointAPITests: XCTestCase {
func testListAndInfoUseAndroidPathsAndQueries() async throws {
let session = MockURLSession(responses: [
envelopeJSON(#"{"total":0,"list":[]}"#),
envelopeJSON(#"{"id":18,"name":""}"#),
])
let api = PunchPointAPI(client: APIClient(environment: .testing, session: session))
_ = try await api.list(scenicAreaId: "9", status: 2, page: 3, pageSize: 10)
_ = try await api.info(id: 18)
XCTAssertEqual(session.requests[0].httpMethod, "GET")
XCTAssertEqual(session.requests[0].url?.path, "/api/yf-handset-app/photog/scenic-spot/list")
let listQuery = URLComponents(url: try XCTUnwrap(session.requests[0].url), resolvingAgainstBaseURL: false)?.queryItems
XCTAssertEqual(listQuery?.first { $0.name == "scenic_area_id" }?.value, "9")
XCTAssertEqual(listQuery?.first { $0.name == "status" }?.value, "2")
XCTAssertEqual(listQuery?.first { $0.name == "page" }?.value, "3")
XCTAssertEqual(listQuery?.first { $0.name == "page_size" }?.value, "10")
XCTAssertEqual(session.requests[1].httpMethod, "GET")
XCTAssertEqual(session.requests[1].url?.path, "/api/yf-handset-app/photog/scenic-spot/info")
let infoQuery = URLComponents(url: try XCTUnwrap(session.requests[1].url), resolvingAgainstBaseURL: false)?.queryItems
XCTAssertEqual(infoQuery?.first { $0.name == "id" }?.value, "18")
}
func testAddEditAndDeleteEncodeAndroidBodies() async throws {
let session = MockURLSession(responses: [envelopeJSON("{}"), envelopeJSON("{}"), envelopeJSON("{}")])
let api = PunchPointAPI(client: APIClient(environment: .testing, session: session))
let addRequest = PunchPointSaveRequest(
scenicAreaId: "7",
name: "山顶打卡点",
description: "日出位置",
region: PunchPointSaveRegion(lot: 120.12, lat: 30.23, address: "山顶平台"),
scenicSpotString: "山顶平台",
guideImages: ["https://cdn/a.jpg"]
)
let editRequest = PunchPointSaveRequest(
id: 88,
scenicAreaId: "7",
name: "山顶打卡点2",
description: nil,
region: PunchPointSaveRegion(lot: 121.12, lat: 31.23, address: "新平台"),
scenicSpotString: "新平台",
guideImages: ["https://cdn/b.jpg"]
)
try await api.add(addRequest)
try await api.edit(editRequest)
try await api.delete(id: 88)
XCTAssertEqual(session.requests[0].url?.path, "/api/yf-handset-app/photog/scenic-spot/add")
let addBody = try bodyJSON(session.requests[0])
XCTAssertNil(addBody["id"])
XCTAssertEqual(addBody["scenic_area_id"] as? String, "7")
XCTAssertEqual(addBody["name"] as? String, "山顶打卡点")
XCTAssertEqual(addBody["scenic_spot_str"] as? String, "山顶平台")
XCTAssertEqual(addBody["guide_imgs"] as? [String], ["https://cdn/a.jpg"])
let addRegion = try XCTUnwrap(addBody["region"] as? [String: Any])
XCTAssertEqual(addRegion["lot"] as? Double, 120.12)
XCTAssertEqual(addRegion["lat"] as? Double, 30.23)
XCTAssertEqual(addRegion["address"] as? String, "山顶平台")
XCTAssertEqual(session.requests[1].url?.path, "/api/yf-handset-app/photog/scenic-spot/edit")
let editBody = try bodyJSON(session.requests[1])
XCTAssertEqual(editBody["id"] as? Int, 88)
XCTAssertEqual(editBody["name"] as? String, "山顶打卡点2")
XCTAssertNil(editBody["description"])
XCTAssertEqual(session.requests[2].url?.path, "/api/yf-handset-app/photog/scenic-spot/delete")
let deleteBody = try bodyJSON(session.requests[2])
XCTAssertEqual(deleteBody["id"] as? Int, 88)
}
private func envelopeJSON(_ dataJSON: String) -> Data {
"""
{"code":100000,"msg":"success","data":\(dataJSON)}
""".data(using: .utf8)!
}
private func bodyJSON(_ request: URLRequest) throws -> [String: Any] {
try XCTUnwrap(JSONSerialization.jsonObject(with: try XCTUnwrap(request.httpBody)) as? [String: Any])
}
}