package jnpf.dmsService; import jnpf.dmsIntegration.audit.DmsBusinessChangeAudit; import jnpf.dmsEntity.permission.entity.DmsDocumentEntity; import jnpf.dmsMapper.DmsDocumentMapper; import jnpf.dmsService.center.DmsCenterDirectoryService; import jnpf.exception.DataException; import org.junit.jupiter.api.Test; import java.util.List; import java.util.UUID; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; class DmsCenterDirectoryAuditTest { final DmsDocumentMapper documents = mock(DmsDocumentMapper.class); final DmsBusinessChangeAudit audit = mock(DmsBusinessChangeAudit.class); final DmsCenterDirectoryService service = new DmsCenterDirectoryService(audit, documents); final UUID mainId = UUID.randomUUID(), recordId = UUID.randomUUID(); final DmsDocumentEntity record = new DmsDocumentEntity(); void arrange() { when(documents.selectByTenantAndIdForUpdate("tenant", mainId)).thenReturn(new DmsDocumentEntity()); when(documents.selectByTenantAndIdForUpdate("tenant", recordId)).thenReturn(record); } @Test void bindingRecordsOldAndNewOwnershipAndRetryDoesNotDuplicate() { arrange(); when(documents.bindMainDocument("tenant", recordId, mainId)).thenReturn(1); service.bind("tenant", mainId, List.of(recordId)); verify(audit).record(eq("tenant"), eq("DMS_CENTER_BIND_DIRECTORY"), anyString(), eq("dms_documents"), eq(recordId.toString()), argThat(m -> m.containsKey("main_document_id") && m.get("main_document_id") == null), argThat(m -> mainId.equals(m.get("main_document_id"))), isNull(), anyMap()); record.setMainDocumentId(mainId); service.bind("tenant", mainId, List.of(recordId)); verifyNoMoreInteractions(audit); } @Test void failedWriteProducesNoSuccessEvent() { arrange(); assertThrows(DataException.class, () -> service.bind("tenant", mainId, List.of(recordId))); verifyNoInteractions(audit); } }