fix: preserve qualification file names across uploads
This commit is contained in:
@@ -11,6 +11,7 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
@Service
|
||||
public class QualificationPackageService {
|
||||
@@ -45,9 +46,10 @@ public class QualificationPackageService {
|
||||
String legalPersonIdDocumentUrl = storedLegalPersonId == null ? null : storedLegalPersonId.documentUrl();
|
||||
|
||||
var request = new IamQualificationClient.RequiredPackageRequest(
|
||||
tenantId, normalizedCreditCode, storedBusinessLicense.documentUrl(), businessLicense.getOriginalFilename(),
|
||||
tenantId, normalizedCreditCode, storedBusinessLicense.documentUrl(),
|
||||
originalFileName(businessLicense, storedBusinessLicense, "business-license"),
|
||||
businessLicenseValidTo, replaceBusinessLicense, legalPersonIdDocumentUrl,
|
||||
legalPersonId == null ? null : legalPersonId.getOriginalFilename(),
|
||||
legalPersonId == null ? null : originalFileName(legalPersonId, storedLegalPersonId, "legal-person-id"),
|
||||
legalPersonIdValidTo, replaceLegalPersonId);
|
||||
try {
|
||||
var response = platform
|
||||
@@ -87,6 +89,13 @@ public class QualificationPackageService {
|
||||
if (storedFile != null) storage.delete(storedFile);
|
||||
}
|
||||
|
||||
private String originalFileName(MultipartFile file, LocalQualificationStorage.StoredFile stored, String fallback) {
|
||||
String original = file.getOriginalFilename();
|
||||
if (StringUtils.hasText(original)) return original;
|
||||
String storedName = stored == null ? null : stored.fileName();
|
||||
return StringUtils.hasText(storedName) ? storedName : fallback;
|
||||
}
|
||||
|
||||
public record PackageUploadResult(Long businessLicenseQualificationId,
|
||||
Long legalPersonIdQualificationId,
|
||||
String tenantStatus,
|
||||
|
||||
@@ -83,6 +83,25 @@ class QualificationPackageServiceTest {
|
||||
verify(fixture.storage, never()).store(TENANT_ID, fixture.legalPersonId);
|
||||
}
|
||||
|
||||
@Test
|
||||
void missingMultipartOriginalNamesUseStoredNamesForIamRegistration() {
|
||||
var fixture = fixture();
|
||||
var businessLicense = new MockMultipartFile("businessLicense", "", "image/png", new byte[] {1});
|
||||
var legalPersonId = new MockMultipartFile("legalPersonId", "", "image/png", new byte[] {2});
|
||||
when(fixture.storage.store(TENANT_ID, businessLicense)).thenReturn(fixture.businessStored);
|
||||
when(fixture.storage.store(TENANT_ID, legalPersonId)).thenReturn(fixture.legalPersonStored);
|
||||
when(fixture.iamClient.submitRequiredPackage(eq("internal-token"), any())).thenReturn(ApiResponse.success(
|
||||
new IamQualificationClient.RequiredPackageResponse(31L, 32L, "PROFILE_REQUIRED", null, null)));
|
||||
|
||||
fixture.service.upload(TENANT_ID, businessLicense, legalPersonId,
|
||||
"91310101abcde12345", null, null, false, false, false);
|
||||
|
||||
var captor = ArgumentCaptor.forClass(IamQualificationClient.RequiredPackageRequest.class);
|
||||
verify(fixture.iamClient).submitRequiredPackage(eq("internal-token"), captor.capture());
|
||||
assertEquals("business.pdf", captor.getValue().businessLicenseOriginalFileName());
|
||||
assertEquals("legal-person.png", captor.getValue().legalPersonIdOriginalFileName());
|
||||
}
|
||||
|
||||
@Test
|
||||
void missingBusinessLicenseAndOrphanedLegalPersonParametersStillFailClosed() {
|
||||
var fixture = fixture();
|
||||
|
||||
Reference in New Issue
Block a user