package com.talentcard.server.business.payment.huifu;
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
import java.util.HashMap;
|
import java.util.Map;
|
|
import org.junit.jupiter.api.Test;
|
|
/**
|
* 结算记录查询的两个真实约束。
|
*
|
* <p>一是通道对 {@code pageSize} 的上限:实测传 51 或 100 会返回 {@code 00000003}
|
* 「基础参数校验失败:【pageSize-分页条数】不能为空,且最小值为0,最大值为50」,
|
* 一条流水都拿不到。后台「结算记录」页原来默认传 100,于是页面永远空白——通道里其实有流水
|
* (商户 6666000226048687 在 2026-08-26 / 08-29 各结过一次)。所以越界值必须在网关内收敛。
|
*
|
* <p>二是回执解析:结算流水以 JSON 字符串放在 {@code trans_log_result_list} 里,
|
* 翻页总数在 {@code result_count}。这两处解析错了,后台同样看不到流水。
|
*/
|
class HuifuSettlementRecordGatewayTests {
|
|
@Test
|
void aPageSizeAboveTheProviderLimitIsClampedBeforeItReachesTheProvider() {
|
// 100 与 51 都是通道明确拒绝的取值,必须被压到 50。
|
assertThat(HuifuSettlementRecordGateway.pageSizeWithinProviderLimit(100))
|
.isEqualTo(HuifuSettlementRecordGateway.PROVIDER_MAX_PAGE_SIZE);
|
assertThat(HuifuSettlementRecordGateway.pageSizeWithinProviderLimit(51))
|
.isEqualTo(HuifuSettlementRecordGateway.PROVIDER_MAX_PAGE_SIZE);
|
|
// 上限内保持原样,0 与负数兜到 1。
|
assertThat(HuifuSettlementRecordGateway.pageSizeWithinProviderLimit(50)).isEqualTo(50);
|
assertThat(HuifuSettlementRecordGateway.pageSizeWithinProviderLimit(20)).isEqualTo(20);
|
assertThat(HuifuSettlementRecordGateway.pageSizeWithinProviderLimit(1)).isEqualTo(1);
|
assertThat(HuifuSettlementRecordGateway.pageSizeWithinProviderLimit(0)).isEqualTo(1);
|
assertThat(HuifuSettlementRecordGateway.pageSizeWithinProviderLimit(-5)).isEqualTo(1);
|
}
|
|
@Test
|
void theBuiltRequestCarriesTheClampedPageSizeAndTheQueryWindow() {
|
var request = HuifuSettlementRecordGateway.buildRequest("6666000226048687", "20260815", "20260914", 100);
|
|
assertThat(request.getPageSize()).isEqualTo("50");
|
assertThat(request.getHuifuId()).isEqualTo("6666000226048687");
|
assertThat(request.getBeginDate()).isEqualTo("20260815");
|
assertThat(request.getEndDate()).isEqualTo("20260914");
|
}
|
|
@Test
|
void theSettlementRecordsReplyIsReadFromTheProviderPayload() {
|
String records = "[{\"trans_date\":\"20260829\",\"trans_amt\":\"0.01\",\"settle_cycle\":\"D1\",\"trans_stat\":\"S\"}]";
|
Map<String, Object> data = new HashMap<>();
|
data.put("resp_code", "00000000");
|
data.put("resp_desc", "成功");
|
data.put("result_count", "2");
|
data.put("trans_log_result_list", records);
|
Map<String, Object> payload = new HashMap<>();
|
payload.put("data", data);
|
|
HuifuSettlementRecordGateway.SettlementRecords result = HuifuSettlementRecordGateway.SettlementRecords.from(payload);
|
|
assertThat(result.succeeded()).isTrue();
|
assertThat(result.code()).isEqualTo("00000000");
|
assertThat(result.total()).isEqualTo(2);
|
assertThat(result.rawRecords()).isEqualTo(records);
|
}
|
|
@Test
|
void aProviderParameterFailureIsReportedAsAnUnsuccessfulQuery() {
|
Map<String, Object> data = new HashMap<>();
|
data.put("resp_code", "00000003");
|
data.put("resp_desc", "基础参数校验失败:【pageSize-分页条数】不能为空,且最小值为0,最大值为50");
|
data.put("result_count", "0");
|
Map<String, Object> payload = new HashMap<>();
|
payload.put("data", data);
|
|
HuifuSettlementRecordGateway.SettlementRecords result = HuifuSettlementRecordGateway.SettlementRecords.from(payload);
|
|
// 解析层如实报失败,让调用方把它展示成 failures,而不是静默当成"没有流水"。
|
assertThat(result.succeeded()).isFalse();
|
assertThat(result.total()).isZero();
|
assertThat(result.rawRecords()).isEmpty();
|
}
|
}
|