package jnpf.flowable.util; import org.junit.Test; import java.util.Arrays; import java.time.LocalDate; import java.time.ZoneId; import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.any; import jnpf.base.entity.DictionaryDataEntity; import jnpf.base.model.datainterface.DataInterfacePage; import jnpf.permission.entity.UserEntity; public class FlowAuditTitleUtilTest { private static final String FORM = "{\"fields\":[" + "{\"config\":{\"children\":[{\"vModel\":\"name\",\"config\":{\"biz_log_enabled\":true}}]}}," + "{\"vModel\":\"tableFieldA\",\"config\":{\"jnpfKey\":\"table\",\"children\":[" + "{\"vModel\":\"batch\",\"config\":{\"biz_log_enabled\":true}}," + "{\"vModel\":\"memo\",\"config\":{\"biz_log_enabled\":true}}," + "{\"vModel\":\"ignored\",\"config\":{\"biz_log_enabled\":false}}]}}," + "{\"vModel\":\"biz_sign\",\"config\":{\"biz_log_enabled\":true}}]}"; @Test public void usesOnlyConfiguredValuesFromFirstChildRow() { Map first = new LinkedHashMap<>(); first.put("batch", "B-01"); first.put("memo", ""); first.put("ignored", "hidden"); Map second = new LinkedHashMap<>(); second.put("batch", "B-02"); second.put("memo", "second row"); Map data = new HashMap<>(); data.put("name", "申请单"); data.put("tableFieldA", Arrays.asList(first, second)); data.put("biz_sign", "secret"); assertEquals("申请单/B-01", FlowAuditTitleUtil.suffix(FORM, data)); } @Test public void doesNotFallbackToSecondRowWhenFirstIsBlank() { Map data = new HashMap<>(); data.put("tableFieldA", Arrays.asList(Collections.emptyMap(), Collections.singletonMap("batch", "B-02"))); assertNull(FlowAuditTitleUtil.suffix(FORM, data)); } @Test public void appendsOnlyOnceToExistingTaskName() { assertEquals("审核申请/申请单/B-01", FlowAuditTitleUtil.append("审核申请", "申请单/B-01")); assertEquals("审核申请/申请单/B-01", FlowAuditTitleUtil.append("审核申请/申请单/B-01", "申请单/B-01")); assertEquals("审核申请", FlowAuditTitleUtil.append("审核申请", null)); } @Test public void resolvesUserDictionaryAndStaticSelectLabels() { ServiceUtil service = mock(ServiceUtil.class); UserEntity user = new UserEntity(); user.setId("u1"); user.setRealName("张三"); when(service.getUserName(Collections.singletonList("u1"))).thenReturn(Collections.singletonList(user)); DictionaryDataEntity dictionary = new DictionaryDataEntity(); dictionary.setId("d1"); dictionary.setFullName("已批准"); when(service.getDictionaryData("status")).thenReturn(Collections.singletonList(dictionary)); String form = "{\"fields\":[" + "{\"vModel\":\"user\",\"config\":{\"jnpfKey\":\"userSelect\",\"biz_log_enabled\":true}}," + "{\"vModel\":\"status\",\"config\":{\"jnpfKey\":\"select\",\"dataType\":\"dictionary\",\"dictionaryType\":\"status\",\"biz_log_enabled\":true}}," + "{\"vModel\":\"grade\",\"config\":{\"jnpfKey\":\"select\",\"dataType\":\"static\",\"biz_log_enabled\":true}," + "\"props\":{\"value\":\"id\",\"label\":\"fullName\"},\"options\":[{\"id\":\"a\",\"fullName\":\"A级\"}]}]}"; Map data = new HashMap<>(); data.put("user", "u1"); data.put("status", "d1"); data.put("grade", "a"); assertEquals("张三/已批准/A级", FlowAuditTitleUtil.suffix(form, data, new FlowAuditTitleValueResolver(service))); } @Test public void resolvesPopupLabelAndFormatsDate() { ServiceUtil service = mock(ServiceUtil.class); when(service.getInterfaceRows(eq("items"), any(DataInterfacePage.class))) .thenReturn(Collections.singletonList(Map.of("id", "p1", "name", "试剂一"))); String form = "{\"fields\":[" + "{\"vModel\":\"item\",\"interfaceId\":\"items\",\"propsValue\":\"id\"," + "\"relationField\":\"name\",\"config\":{\"jnpfKey\":\"popupSelect\",\"biz_log_enabled\":true}}," + "{\"vModel\":\"day\",\"format\":\"yyyy-MM-dd\"," + "\"config\":{\"jnpfKey\":\"date\",\"biz_log_enabled\":true}}]}"; Map data = new HashMap<>(); data.put("item", "p1"); data.put("day", LocalDate.of(2024, 1, 2).atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli()); assertEquals("试剂一/2024-01-02", FlowAuditTitleUtil.suffix(form, data, new FlowAuditTitleValueResolver(service))); } }