1
0
mirror of synced 2026-10-17 21:06:13 +08:00

🎨 消除旧通知头空值重载歧义

This commit is contained in:
Binary Wang
2026-08-18 15:12:04 +08:00
committed by GitHub
parent 509bce53f3
commit dceeaf3b00
3 changed files with 176 additions and 21 deletions

View File

@@ -5,8 +5,12 @@ import com.github.binarywang.wxpay.bean.ecommerce.enums.TradeTypeEnum;
import org.testng.Assert;
import org.testng.annotations.Test;
import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import java.util.Base64;
/**
* Compile-time compatibility checks for the pre-#4014 e-commerce API.
* Compatibility checks for the pre-#4014 e-commerce API.
*/
public class LegacyEcommerceApiCompatibilityTest {
@@ -25,4 +29,61 @@ public class LegacyEcommerceApiCompatibilityTest {
Assert.assertNotNull(EcommerceService.class.getMethod("parseRefundNotifyResult", String.class, legacyHeader));
Assert.assertNotNull(EcommerceService.class.getMethod("parseWithdrawNotifyResult", String.class, legacyHeader));
}
@Test
public void shouldKeepLegacySignatureHeaderConstructorAndBuilderAbi() throws Exception {
com.github.binarywang.wxpay.bean.ecommerce.SignatureHeader legacyHeader =
com.github.binarywang.wxpay.bean.ecommerce.SignatureHeader.builder()
.timeStamp("timestamp")
.nonce("nonce")
.signed("signed")
.serialNo("serial-no")
.build();
Assert.assertNotNull(com.github.binarywang.wxpay.bean.ecommerce.SignatureHeader.class.getConstructor(
String.class, String.class, String.class, String.class));
Assert.assertEquals(com.github.binarywang.wxpay.bean.ecommerce.SignatureHeader.SignatureHeaderBuilder.class,
com.github.binarywang.wxpay.bean.ecommerce.SignatureHeader.SignatureHeaderBuilder.class
.getMethod("timeStamp", String.class).getReturnType());
Assert.assertEquals(com.github.binarywang.wxpay.bean.ecommerce.SignatureHeader.SignatureHeaderBuilder.class,
com.github.binarywang.wxpay.bean.ecommerce.SignatureHeader.SignatureHeaderBuilder.class
.getMethod("nonce", String.class).getReturnType());
Assert.assertTrue(com.github.binarywang.wxpay.bean.notify.SignatureHeader.class
.isAssignableFrom(legacyHeader.getClass()));
com.github.binarywang.wxpay.bean.notify.SignatureHeader unifiedHeader =
EcommerceService.toUnifiedSignatureHeader(legacyHeader);
Assert.assertEquals(unifiedHeader.getTimeStamp(), "timestamp");
Assert.assertEquals(unifiedHeader.getNonce(), "nonce");
Assert.assertEquals(unifiedHeader.getSignature(), "signed");
Assert.assertEquals(unifiedHeader.getSerial(), "serial-no");
}
@Test
public void shouldIncludeTimestampAndNonceInLegacyHeaderEquality() {
com.github.binarywang.wxpay.bean.ecommerce.SignatureHeader first =
new com.github.binarywang.wxpay.bean.ecommerce.SignatureHeader("timestamp-1", "nonce", "signed", "serial-no");
com.github.binarywang.wxpay.bean.ecommerce.SignatureHeader second =
new com.github.binarywang.wxpay.bean.ecommerce.SignatureHeader("timestamp-2", "nonce", "signed", "serial-no");
Assert.assertNotEquals(first, second);
}
@Test
public void shouldReadLegacySerializedHeaderFields() throws Exception {
String legacySerializedHeader = "rO0ABXNyADpjb20uZ2l0aHViLmJpbmFyeXdhbmcud3hwYXkuYmVhbi5lY29tbWVyY2UuU2lnbmF0dXJlSGVhZGVyn3ApxLekv9MCAARMAAVub25jZXQAEkxqYXZhL2xhbmcvU3RyaW5nO0wACHNlcmlhbE5vcQB+AAFMAAZzaWduZWRxAH4AAUwACXRpbWVTdGFtcHEAfgABeHB0AAVub25jZXQACXNlcmlhbC1ub3QABnNpZ25lZHQACXRpbWVzdGFtcA==";
ObjectInputStream input = new ObjectInputStream(new ByteArrayInputStream(
Base64.getDecoder().decode(legacySerializedHeader)));
com.github.binarywang.wxpay.bean.ecommerce.SignatureHeader header =
(com.github.binarywang.wxpay.bean.ecommerce.SignatureHeader) input.readObject();
Assert.assertEquals(header.getTimeStamp(), "timestamp");
Assert.assertEquals(header.getNonce(), "nonce");
Assert.assertEquals(header.getSigned(), "signed");
Assert.assertEquals(header.getSerialNo(), "serial-no");
}
private void shouldCompileNullNotificationHeaderCalls(EcommerceService ecommerceService) throws Exception {
ecommerceService.parseRefundNotifyResult("notify-data", null);
ecommerceService.parseWithdrawNotifyResult("notify-data", null);
}
}