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