package jnpf.flowable.service.dev; import jnpf.flowable.model.templatenode.nodejson.NodeModel; import org.junit.Test; import java.util.*; import static org.junit.Assert.*; public class DevApprovalValidationTest { @Test public void zeroAndFalseAreValidWhileEmptySelectionsAreNot() { for (Object value : Arrays.asList("", " ", "[]", "null", List.of(), Map.of(), new String[0])) { assertTrue(DevApprovalValidation.empty(value)); } assertFalse(DevApprovalValidation.empty(0)); assertFalse(DevApprovalValidation.empty(false)); assertFalse(DevApprovalValidation.empty(List.of("department"))); } @Test public void reportsExactChildRowAndLeavesOptionalFieldsAlone() { NodeModel node = new NodeModel(); node.setFormOperates(Arrays.asList(Map.of("id", "records-file", "name", "记录文件", "required", true), Map.of("id", "scope", "required", false))); List missing = DevApprovalValidation.missing(node, Map.of("records", Arrays.asList(Map.of("file", "a.pdf"), Map.of()))); assertEquals(1, missing.size()); assertTrue(missing.get(0).contains("第2行")); } @Test public void emptyOptionalChildTableHasNoRequiredFieldInstances() { NodeModel node = new NodeModel(); node.setFormOperates(List.of(Map.of("id", "records-file", "required", true))); assertEquals(0, DevApprovalValidation.missing(node, Map.of("records", List.of())).size()); } }