修复合作获客扫码绑定崩溃与 Toast 层级,并接入分成比例修改。
将扫码页提升到列表层弹出并补齐 AppDelegate.window,避免扫码时 UIKit 取主窗口崩溃;Toast 改用独立 UIWindow 显示在 sheet 之上;合作获客员支持短信验证修改分成比例,同时优化冷启动根视图创建时机并补充相关测试。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@ -28,6 +28,9 @@ final class CooperationOrderAPITests: XCTestCase {
|
||||
XCTAssertEqual(response.list.first?.displayPhone, "19281871413")
|
||||
XCTAssertEqual(response.list.first?.bindingId, 5)
|
||||
XCTAssertEqual(response.list.first?.shareCode, "INV-000101")
|
||||
XCTAssertEqual(response.list.first?.commissionRate, 15)
|
||||
XCTAssertEqual(response.list.first?.commissionRateLabel, "15%")
|
||||
XCTAssertEqual(response.list.first?.displayCommissionRate, "15%")
|
||||
|
||||
let request = try XCTUnwrap(session.requests.last)
|
||||
XCTAssertEqual(request.httpMethod, "GET")
|
||||
@ -70,6 +73,7 @@ final class CooperationOrderAPITests: XCTestCase {
|
||||
XCTAssertEqual(response.total, 1)
|
||||
XCTAssertEqual(response.list.first?.displayId, "501")
|
||||
XCTAssertEqual(response.list.first?.displayPhone, "13900000002")
|
||||
XCTAssertEqual(response.list.first?.displaySalerName, "张哥")
|
||||
XCTAssertEqual(response.list.first?.remark, "景区门口获客")
|
||||
XCTAssertEqual(response.list.first?.displayImages.first, "https://example.com/lead.jpg")
|
||||
|
||||
@ -130,12 +134,14 @@ final class CooperationOrderAPITests: XCTestCase {
|
||||
|
||||
let acceptSession = CooperationRecordingURLSession(data: emptyData)
|
||||
let acceptAPI = CooperationOrderAPI(client: APIClient(session: acceptSession))
|
||||
try await acceptAPI.saleUserAcceptBind(saleUserId: 101)
|
||||
try await acceptAPI.saleUserAcceptBind(saleUserId: 101, commissionRate: 20)
|
||||
|
||||
let acceptRequest = try XCTUnwrap(acceptSession.requests.last)
|
||||
XCTAssertEqual(acceptRequest.httpMethod, "POST")
|
||||
XCTAssertEqual(acceptRequest.url?.path, "/api/yf-handset-app/photog/sale-user/accept-bind")
|
||||
XCTAssertEqual(cooperationQueryItems(from: acceptRequest)["sale_user_id"], "101")
|
||||
let acceptQuery = cooperationQueryItems(from: acceptRequest)
|
||||
XCTAssertEqual(acceptQuery["sale_user_id"], "101")
|
||||
XCTAssertEqual(acceptQuery["commission_rate"], "20")
|
||||
XCTAssertNil(acceptRequest.httpBody)
|
||||
|
||||
let bindSession = CooperationRecordingURLSession(data: emptyData)
|
||||
@ -181,6 +187,72 @@ final class CooperationOrderAPITests: XCTestCase {
|
||||
XCTAssertEqual(json["sale_user_id"] as? Int, 123)
|
||||
XCTAssertEqual(json["photog_remark_name"] as? String, "张哥")
|
||||
}
|
||||
|
||||
/// 测试发送修改分成比例验证码请求体。
|
||||
func testSaleUserCommissionRateSendSmsCodeUsesPostBody() async throws {
|
||||
let emptyData = try TestFixture.data(named: "empty_success")
|
||||
let session = CooperationRecordingURLSession(data: emptyData)
|
||||
let api = CooperationOrderAPI(client: APIClient(session: session))
|
||||
|
||||
try await api.saleUserCommissionRateSendSmsCode(phone: "19281871413")
|
||||
|
||||
let request = try XCTUnwrap(session.requests.last)
|
||||
XCTAssertEqual(request.httpMethod, "POST")
|
||||
XCTAssertEqual(request.url?.path, "/api/yf-handset-app/photog/sale-user/commission-rate/send-sms-code")
|
||||
let body = try XCTUnwrap(request.httpBody)
|
||||
let json = try XCTUnwrap(JSONSerialization.jsonObject(with: body) as? [String: Any])
|
||||
XCTAssertEqual(json["phone"] as? String, "19281871413")
|
||||
}
|
||||
|
||||
/// 测试更新合作获客员分成比例请求体与响应解码。
|
||||
func testSaleUserUpdateCommissionRateUsesPostBodyAndDecodesResponse() async throws {
|
||||
let responseData = Data(
|
||||
"""
|
||||
{
|
||||
"code": 100000,
|
||||
"msg": "success",
|
||||
"data": {
|
||||
"binding_id": 5,
|
||||
"sale_user_id": 101,
|
||||
"share_code": "INV-000101",
|
||||
"name": "管铜彬",
|
||||
"saler_name": "管铜彬",
|
||||
"phone": "19281871413",
|
||||
"phone_masked": "192****1413",
|
||||
"saler_phone": "19281871413",
|
||||
"photog_commission_rate": 20,
|
||||
"commission_rate": 20,
|
||||
"commission_rate_label": "20%",
|
||||
"bind_time": "2026-06-25 17:11:01",
|
||||
"bound_at": "2026-06-25 17:11:01",
|
||||
"store_id": 37
|
||||
}
|
||||
}
|
||||
""".utf8
|
||||
)
|
||||
let session = CooperationRecordingURLSession(data: responseData)
|
||||
let api = CooperationOrderAPI(client: APIClient(session: session))
|
||||
|
||||
let updated = try await api.saleUserUpdateCommissionRate(
|
||||
saleUserId: 101,
|
||||
commissionRate: 20,
|
||||
smsCode: "889900"
|
||||
)
|
||||
|
||||
XCTAssertEqual(updated.saleUserId, 101)
|
||||
XCTAssertEqual(updated.commissionRate, 20)
|
||||
XCTAssertEqual(updated.commissionRateLabel, "20%")
|
||||
XCTAssertEqual(updated.displayCommissionRate, "20%")
|
||||
|
||||
let request = try XCTUnwrap(session.requests.last)
|
||||
XCTAssertEqual(request.httpMethod, "POST")
|
||||
XCTAssertEqual(request.url?.path, "/api/yf-handset-app/photog/sale-user/commission-rate")
|
||||
let body = try XCTUnwrap(request.httpBody)
|
||||
let json = try XCTUnwrap(JSONSerialization.jsonObject(with: body) as? [String: Any])
|
||||
XCTAssertEqual(json["sale_user_id"] as? Int, 101)
|
||||
XCTAssertEqual(json["commission_rate"] as? Int, 20)
|
||||
XCTAssertEqual(json["sms_code"] as? String, "889900")
|
||||
}
|
||||
}
|
||||
|
||||
/// URLSession 测试替身,记录合作订单 API 请求。
|
||||
|
||||
Reference in New Issue
Block a user