刘光辉
8 小时以前 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
package jnpf.base.service;
 
import jnpf.base.UserInfo;
import jnpf.flowable.WorkFlowApi;
import jnpf.flowable.model.filepermission.FilePermissionReader;
import jnpf.flowable.model.filepermission.FilePermissionView;
import jnpf.util.UserProvider;
import org.junit.Before;
import org.junit.Test;
import org.mockito.MockedStatic;
import org.springframework.beans.factory.ObjectProvider;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
 
public class UploadFilePermissionQueryTest {
    private WorkFlowApi workflow;
    private ObjectProvider<FilePermissionReader> local;
    private UploadFilePermissionQuery query;
 
    @Before @SuppressWarnings("unchecked") public void setup() {
        workflow = mock(WorkFlowApi.class);
        local = mock(ObjectProvider.class);
        query = new UploadFilePermissionQuery(workflow, local);
    }
 
    @Test public void tokenlessCallbackOwnerStaysInCurrentExecutionContext() {
        UserInfo owner = new UserInfo(); owner.setUserId("lease-owner"); owner.setTenantId("tenant");
        assertNull(owner.getToken());
        FilePermissionView result = FilePermissionView.legacy("task", "form");
        when(local.getIfAvailable()).thenReturn((task, form) -> {
            assertSame(owner, UserProvider.getLocalLoginUser());
            assertEquals("task", task); assertEquals("form", form);
            return result;
        });
        try (MockedStatic<UserProvider> users = mockStatic(UserProvider.class)) {
            users.when(UserProvider::getLocalLoginUser).thenReturn(owner);
            assertSame(result, query.current("task", "form"));
        }
        verifyNoInteractions(workflow);
    }
 
    @Test public void localDenialNeverFallsBackToRemoteIdentity() {
        FilePermissionReader reader = mock(FilePermissionReader.class);
        FilePermissionView denied = FilePermissionView.unavailable("task", "form", "PERMISSION_UNAVAILABLE");
        when(local.getIfAvailable()).thenReturn(reader);
        when(reader.current("task", "form")).thenReturn(denied);
        assertSame(denied, query.current("task", "form"));
        verifyNoInteractions(workflow);
    }
 
    @Test public void localFailureNeverFallsBackToRemoteIdentity() {
        FilePermissionReader reader = mock(FilePermissionReader.class);
        when(local.getIfAvailable()).thenReturn(reader);
        when(reader.current("task", "form")).thenThrow(new IllegalStateException("unavailable"));
        try {
            query.current("task", "form");
            fail("local failure must stop the action");
        } catch (IllegalStateException expected) {
            assertEquals("unavailable", expected.getMessage());
        }
        verifyNoInteractions(workflow);
    }
 
    @Test public void separateDeploymentRetainsCurrentUserRemoteQuery() {
        FilePermissionView result = FilePermissionView.legacy("task", "form");
        when(workflow.filePermissions("task", "form")).thenReturn(result);
        assertSame(result, query.current("task", "form"));
        verify(workflow).filePermissions("task", "form");
    }
    @Test public void publishedFormReuseKeepsLocalDenialAndRemoteDeploymentBoundary() {
        FilePermissionReader reader = mock(FilePermissionReader.class);
        FilePermissionView denied = FilePermissionView.unavailable("task", "form", "PERMISSION_UNAVAILABLE");
        when(local.getIfAvailable()).thenReturn(reader);
        when(reader.currentWithPublishedForm("task","form","{}" )).thenReturn(denied);
        assertSame(denied,query.currentWithPublishedForm("task","form","{}"));
        verifyNoInteractions(workflow);
        when(local.getIfAvailable()).thenReturn(null);
        when(workflow.filePermissions("task","form")).thenReturn(denied);
        assertSame(denied,query.currentWithPublishedForm("task","form","{}"));
        verify(workflow).filePermissions("task","form");
    }
 
}