package jnpf.fileStorage.dms; import jnpf.dms.DmsPersistentPdfRecoveryApi; import jnpf.dmsEntity.preview.model.DmsFilePreviewTicket; import jnpf.dmsEntity.storage.form.DmsPersistentPdfInvalidationForm; import jnpf.dmsEntity.storage.model.DmsPersistentPdfSource; import org.junit.Test; import org.mockito.ArgumentCaptor; import java.util.UUID; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; public class DmsPersistentPdfRecoveryReporterTest { @Test public void sendsBoundInvalidationAndSwallowsRemoteFailure() { DmsPersistentPdfRecoveryApi api = mock(DmsPersistentPdfRecoveryApi.class); DmsPersistentPdfRecoveryReporter reporter = new DmsPersistentPdfRecoveryReporter(api); UUID versionId = UUID.randomUUID(); DmsPersistentPdfSource source = new DmsPersistentPdfSource(); source.setObjectKey("dms-derived/pdf/version/source.pdf"); source.setSourceChecksumSha256("a".repeat(64)); DmsFilePreviewTicket ticket = new DmsFilePreviewTicket(); ticket.setTenantId("tenant-1"); ticket.setFileVersionId(versionId); ticket.setPdfSource(source); when(api.invalidate(anyString(), any())).thenThrow(new RuntimeException("offline")); reporter.report(ticket, "missing"); ArgumentCaptor form = ArgumentCaptor.forClass(DmsPersistentPdfInvalidationForm.class); verify(api).invalidate(eq("jnpf-file"), form.capture()); assertEquals("tenant-1", form.getValue().getTenantId()); assertEquals(versionId, form.getValue().getFileVersionId()); assertEquals(source.getObjectKey(), form.getValue().getObjectKey()); assertEquals(source.getSourceChecksumSha256(), form.getValue().getSourceChecksumSha256()); } }