package jnpf.dmsService;
|
|
import jnpf.dmsEntity.center.DmsCenterActivation;
|
import jnpf.dmsEntity.permission.entity.DmsDocumentEntity;
|
import jnpf.dmsEntity.permission.entity.DmsFileVersionEntity;
|
import jnpf.dmsMapper.*;
|
import jnpf.dmsService.center.DmsCenterActivationService;
|
import jnpf.dmsService.search.DmsSearchIndexJobService;
|
import jnpf.exception.DataException;
|
import org.junit.jupiter.api.Test;
|
import java.util.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
import static org.mockito.Mockito.*;
|
|
class DmsCenterActivationServiceTest {
|
final DmsDocumentMapper documents = mock(DmsDocumentMapper.class);
|
final DmsFileVersionMapper versions = mock(DmsFileVersionMapper.class);
|
final DmsVersionStateMapper states = mock(DmsVersionStateMapper.class);
|
final DmsSearchIndexJobService search = mock(DmsSearchIndexJobService.class);
|
final jnpf.dmsIntegration.audit.DmsBusinessChangeAudit businessAudit = mock(jnpf.dmsIntegration.audit.DmsBusinessChangeAudit.class);
|
final DmsCenterActivationService service = new DmsCenterActivationService(businessAudit, documents, versions, states, search);
|
final UUID main = UUID.randomUUID(), record = UUID.randomUUID(), mainVersion = UUID.randomUUID(), recordVersion = UUID.randomUUID();
|
final DmsDocumentEntity recordDocument = new DmsDocumentEntity();
|
final DmsCenterActivation reuse = new DmsCenterActivation(main, mainVersion, mainVersion, "REUSE", null);
|
final DmsCenterActivation retire = new DmsCenterActivation(record, recordVersion, recordVersion, "RETIRE", null);
|
void arrange() {
|
when(documents.selectByTenantAndIdForUpdate("tenant", main)).thenReturn(new DmsDocumentEntity());
|
recordDocument.setMainDocumentId(main);
|
when(documents.selectByTenantAndIdForUpdate("tenant", record)).thenReturn(recordDocument);
|
DmsFileVersionEntity m = new DmsFileVersionEntity(); m.setId(mainVersion);
|
DmsFileVersionEntity r = new DmsFileVersionEntity(); r.setId(recordVersion);
|
when(versions.selectCurrentEffective("tenant", main)).thenReturn(m);
|
when(versions.selectCurrentEffective("tenant", record)).thenReturn(r);
|
}
|
@Test void removesOnlyApprovedRecordFromCurrentAndKeepsMainAndPhysicalContent() {
|
arrange(); when(states.retireCurrent("tenant", record, recordVersion, "actor")).thenReturn(1);
|
var before = new jnpf.dmsIntegration.audit.DmsVersionStateAuditRow(); before.setLifecycleStatus("EFFECTIVE");
|
var after = new jnpf.dmsIntegration.audit.DmsVersionStateAuditRow(); after.setLifecycleStatus("SUPERSEDED");
|
after.setStatusReason("修订移除记录,保留历史");
|
when(states.selectAuditState("tenant", recordVersion)).thenReturn(before, after);
|
service.activate("tenant", "actor", List.of(reuse, retire));
|
verify(states).retireCurrent("tenant", record, recordVersion, "actor");
|
verify(states, times(2)).selectAuditState("tenant", recordVersion);
|
verify(businessAudit).record(eq("tenant"), eq("DMS_VERSION_STATE_CHANGED"), anyString(), eq("dms_version_states"),
|
eq(recordVersion.toString()), argThat(m -> "EFFECTIVE".equals(m.get("lifecycle_status"))),
|
argThat(m -> "SUPERSEDED".equals(m.get("lifecycle_status"))), anyString(),
|
argThat(m -> record.equals(m.get("document_id"))));
|
verifyNoMoreInteractions(states, businessAudit);
|
verifyNoInteractions(search);
|
verify(documents, never()).bindMainDocument(any(), any(), any());
|
}
|
@Test void cannotRetireMainOrRecordFromDifferentDirectory() {
|
arrange(); recordDocument.setMainDocumentId(null);
|
assertThrows(DataException.class, () -> service.activate("tenant", "actor", List.of(reuse, retire)));
|
recordDocument.setMainDocumentId(UUID.randomUUID());
|
assertThrows(DataException.class, () -> service.activate("tenant", "actor", List.of(reuse, retire)));
|
verifyNoInteractions(states, search);
|
}
|
@Test void staleRecordVersionCannotBeRetired() {
|
arrange();
|
DmsFileVersionEntity changed = new DmsFileVersionEntity(); changed.setId(UUID.randomUUID());
|
when(versions.selectCurrentEffective("tenant", record)).thenReturn(changed);
|
assertThrows(DataException.class, () -> service.activate("tenant", "actor", List.of(reuse, retire)));
|
verifyNoInteractions(states, search);
|
}
|
}
|