fix(file): allow standalone legal-person ID upload

This commit is contained in:
2026-09-02 12:07:32 +08:00
parent f0da6e5110
commit 9e70f4339a
6 changed files with 203 additions and 18 deletions
@@ -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;
}
}