完善实名认证、钱包与打卡点模块 UI 与业务逻辑。
对齐 Android 实名认证流程与审核页、钱包提现/积分兑换界面,优化打卡点列表与详情交互,并补充相关资源、主题 token 与单元测试。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
66
suixinkanTests/RealNameAuthAPITests.swift
Normal file
66
suixinkanTests/RealNameAuthAPITests.swift
Normal file
@ -0,0 +1,66 @@
|
||||
//
|
||||
// RealNameAuthAPITests.swift
|
||||
// suixinkanTests
|
||||
//
|
||||
|
||||
import XCTest
|
||||
@testable import suixinkan
|
||||
|
||||
/// 实名认证 API 契约测试。
|
||||
@MainActor
|
||||
final class RealNameAuthAPITests: XCTestCase {
|
||||
func testInfoUsesAndroidGETPath() async throws {
|
||||
let response = Data(#"{"code":100000,"msg":"success","data":{"real_name_info":null}}"#.utf8)
|
||||
let session = MockURLSession(responses: [response])
|
||||
let api = ProfileAPI(client: APIClient(environment: .testing, session: session))
|
||||
|
||||
_ = try await api.realNameInfo()
|
||||
|
||||
let request = try XCTUnwrap(session.requests.first)
|
||||
XCTAssertEqual(request.httpMethod, "GET")
|
||||
XCTAssertEqual(request.url?.path, "/api/yf-handset-app/photog/real-name/info")
|
||||
}
|
||||
|
||||
func testSMSCodeUsesPOSTWithoutBody() async throws {
|
||||
let response = Data(#"{"code":100000,"msg":"success","data":{}}"#.utf8)
|
||||
let session = MockURLSession(responses: [response])
|
||||
let api = ProfileAPI(client: APIClient(environment: .testing, session: session))
|
||||
|
||||
try await api.realNameSmsVerifyCode()
|
||||
|
||||
let request = try XCTUnwrap(session.requests.first)
|
||||
XCTAssertEqual(request.httpMethod, "POST")
|
||||
XCTAssertEqual(request.url?.path, "/api/yf-handset-app/photog/real-name/sms-verify-code")
|
||||
XCTAssertNil(request.httpBody)
|
||||
}
|
||||
|
||||
func testSubmitUsesAndroidJSONFields() async throws {
|
||||
let response = Data(#"{"code":100000,"msg":"success","data":{}}"#.utf8)
|
||||
let session = MockURLSession(responses: [response])
|
||||
let api = ProfileAPI(client: APIClient(environment: .testing, session: session))
|
||||
let payload = RealNameAuthRequest(
|
||||
realName: "张三",
|
||||
idCardNo: "11010519491231002X",
|
||||
smsVerifyCode: "123456",
|
||||
startDate: "2026-07-13",
|
||||
endDate: "",
|
||||
isLongValid: 1,
|
||||
frontUrl: "front",
|
||||
backUrl: "back"
|
||||
)
|
||||
|
||||
try await api.realNameSubmit(payload)
|
||||
|
||||
let request = try XCTUnwrap(session.requests.first)
|
||||
let body = try XCTUnwrap(request.httpBody)
|
||||
let object = try XCTUnwrap(JSONSerialization.jsonObject(with: body) as? [String: Any])
|
||||
XCTAssertEqual(request.httpMethod, "POST")
|
||||
XCTAssertEqual(request.url?.path, "/api/yf-handset-app/photog/real-name/submit")
|
||||
XCTAssertEqual(object["real_name"] as? String, "张三")
|
||||
XCTAssertEqual(object["id_card_no"] as? String, "11010519491231002X")
|
||||
XCTAssertEqual(object["sms_verify_code"] as? String, "123456")
|
||||
XCTAssertEqual(object["is_long_valid"] as? Int, 1)
|
||||
XCTAssertEqual(object["front_url"] as? String, "front")
|
||||
XCTAssertEqual(object["back_url"] as? String, "back")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user