package com.openkm.misc; import java.io.FileInputStream; import java.util.Iterator; import java.util.List; import java.util.Map; import junit.framework.TestCase; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.openkm.bean.PropertyGroup; import com.openkm.bean.form.Button; import com.openkm.bean.form.Download; import com.openkm.bean.form.FormElement; import com.openkm.bean.form.Input; import com.openkm.bean.form.Option; import com.openkm.bean.form.Select; import com.openkm.bean.form.TextArea; import com.openkm.util.FormUtils; public class FormsTest extends TestCase { private static Logger log = LoggerFactory.getLogger(FormsTest.class); private static final String BASE_DIR = "src/test/resources"; public FormsTest(String name) { super(name); } public static void main(String[] args) throws Exception { FormsTest test = new FormsTest("main"); test.setUp(); test.testWorkflow(); test.testPropertyGroups(); test.tearDown(); } public void testWorkflow() throws Exception { log.debug("testWorkflow()"); FileInputStream fis = new FileInputStream(BASE_DIR + "/forms.xml"); Map<String, List<FormElement>> forms = FormUtils.parseWorkflowForms(fis); assertFalse(forms.isEmpty()); fis.close(); // Task "start" List<FormElement> formStart = forms.get("start"); assertNotNull(formStart); Iterator<FormElement> formStartIt = formStart.iterator(); FormElement startFe = formStartIt.next(); assertTrue(startFe instanceof Input); assertEquals(((Input) startFe).getLabel(), "Quantity"); startFe = formStartIt.next(); assertTrue(startFe instanceof Button); assertEquals(((Button) startFe).getLabel(), "Save"); assertFalse(formStartIt.hasNext()); // Task "user_info" List<FormElement> formUserInfo = forms.get("user_info"); assertNotNull(formUserInfo); Iterator<FormElement> formUserInfoIt = formUserInfo.iterator(); FormElement userInputFe = formUserInfoIt.next(); assertTrue(userInputFe instanceof Input); assertEquals(((Input) userInputFe).getLabel(), "Name"); assertEquals(((Input) userInputFe).getName(), "name"); userInputFe = formUserInfoIt.next(); assertTrue(userInputFe instanceof Input); assertEquals(((Input) userInputFe).getLabel(), "Surname"); assertEquals(((Input) userInputFe).getName(), "surname"); userInputFe = formUserInfoIt.next(); assertTrue(userInputFe instanceof TextArea); assertEquals(((TextArea) userInputFe).getLabel(), "Info"); assertEquals(((TextArea) userInputFe).getName(), "info"); userInputFe = formUserInfoIt.next(); assertTrue(userInputFe instanceof Select); assertEquals(((Select) userInputFe).getLabel(), "Type"); assertEquals(((Select) userInputFe).getName(), "type"); assertEquals(((Select) userInputFe).getType(), "simple"); assertEquals(((Select) userInputFe).getOptions().size(), 3); Iterator<Option> it = ((Select) userInputFe).getOptions().iterator(); Option opt = it.next(); assertEquals(opt.getLabel(), "Type 1"); assertEquals(opt.getValue(), "t1"); assertFalse(opt.isSelected()); opt = it.next(); assertEquals(opt.getLabel(), "Type 2"); assertEquals(opt.getValue(), "t2"); assertTrue(opt.isSelected()); opt = it.next(); assertEquals(opt.getLabel(), "Type 3"); assertEquals(opt.getValue(), "t3"); assertFalse(opt.isSelected()); userInputFe = formUserInfoIt.next(); assertTrue(userInputFe instanceof Button); assertEquals(((Button) userInputFe).getLabel(), "Goto 1"); assertEquals(((Button) userInputFe).getTransition(), "route 1"); userInputFe = formUserInfoIt.next(); assertTrue(userInputFe instanceof Button); assertEquals(((Button) userInputFe).getLabel(), "Goto 2"); assertEquals(((Button) userInputFe).getTransition(), "route 2"); assertFalse(formUserInfoIt.hasNext()); // Task "download" List<FormElement> formDownload = forms.get("download"); assertNotNull(formDownload); Iterator<FormElement> formDownloadIt = formDownload.iterator(); FormElement downloadFe = formDownloadIt.next(); assertTrue(downloadFe instanceof Download); assertEquals(((Download) downloadFe).getLabel(), "Download"); Download download = (Download) downloadFe; assertNotNull(download.getNodes()); assertFalse(download.getNodes().isEmpty()); downloadFe = formDownloadIt.next(); assertTrue(downloadFe instanceof Button); assertEquals(((Button) downloadFe).getLabel(), "Next"); assertFalse(formDownloadIt.hasNext()); } public void testPropertyGroups() throws Exception { String pgForm = BASE_DIR + "/PropertyGroups.xml"; Map<PropertyGroup, List<FormElement>> pgForms = FormUtils.parsePropertyGroupsForms(pgForm); assertFalse(pgForms.isEmpty()); List<FormElement> consulting = FormUtils.getPropertyGroupForms(pgForms, "okg:consulting"); assertNotNull(consulting); List<FormElement> technology = FormUtils.getPropertyGroupForms(pgForms, "okg:technology"); assertNotNull(technology); Iterator<FormElement> consultingIt = consulting.iterator(); FormElement consultingFe = consultingIt.next(); assertTrue(consultingFe instanceof Input); assertEquals(((Input) consultingFe).getLabel(), "Name"); assertEquals(((Input) consultingFe).getName(), "okp:consulting.name"); consultingFe = consultingIt.next(); assertTrue(consultingFe instanceof TextArea); assertEquals(((TextArea) consultingFe).getLabel(), "Comment"); assertEquals(((TextArea) consultingFe).getName(), "okp:consulting.comment"); assertFalse(consultingIt.hasNext()); Iterator<FormElement> technologyIt = technology.iterator(); FormElement technologyFe = technologyIt.next(); assertTrue(technologyFe instanceof Select); assertEquals(((Select) technologyFe).getLabel(), "Language"); assertEquals(((Select) technologyFe).getName(), "okp:technology.language"); technologyFe = technologyIt.next(); assertTrue(technologyFe instanceof Input); assertEquals(((Input) technologyFe).getLabel(), "Comment"); assertEquals(((Input) technologyFe).getName(), "okp:technology.comment"); technologyFe = technologyIt.next(); assertTrue(technologyFe instanceof TextArea); assertEquals(((TextArea) technologyFe).getLabel(), "Description"); assertEquals(((TextArea) technologyFe).getName(), "okp:technology.description"); assertFalse(technologyIt.hasNext()); } }