package com.ruoyi.order.mapper;
|
|
import org.junit.jupiter.api.Test;
|
|
import java.io.BufferedReader;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.io.InputStreamReader;
|
import java.nio.charset.StandardCharsets;
|
import java.util.stream.Collectors;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
class PayOrderQueryPerformanceMapperTest {
|
|
@Test
|
void readsRefundStatusFromOrderTablesWithoutJoiningRefundDetails() throws IOException {
|
InputStream input = getClass().getClassLoader()
|
.getResourceAsStream("mapper/order/TChargingOrderMapper.xml");
|
assertNotNull(input);
|
|
String mapper;
|
try (BufferedReader reader = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8))) {
|
mapper = reader.lines().collect(Collectors.joining("\n"));
|
}
|
|
String payOrderQuery = mapper.substring(
|
mapper.indexOf("<select id=\"payOrderQuery\""),
|
mapper.indexOf("<select id=\"getRefundList\""));
|
assertEquals(3, countOccurrences(payOrderQuery, "a.refund_status as refund_status"));
|
assertFalse(payOrderQuery.contains("t_charging_order_refund"));
|
assertFalse(payOrderQuery.contains("t_shopping_order_refund"));
|
assertFalse(payOrderQuery.contains("t_vip_order_refund"));
|
}
|
|
@Test
|
void invoiceOrderViewRetainsLinkedOrdersAfterPaymentStatusChanges() throws IOException {
|
InputStream input = getClass().getClassLoader()
|
.getResourceAsStream("mapper/order/TChargingOrderMapper.xml");
|
assertNotNull(input);
|
|
String mapper;
|
try (BufferedReader reader = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8))) {
|
mapper = reader.lines().collect(Collectors.joining("\n"));
|
}
|
|
String payOrderQuery = mapper.substring(
|
mapper.indexOf("<select id=\"payOrderQuery\""),
|
mapper.indexOf("<select id=\"getRefundList\""));
|
assertEquals(3, countOccurrences(payOrderQuery, "#{data.invoiceId} IS NOT NULL"));
|
assertTrue(payOrderQuery.contains(
|
"a.recharge_payment_status = 2 OR a.status = -1 OR #{data.invoiceId} IS NOT NULL"));
|
assertEquals(2, countOccurrences(payOrderQuery,
|
"a.payment_status = 2 OR #{data.invoiceId} IS NOT NULL"));
|
}
|
|
@Test
|
void paymentOrderListUsesLatestPaymentTimeAsItsDefaultSort() throws IOException {
|
InputStream input = getClass().getClassLoader()
|
.getResourceAsStream("mapper/order/TChargingOrderMapper.xml");
|
assertNotNull(input);
|
|
String mapper;
|
try (BufferedReader reader = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8))) {
|
mapper = reader.lines().collect(Collectors.joining("\n"));
|
}
|
|
String payOrderQuery = mapper.substring(
|
mapper.indexOf("<select id=\"payOrderQuery\""),
|
mapper.indexOf("<select id=\"getRefundList\""));
|
assertTrue(payOrderQuery.contains(
|
"ORDER BY COALESCE(o.pay_time, o.create_time, o.end_time) DESC, o.create_time DESC, o.id DESC"));
|
}
|
|
@Test
|
void refundListAppliesPartnerSiteScopeInsidePagedQuery() throws IOException {
|
InputStream input = getClass().getClassLoader()
|
.getResourceAsStream("mapper/order/TChargingOrderMapper.xml");
|
assertNotNull(input);
|
|
String mapper;
|
try (BufferedReader reader = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8))) {
|
mapper = reader.lines().collect(Collectors.joining("\n"));
|
}
|
|
String refundQuery = mapper.substring(
|
mapper.indexOf("<select id=\"getRefundList\""),
|
mapper.indexOf("<select id=\"chargingOrderGroup\""));
|
assertTrue(refundQuery.contains("data.siteIds"));
|
assertTrue(refundQuery.contains("o.site_id IN"));
|
assertEquals(3, countOccurrences(refundQuery, "as site_id"));
|
}
|
|
@Test
|
void specialRefundListSkipsUnrelatedOrderUnions() throws IOException {
|
InputStream input = getClass().getClassLoader()
|
.getResourceAsStream("mapper/order/TChargingOrderMapper.xml");
|
assertNotNull(input);
|
|
String mapper;
|
try (BufferedReader reader = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8))) {
|
mapper = reader.lines().collect(Collectors.joining("\n"));
|
}
|
|
String refundQuery = mapper.substring(
|
mapper.indexOf("<select id=\"getRefundList\""),
|
mapper.indexOf("<select id=\"chargingOrderGroup\""));
|
assertTrue(refundQuery.contains("WHERE re.refund_title = '特殊退款处理'"));
|
assertTrue(refundQuery.contains("<if test=\"data.specialRefund == null or !data.specialRefund\">"));
|
}
|
|
private int countOccurrences(String text, String target) {
|
int count = 0;
|
int index = 0;
|
while ((index = text.indexOf(target, index)) >= 0) {
|
count++;
|
index += target.length();
|
}
|
return count;
|
}
|
}
|