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 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 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 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); } }