刘光辉
3 小时以前 06f314545ac3514d7ce28939920866ae8188d31c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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);
    }
}