刘光辉
4 小时以前 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
package jnpf.flowable.service;
 
import jnpf.flowable.entity.TemplateNodeEntity;
import jnpf.flowable.model.filepermission.FilePermissionNativeState;
import jnpf.flowable.model.filepermission.FilePermissionPolicy.Action;
import jnpf.flowable.model.filepermission.FilePermissionView;
import jnpf.flowable.util.filepermission.FilePermissionRuntime;
import jnpf.flowable.util.filepermission.FilePermissionSnapshot;
import org.junit.Test;
 
import java.util.List;
import java.util.Map;
 
import static org.junit.Assert.*;
 
/** 同事务提交不得用尚未生成节点/经办的 RUNNING 状态核验原生表单。 */
public class DmsSubmissionFilePermissionStateTest {
    @Test public void draftCanSaveButIncompleteRunningStateMustStillFailClosed() {
        for (int status : List.of(0, 8, 9)) {
            FilePermissionView view = resolve(status, "creator", true);
            assertEquals("ready", view.getStatus());
            assertTrue(view.allows("files", Action.REPLACE));
        }
        FilePermissionView transitioning = resolve(1, "creator", true);
        assertEquals("RUNTIME_UNAVAILABLE", transitioning.getReason());
        assertFalse(transitioning.allows("files", Action.REPLACE));
    }
 
    @Test public void preSubmissionValidationRetainsFieldAndIdentityRestrictions() {
        assertFalse(resolve(0, "creator", false).allows("files", Action.REPLACE));
        assertFalse(resolve(0, "stranger", true).allows("files", Action.REPLACE));
    }
 
    private FilePermissionView resolve(int status, String user, boolean writable) {
        Map<String, Object> rule = Map.of("id", "rule", "formId", "form", "field", "files",
                "subject", "CREATOR", "trigger", "COMPLETED", "actions", Map.of("REPLACE", "DENY"));
        FilePermissionSnapshot snapshot = FilePermissionSnapshot.read(FilePermissionSnapshot.create("0", "task", "flow",
                Map.of("version", 1, "rules", List.of(rule))), "0", "task");
        FilePermissionNativeState state = new FilePermissionNativeState();
        state.setTaskId("task"); state.setFlowId("flow"); state.setFlowType(1);
        state.setCreatorId("creator"); state.setStatus(status);
        TemplateNodeEntity start = new TemplateNodeEntity();
        start.setNodeCode("start"); start.setNodeType("start"); start.setFormId("form");
        start.setNodeJson("{\"formOperates\":[{\"id\":\"files\",\"read\":true,\"write\":" + writable + "}]}");
        Map<String, Object> form = Map.of("fields", List.of(Map.of("__vModel__", "files",
                "__config__", Map.of("jnpfKey", "uploadFile"))));
        return FilePermissionRuntime.resolve(snapshot.getRules(), NativeFilePermissionRuntimeSource.project(
                "0", "form", user, snapshot, state, List.of(start), form));
    }
}