This commit is contained in:
2026-09-14 15:33:29 +08:00
parent febe265c50
commit 46b4d14898
30 changed files with 502 additions and 200 deletions
@@ -60,6 +60,8 @@ class CustomerProfileMigrationContractTest {
String instructions = Files.readString(readme, StandardCharsets.UTF_8);
assertThat(sql)
.contains("customer_nickname VARCHAR(32)")
.contains("ALTER TABLE iam_tenant ADD COLUMN customer_nickname VARCHAR(32)")
.contains("ALTER TABLE iam_tenant MODIFY COLUMN status")
.contains("DEFAULT 'PROFILE_REQUIRED'")
.contains("CALL phase1_iam_add_column('iam_tenant', 'approved_at'")
@@ -50,13 +50,14 @@ class CustomerListExportProviderServiceTest {
assertEquals(1, response.schemaVersion());
assertThat(response.schemaHash()).matches("sha256:[0-9a-f]{64}");
assertThat(response.snapshotToken()).matches("v1\\.103\\.[A-Za-z0-9_-]+");
assertEquals(20, response.columns().size());
assertEquals(21, response.columns().size());
assertEquals("tenantCode", response.columns().get(1).key());
assertEquals(ExportColumnType.DECIMAL,
response.columns().stream().filter(column -> "registeredCapital".equals(column.key()))
.findFirst().orElseThrow().type());
assertEquals(2, response.rows().size());
assertEquals("101", response.rows().get(0).get("id"));
assertEquals("柏", response.rows().get(0).get("customerNickname"));
assertEquals(new BigDecimal("1000000.00"), response.rows().get(0).get("registeredCapital"));
assertEquals("启用", response.rows().get(0).get("status"));
assertEquals("102", response.nextCursor());
@@ -142,6 +143,7 @@ class CustomerListExportProviderServiceTest {
tenant.setId(id);
tenant.setTenantCode(String.format("%05d", id));
tenant.setTenantName("柏悦物流" + id);
tenant.setCustomerNickname("柏");
tenant.setLegalName("柏悦物流有限公司");
tenant.setUnifiedSocialCreditCode("91440000123456789X");
tenant.setEnterpriseType("有限责任公司");
@@ -160,7 +160,7 @@ class TenantServiceTest {
when(repository.findTenant(10001L)).thenReturn(tenant);
var updated = service.updateMerchant(10001L,
new UpdateTenantRequest("New name", "New legal", "Bob", "Alice", "13800138000", "alice@example.com",
new UpdateTenantRequest("New name", "新", "New legal", "Bob", "Alice", "13800138000", "alice@example.com",
"专业版", "alice_wechat", "Sales Zhang", 45, "LIMITED_COMPANY", LocalDate.of(2020, 1, 2),
new BigDecimal("5000000.00"), "CNY", "深圳市南山区示例路 1 号", "一期重点客户"));
var disabled = service.changeMerchantStatus(10001L, new ChangeTenantStatusRequest("DISABLED"));
@@ -187,7 +187,7 @@ class TenantServiceTest {
when(repository.findTenant(10001L)).thenReturn(tenant);
var updated = service.updateMerchant(10001L,
new UpdateTenantRequest("New name", "New legal", "Bob", "Alice", "13900139000", null,
new UpdateTenantRequest("New name", "新", "New legal", "Bob", "Alice", "13900139000", null,
"基础版", null, null, 30, null, null, null, "CNY", null, null));
assertEquals("13900139000", updated.contactPhone());
@@ -282,7 +282,7 @@ class TenantServiceTest {
when(repository.findTenant(10001L)).thenReturn(archived);
BizException platformFailure = assertThrows(BizException.class, () -> service.updateMerchant(10001L,
new UpdateTenantRequest("New name", "New legal", "Bob", "Alice", "13800138000", null,
new UpdateTenantRequest("New name", "新", "New legal", "Bob", "Alice", "13800138000", null,
"基础版", null, null, 30, null, null, null, "CNY", null, null)));
BizException merchantFailure = assertThrows(BizException.class, () -> service.update(10001L,
new UpdateProfileRequest("New name", "New legal", "Bob", "Alice",
@@ -317,7 +317,7 @@ class TenantServiceTest {
.when(provisioning).provisionPlatformCreatedTenant(any(), eq(9001L));
var created = service.register(new RegisterRequest(
"Example Merchant", "Example Merchant Ltd", "Bob", "Alice", "13800138000",
"Example Merchant", null, "Example Merchant Ltd", "Bob", "Alice", "13800138000",
"alice@example.com", "基础版", "alice_wechat", "Sales Zhang", 30, "LIMITED_COMPANY",
LocalDate.of(2020, 1, 2), new BigDecimal("5000000.00"), "CNY", "深圳市南山区", "草稿客户"),
9001L);
@@ -325,6 +325,7 @@ class TenantServiceTest {
assertEquals("PROFILE_REQUIRED", created.tenant().status());
assertEquals("00001", created.tenant().tenantCode());
assertEquals("PENDING", created.tenant().dimensionInitializationStatus());
assertEquals("E", created.tenant().customerNickname());
assertEquals("Bob", created.tenant().legalRepresentative());
assertEquals("基础版", created.tenant().servicePackage());
assertEquals("merchant_81", created.administratorUsername());
@@ -337,13 +338,21 @@ class TenantServiceTest {
verify(repository, never()).insertReview(any());
}
@Test
void customerNicknameDefaultsToFirstChineseCharacterAndAcceptsManualValue() {
assertEquals("SZWLYXGS", TenantService.resolveCustomerNickname(null, "ABC 深圳物流有限公司"));
assertEquals("SZWL", TenantService.resolveCustomerNickname(null, "深圳物流"));
assertEquals("A", TenantService.resolveCustomerNickname(" ", "ABC Logistics"));
assertEquals("虫虫", TenantService.resolveCustomerNickname(" 虫虫 ", "深圳物流有限公司"));
}
@Test
void platformRegistrationFailsWhenDurableInitializationIntentCannotBePersisted() {
doThrow(new BizException(ResultCode.SERVICE_UNAVAILABLE, "初始化失败"))
.when(dimensionRuleInitialization).initialize(any(Long.class), any(Long.class));
BizException failure = assertThrows(BizException.class, () -> service.register(new RegisterRequest(
"Example Merchant", "Example Merchant Ltd", "Bob", "Alice", "13800138000",
"Example Merchant", null, "Example Merchant Ltd", "Bob", "Alice", "13800138000",
"alice@example.com", "基础版", null, null, 30, null,
null, null, "CNY", null, null), 9001L));
@@ -357,7 +366,7 @@ class TenantServiceTest {
.when(provisioning).provisionPlatformCreatedTenant(any(), eq(9001L));
var created = service.register(new RegisterRequest(
"Example Merchant", "Example Merchant Ltd", "Bob", "Alice", "13800138000",
"Example Merchant", null, "Example Merchant Ltd", "Bob", "Alice", "13800138000",
"alice@example.com", "基础版", null, null, 30, null,
null, null, "CNY", null, null), 9001L);
@@ -524,6 +533,7 @@ class TenantServiceTest {
tenant.setStatus(status);
tenant.setDimensionInitializationStatus("READY");
tenant.setTenantName("Example Merchant");
tenant.setCustomerNickname("E");
tenant.setLegalName("Example Merchant Ltd");
tenant.setUnifiedSocialCreditCode("91330100EXAMPLE001");
tenant.setContactName("Alice");