package jnpf.base.service; import jnpf.base.entity.ModuleButtonEntity; import jnpf.base.entity.ModuleEntity; import jnpf.base.entity.VisualdevEntity; import jnpf.base.model.button.ButtonListVO; import jnpf.flowable.TemplateApi; import jnpf.onlinedev.VisualdevOnlineApi; import org.junit.Test; import java.util.Collections; import java.util.List; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; public class MenuActionCandidateServiceTest { @Test public void extractsVisibleBuiltInAndCustomButtonsWithoutDuplicates() { String columns = "{\"btnsList\":[{\"value\":\"add\",\"label\":\"新增\",\"show\":true}," + "{\"value\":\"download\",\"label\":\"导出\",\"show\":false}]," + "\"columnBtnsList\":[{\"value\":\"edit\",\"label\":\"编辑\",\"show\":true}]," + "\"customBtnsList\":[{\"value\":\"order.approve\",\"label\":\"审批\"}," + "{\"value\":\"btn_add\",\"label\":\"重复\"}]}"; List result = MenuActionCandidateService.extractCandidates(columns, Collections.emptySet(), null); assertEquals(3, result.size()); assertEquals("btn_add", result.get(0).getEnCode()); assertEquals("新增", result.get(0).getFullName()); assertEquals("btn_edit", result.get(1).getEnCode()); assertEquals("order.approve", result.get(2).getEnCode()); assertEquals("审批", result.get(2).getFullName()); } @Test public void resolvesFlowFormAndAppButtonsAndExcludesExistingCodes() { ModuleService modules = mock(ModuleService.class); ModuleButtonService buttons = mock(ModuleButtonService.class); TemplateApi templates = mock(TemplateApi.class); VisualdevOnlineApi forms = mock(VisualdevOnlineApi.class); MenuActionCandidateService service = new MenuActionCandidateService(modules, buttons, templates, forms); ModuleEntity menu = new ModuleEntity(); menu.setType(9); menu.setCategory("App"); menu.setPropertyJson("{\"moduleId\":\"flow-1\"}"); when(modules.getInfo("menu-1")).thenReturn(menu); when(templates.getFormByFlowId("flow-1")).thenReturn("form-1"); VisualdevEntity form = new VisualdevEntity(); form.setColumnData("{\"btnsList\":[{\"value\":\"web\",\"label\":\"Web按钮\"}]}"); form.setAppColumnData("{\"btnsList\":[{\"value\":\"add\",\"label\":\"新增\"}]," + "\"customBtnsList\":[{\"value\":\"order.approve\",\"label\":\"审批\"}]}"); when(forms.getReleaseInfo("form-1")).thenReturn(form); ModuleButtonEntity existing = new ModuleButtonEntity(); existing.setEnCode("btn_add"); when(buttons.getListByModuleIds("menu-1")).thenReturn(Collections.singletonList(existing)); List result = service.getCandidates("menu-1", "审批"); assertEquals(1, result.size()); assertEquals("order.approve", result.get(0).getEnCode()); verify(templates).getFormByFlowId("flow-1"); verify(forms).getReleaseInfo("form-1"); } @Test public void resolvesWebFormButtonsFromLinkedForm() { ModuleService modules = mock(ModuleService.class); ModuleButtonService buttons = mock(ModuleButtonService.class); TemplateApi templates = mock(TemplateApi.class); VisualdevOnlineApi forms = mock(VisualdevOnlineApi.class); MenuActionCandidateService service = new MenuActionCandidateService(modules, buttons, templates, forms); ModuleEntity menu = new ModuleEntity(); menu.setType(3); menu.setCategory("Web"); menu.setPropertyJson("{\"moduleId\":\"form-2\"}"); when(modules.getInfo("menu-2")).thenReturn(menu); VisualdevEntity form = new VisualdevEntity(); form.setColumnData("{\"columnBtnsList\":[{\"value\":\"edit\",\"label\":\"编辑\",\"show\":true}]}"); when(forms.getReleaseInfo("form-2")).thenReturn(form); when(buttons.getListByModuleIds("menu-2")).thenReturn(Collections.emptyList()); List result = service.getCandidates("menu-2", null); assertEquals(1, result.size()); assertEquals("btn_edit", result.get(0).getEnCode()); verify(forms).getReleaseInfo("form-2"); } }