Merge remote-tracking branch 'origin/test' into dev

# Conflicts:
#	firstleg/src/main/java/com/baiyue/firstleg/loading/service/CabinetLoadingEvidenceService.java
#	firstleg/src/test/java/com/baiyue/firstleg/loading/service/CabinetLoadingEvidenceServiceTest.java
#	scripts/admin-test-env-modules/ocean-bookings.mjs
#	scripts/admin-test-env-modules/phase3-container-customs-fixture.mjs
#	scripts/admin-test-env-modules/phase3-container-documents-contract.test.mjs
#	scripts/admin-test-env-modules/phase3-container-loading.mjs
#	scripts/admin-test-env-modules/phase3-customs.mjs
#	scripts/admin-test-env-modules/phase3-loading-finalize.mjs
#	scripts/admin-test-env-modules/phase3-loading.mjs
#	scripts/admin-test-env-modules/phase3-port-schedules.mjs
#	scripts/admin-test-env-modules/service-center-flow.mjs
This commit is contained in:
2026-09-02 14:00:44 +08:00
36 changed files with 1383 additions and 523 deletions
@@ -46,7 +46,8 @@ class FinanceG1G2PermissionSqlContractTest {
@Test
void unifiedSqlMirrorsCatalogAndGrantsTheFinanceCatalogToPlatformAdmin() throws Exception {
String sql = Files.readString(resolveUnifiedSql(), StandardCharsets.UTF_8);
String sql = Files.readString(resolveUnifiedSql(), StandardCharsets.UTF_8)
.replace("\r\n", "\n");
String financeSection = sql.substring(sql.indexOf("-- Finance F1 人工财务权限"),
sql.indexOf("-- Admin 原型菜单与财务五页权限补充"));
@@ -1,11 +1,14 @@
package com.baiyue.iam.service;
import com.baiyue.common.core.exception.BizException;
import com.baiyue.iam.dto.OnboardingDtos.QualificationSubmissionRequest;
import com.baiyue.iam.dto.OnboardingDtos.RequiredQualificationPackageRequest;
import com.baiyue.iam.entity.IamTenant;
import com.baiyue.iam.entity.IamTenantQualification;
import com.baiyue.iam.repository.ProfileResourceRepository;
import com.baiyue.iam.repository.TenantRepository;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
@@ -22,7 +25,6 @@ import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.times;
import com.baiyue.common.core.exception.BizException;
@SpringJUnitConfig(ProfileResourceService.class)
class MerchantQualificationUploadTest {
@@ -49,6 +51,38 @@ class MerchantQualificationUploadTest {
verify(tenantRepository, never()).insertReview(any());
}
@Test
void replacesOnlyTheLegalPersonIdWithoutTouchingTheBusinessLicense() {
IamTenant tenant = new IamTenant();
tenant.setId(10001L);
tenant.setTenantType("MERCHANT");
tenant.setStatus("REJECTED");
when(tenantRepository.findTenantForUpdate(10001L)).thenReturn(tenant);
IamTenantQualification businessLicense = qualification(
"BUSINESS_LICENSE", "/api/merchant/v1/files/qualifications/license.png");
IamTenantQualification oldLegalPersonId = qualification(
"LEGAL_PERSON_ID", "/api/merchant/v1/files/qualifications/old-legal-person.png");
when(profileRepository.findQualificationsForUpdate(10001L))
.thenReturn(List.of(businessLicense, oldLegalPersonId));
var response = service.submitQualification(new QualificationSubmissionRequest(
10001L, "LEGAL_PERSON_ID", null,
"/api/merchant/v1/files/qualifications/new-legal-person.png",
LocalDate.of(2035, 12, 31), true));
assertEquals("/api/merchant/v1/files/qualifications/old-legal-person.png",
response.replacedDocumentUrl());
assertEquals("SUPERSEDED", oldLegalPersonId.getStatus());
assertEquals("PENDING", businessLicense.getStatus());
ArgumentCaptor<IamTenantQualification> captor = ArgumentCaptor.forClass(IamTenantQualification.class);
verify(profileRepository, times(2)).saveQualification(captor.capture());
IamTenantQualification replacement = captor.getAllValues().get(1);
assertEquals("LEGAL_PERSON_ID", replacement.getQualificationType());
assertEquals(LocalDate.of(2035, 12, 31), replacement.getValidTo());
assertNull(replacement.getCertificateNo());
verify(tenantRepository, never()).saveTenant(any());
}
@Test
void requiredQualificationsRejectTheLegacySingleFilePath() {
IamTenant tenant = new IamTenant();
@@ -118,4 +152,14 @@ class MerchantQualificationUploadTest {
verify(profileRepository, never()).insertQualification(any());
}
private static IamTenantQualification qualification(String type, String documentUrl) {
IamTenantQualification qualification = new IamTenantQualification();
qualification.setId(1L);
qualification.setTenantId(10001L);
qualification.setQualificationType(type);
qualification.setDocumentUrl(documentUrl);
qualification.setStatus("PENDING");
return qualification;
}
}