package jnpf.flowable.service.dev; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import jnpf.flowable.model.templatenode.nodejson.NodeModel; import jnpf.permission.entity.UserEntity; import org.junit.Test; import java.util.*; import static org.junit.Assert.*; public class DevApprovalFillTest { private JSONObject field(String key, String id) { return JSON.parseObject("{\"__vModel__\":\"" + id + "\",\"__config__\":{\"jnpfKey\":\"" + key + "\"}}"); } @Test public void usesSignerAndNativeValueTypesWithoutInventingReferencesOrFiles() { UserEntity signer = new UserEntity(); signer.setId("signed-user"); signer.setOrganizeId("department"); signer.setPositionId("post1,post2"); assertEquals("已输入", DevApprovalFill.value(field("input", "reason"), signer, "sign")); assertNull(DevApprovalFill.value(field("input", "wenjian_id"), signer, "sign")); assertEquals("sign", DevApprovalFill.value(field("input", "biz_sign"), signer, "sign")); assertEquals("signed-user", DevApprovalFill.value(field("userSelect", "reviewer_id"), signer, "sign")); JSONObject organization = field("organizeSelect", "scope_id"); organization.put("multiple", true); assertEquals(List.of("department"), DevApprovalFill.value(organization, signer, "sign")); assertEquals("post1", DevApprovalFill.value(field("posSelect", "post_id"), signer, "sign")); assertTrue(DevApprovalFill.value(field("datePicker", "date"), signer, "sign") instanceof Long); assertNull(DevApprovalFill.value(field("uploadFile", "attachment"), signer, "sign")); assertNull(DevApprovalFill.value(field("popupSelect", "record_id"), signer, "sign")); } @Test public void fillsExistingChildRowsPreservesRealValuesAndUsesLiveDictionaryCodes() { NodeModel node = new NodeModel(); node.setFormOperates(List.of( Map.of("id", "rows-reason", "required", true), Map.of("id", "choice", "required", true))); String schema = "{\"fields\":[{\"__vModel__\":\"rows\",\"__config__\":{\"jnpfKey\":\"table\",\"children\":[{\"__vModel__\":\"reason\",\"__config__\":{\"jnpfKey\":\"input\"}}]}},{\"__vModel__\":\"choice\",\"props\":{\"value\":\"enCode\"},\"__config__\":{\"jnpfKey\":\"checkbox\",\"dataType\":\"dictionary\",\"dictionaryType\":\"dict\"}}]}"; Map data = JSON.parseObject("{\"rows\":[{\"reason\":\"真实原因\"},{\"reason\":\"\"}],\"choice\":[]}"); var problems = DevApprovalFill.fill(node, schema, data, new UserEntity(), "sign", type -> JSON.parseArray("[{\"id\":\"internal\",\"enCode\":\"yes\"}]")); assertTrue(problems.isEmpty()); assertEquals(List.of("yes"), data.get("choice")); List rows = (List) data.get("rows"); assertEquals("真实原因", ((Map) rows.get(0)).get("reason")); assertEquals("已输入", ((Map) rows.get(1)).get("reason")); data.put("rows", List.of()); assertTrue(DevApprovalFill.fill(node, schema, data, new UserEntity(), "sign", type -> null).isEmpty()); assertEquals(List.of(), data.get("rows")); } }