diff --git a/play-admin/src/test/java/com/starry/admin/api/AdminWithdrawalControllerApiTest.java b/play-admin/src/test/java/com/starry/admin/api/AdminWithdrawalControllerApiTest.java index c4fc71d..132d23f 100644 --- a/play-admin/src/test/java/com/starry/admin/api/AdminWithdrawalControllerApiTest.java +++ b/play-admin/src/test/java/com/starry/admin/api/AdminWithdrawalControllerApiTest.java @@ -8,7 +8,9 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.starry.admin.common.apitest.ApiTestDataSeeder; +import com.starry.admin.modules.clerk.module.entity.PlayClerkUserInfoEntity; import com.starry.admin.modules.clerk.service.IPlayClerkUserInfoService; +import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity; import com.starry.admin.modules.custom.service.IPlayCustomUserInfoService; import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity; import com.starry.admin.modules.order.service.IPlayOrderInfoService; @@ -20,6 +22,7 @@ import com.starry.admin.modules.withdraw.service.IWithdrawalService; import com.starry.admin.utils.SecurityUtils; import com.starry.common.utils.IdUtils; import java.math.BigDecimal; +import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; @@ -71,6 +74,14 @@ class AdminWithdrawalControllerApiTest extends AbstractApiTest { @Test void auditReturnsEarningLinesWithOrderDetails() throws Exception { ensureTenantContext(); + ensureProfileFixtures(); + + PlayClerkUserInfoEntity expectedClerk = clerkUserInfoService.getById(ApiTestDataSeeder.DEFAULT_CLERK_ID); + PlayCustomUserInfoEntity expectedCustomer = customUserInfoService.getById(ApiTestDataSeeder.DEFAULT_CUSTOMER_ID); + Assertions.assertThat(expectedClerk).as("default clerk fixture missing").isNotNull(); + Assertions.assertThat(expectedCustomer).as("default customer fixture missing").isNotNull(); + String expectedClerkNickname = expectedClerk.getNickname(); + String expectedCustomerNickname = expectedCustomer.getNickname(); PlayOrderInfoEntity order = seedOrder(LocalDateTime.now().minusHours(2)); WithdrawalRequestEntity withdrawal = seedWithdrawal(ApiTestDataSeeder.DEFAULT_TENANT_ID, new BigDecimal("88.60")); @@ -89,8 +100,6 @@ class AdminWithdrawalControllerApiTest extends AbstractApiTest { .andReturn(); JsonNode data = objectMapper.readTree(result.getResponse().getContentAsString()).get("data"); - String expectedClerkNickname = clerkUserInfoService.selectById(ApiTestDataSeeder.DEFAULT_CLERK_ID).getNickname(); - String expectedCustomerNickname = customUserInfoService.selectById(ApiTestDataSeeder.DEFAULT_CUSTOMER_ID).getNickname(); boolean foundOrder = false; boolean foundMissing = false; @@ -100,9 +109,9 @@ class AdminWithdrawalControllerApiTest extends AbstractApiTest { Assertions.assertThat(node.path("orderStatus").asText()).isEqualTo(order.getOrderStatus()); Assertions.assertThat(node.path("earningType").asText()).isEqualTo(EarningsType.ORDER.name()); Assertions.assertThat(node.path("orderClerkId").asText()).isEqualTo(ApiTestDataSeeder.DEFAULT_CLERK_ID); - Assertions.assertThat(node.path("orderClerkNickname").asText()).isEqualTo(expectedClerkNickname); + Assertions.assertThat(normalizeUtf8(node.path("orderClerkNickname").asText())).isEqualTo(expectedClerkNickname); Assertions.assertThat(node.path("orderCustomerId").asText()).isEqualTo(ApiTestDataSeeder.DEFAULT_CUSTOMER_ID); - Assertions.assertThat(node.path("orderCustomerNickname").asText()).isEqualTo(expectedCustomerNickname); + Assertions.assertThat(normalizeUtf8(node.path("orderCustomerNickname").asText())).isEqualTo(expectedCustomerNickname); foundOrder = true; } if (node.path("orderNo").isNull()) { @@ -299,6 +308,72 @@ class AdminWithdrawalControllerApiTest extends AbstractApiTest { return id; } + private void ensureProfileFixtures() { + ensureTenantContext(); + ensureClerkFixture(); + ensureCustomerFixture(); + } + + private void ensureClerkFixture() { + PlayClerkUserInfoEntity clerk = clerkUserInfoService.getById(ApiTestDataSeeder.DEFAULT_CLERK_ID); + if (clerk != null) { + return; + } + PlayClerkUserInfoEntity entity = new PlayClerkUserInfoEntity(); + entity.setId(ApiTestDataSeeder.DEFAULT_CLERK_ID); + entity.setTenantId(ApiTestDataSeeder.DEFAULT_TENANT_ID); + entity.setSysUserId(ApiTestDataSeeder.DEFAULT_ADMIN_USER_ID); + entity.setOpenid(ApiTestDataSeeder.DEFAULT_CLERK_OPEN_ID); + entity.setNickname("小测官"); + entity.setGroupId(ApiTestDataSeeder.DEFAULT_GROUP_ID); + entity.setLevelId(ApiTestDataSeeder.DEFAULT_CLERK_LEVEL_ID); + entity.setFixingLevel("1"); + entity.setSex("2"); + entity.setPhone("13900000001"); + entity.setWeiChatCode("apitest-clerk"); + entity.setAvatar("https://example.com/avatar.png"); + entity.setAccountBalance(BigDecimal.ZERO); + entity.setOnboardingState("1"); + entity.setListingState("1"); + entity.setDisplayState("1"); + entity.setOnlineState("1"); + entity.setRandomOrderState("1"); + entity.setClerkState("1"); + entity.setEntryTime(LocalDateTime.now()); + entity.setToken("apitest-clerk-token"); + entity.setDeleted(false); + clerkUserInfoService.save(entity); + } + + private void ensureCustomerFixture() { + PlayCustomUserInfoEntity customer = customUserInfoService.getById(ApiTestDataSeeder.DEFAULT_CUSTOMER_ID); + if (customer != null) { + return; + } + PlayCustomUserInfoEntity entity = new PlayCustomUserInfoEntity(); + entity.setId(ApiTestDataSeeder.DEFAULT_CUSTOMER_ID); + entity.setTenantId(ApiTestDataSeeder.DEFAULT_TENANT_ID); + entity.setOpenid("openid-customer-apitest"); + entity.setUnionid("unionid-customer-apitest"); + entity.setNickname("测试顾客"); + entity.setSex(1); + entity.setPhone("13700000002"); + entity.setWeiChatCode("apitest-customer"); + entity.setAccountBalance(new BigDecimal("200.00")); + entity.setAccumulatedRechargeAmount(new BigDecimal("200.00")); + entity.setAccumulatedConsumptionAmount(BigDecimal.ZERO); + entity.setAccountState("1"); + entity.setSubscribeState("1"); + entity.setPurchaseState("1"); + entity.setMobilePhoneState("1"); + Date now = new Date(); + entity.setRegistrationTime(now); + entity.setLastLoginTime(now); + entity.setToken("apitest-customer-token"); + entity.setDeleted(false); + customUserInfoService.save(entity); + } + private void ensureTenantContext() { SecurityUtils.setTenantId(ApiTestDataSeeder.DEFAULT_TENANT_ID); } @@ -306,4 +381,16 @@ class AdminWithdrawalControllerApiTest extends AbstractApiTest { private Date toDate(LocalDateTime value) { return Date.from(value.atZone(ZoneId.systemDefault()).toInstant()); } + + private String normalizeUtf8(String value) { + if (value == null) { + return null; + } + boolean convertible = value.chars().allMatch(ch -> ch <= 0xFF); + if (!convertible) { + return value; + } + byte[] bytes = value.getBytes(StandardCharsets.ISO_8859_1); + return new String(bytes, StandardCharsets.UTF_8); + } }