package jnpf.dmsService;
|
|
import jnpf.base.Pagination;
|
import jnpf.base.UserInfo;
|
import jnpf.dmsEntity.fenfa.model.DmsWenjianDayinTaizhangQuery;
|
import jnpf.dmsMapper.DmsWenjianDayinTaizhangMapper;
|
import jnpf.dmsPermission.*;
|
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.Test;
|
import org.mockito.ArgumentCaptor;
|
|
import java.util.Collections;
|
|
import static org.junit.jupiter.api.Assertions.*;
|
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.Mockito.*;
|
|
class DmsWenjianDayinTaizhangServiceTest {
|
private final DmsCurrentIdentity identity = mock(DmsCurrentIdentity.class);
|
private final DmsUserFolderPermissionTreeService folders = mock(DmsUserFolderPermissionTreeService.class);
|
private final DmsWenjianDayinTaizhangMapper mapper = mock(DmsWenjianDayinTaizhangMapper.class);
|
private final DmsWenjianDayinTaizhangService service = new DmsWenjianDayinTaizhangService(identity, folders, mapper);
|
private final Pagination page = new Pagination();
|
|
@BeforeEach
|
void setup() {
|
UserInfo actor = new UserInfo();
|
actor.setUserId("current-user");
|
when(identity.requireUser()).thenReturn(actor);
|
when(identity.tenantId(actor)).thenReturn("tenant-a");
|
when(folders.currentUserPrintFolderIds()).thenReturn(Collections.singletonList(
|
java.util.UUID.fromString("00000000-0000-0000-0000-000000000001")));
|
page.setCurrentPage(2);
|
page.setPageSize(20);
|
when(mapper.selectCount(any())).thenReturn(Collections.singletonMap("total", 21L));
|
when(mapper.selectPage(any())).thenReturn(Collections.singletonList(Collections.singletonMap("f_id", "task-21")));
|
}
|
|
@Test
|
void delegatesFolderPermissionsToOriginalServiceAndSharesScopeForCountAndPage() {
|
assertEquals("task-21", service.list(page, "keyword", null, null).get(0).get("f_id"));
|
ArgumentCaptor<DmsWenjianDayinTaizhangQuery> q = ArgumentCaptor.forClass(DmsWenjianDayinTaizhangQuery.class);
|
verify(mapper).selectCount(q.capture());
|
verify(mapper).selectPage(same(q.getValue()));
|
assertEquals("tenant-a", q.getValue().getTenantId());
|
assertEquals(20, q.getValue().getOffset());
|
assertEquals(21, page.getTotal());
|
assertEquals("keyword", q.getValue().getSearch());
|
assertEquals("[\"00000000-0000-0000-0000-000000000001\"]", q.getValue().getFolderIdsJson());
|
verify(folders).currentUserPrintFolderIds();
|
verify(identity, never()).requirePermissionAdministrator();
|
}
|
|
@Test
|
void noPermissionAndOutOfRangePagesReturnEmptyWithCorrectTotal() {
|
when(mapper.selectCount(any())).thenReturn(Collections.singletonMap("total", 0L));
|
assertTrue(service.list(page, null, null, null).isEmpty());
|
assertEquals(0, page.getTotal());
|
when(mapper.selectCount(any())).thenReturn(Collections.singletonMap("total", 3L));
|
assertTrue(service.list(page, null, null, null).isEmpty());
|
assertEquals(3, page.getTotal());
|
verify(mapper, never()).selectPage(any());
|
}
|
|
@Test
|
void echoUsesSamePermissionQueryAndBindsTaskId() {
|
page.setCurrentPage(1);
|
service.list(page, null, "f_id", "task-1");
|
ArgumentCaptor<DmsWenjianDayinTaizhangQuery> q = ArgumentCaptor.forClass(DmsWenjianDayinTaizhangQuery.class);
|
verify(mapper).selectPage(q.capture());
|
assertEquals("task-1", q.getValue().getTaskId());
|
assertNotNull(q.getValue().getFolderIdsJson());
|
assertThrows(DmsPermissionException.class, () -> service.list(page, null, "1=1", "task-1"));
|
assertThrows(DmsPermissionException.class, () -> service.list(page, null, "f_id", ""));
|
}
|
|
@Test
|
void rejectsInvalidPaginationBeforeResolvingSubjects() {
|
page.setCurrentPage(0);
|
assertThrows(DmsPermissionException.class, () -> service.list(page, null, null, null));
|
verifyNoInteractions(folders, mapper);
|
}
|
|
@Test
|
void personalWorkflowScopeStillQueriesTasksWhenFolderScopeIsEmpty() {
|
when(folders.currentUserPrintFolderIds()).thenReturn(Collections.emptyList());
|
when(folders.currentUserWorkflowPrintVersionIds()).thenReturn(Collections.singletonList(
|
java.util.UUID.fromString("00000000-0000-0000-0000-000000000101")));
|
assertFalse(service.list(page, null, null, null).isEmpty());
|
ArgumentCaptor<DmsWenjianDayinTaizhangQuery> q = ArgumentCaptor.forClass(DmsWenjianDayinTaizhangQuery.class);
|
verify(mapper).selectCount(q.capture());
|
verify(mapper).selectPage(same(q.getValue()));
|
assertEquals("current-user", q.getValue().getUserId());
|
assertEquals(2, q.getValue().getApprovedFlowState());
|
assertEquals("[]", q.getValue().getFolderIdsJson());
|
assertEquals("[\"00000000-0000-0000-0000-000000000101\"]", q.getValue().getWorkflowPrintVersionIdsJson());
|
}
|
|
@Test
|
void emptyFolderScopeReturnsZeroWithoutQueryingTasks() {
|
when(folders.currentUserPrintFolderIds()).thenReturn(Collections.emptyList());
|
assertTrue(service.list(page, null, null, null).isEmpty());
|
assertEquals(0, page.getTotal());
|
verifyNoInteractions(mapper);
|
}
|
}
|