/* * Copyright (C) 2005 Alfresco, Inc. * * Licensed under the Mozilla Public License version 1.1 * with a permitted attribution clause. You may obtain a * copy of the License at * * http://www.alfresco.org/legal/license.txt * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied. See the License for the specific * language governing permissions and limitations under the * License. */ package org.alfresco.web.config; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import org.alfresco.config.Config; import org.alfresco.config.ConfigElement; import org.alfresco.config.ConfigException; import org.alfresco.config.source.FileConfigSource; import org.alfresco.config.xml.XMLConfigService; import org.alfresco.util.BaseTest; import org.alfresco.web.config.AdvancedSearchConfigElement.CustomProperty; import org.alfresco.web.config.DialogsConfigElement.DialogConfig; import org.alfresco.web.config.PropertySheetConfigElement.ItemConfig; import org.alfresco.web.config.WizardsConfigElement.ConditionalPageConfig; import org.alfresco.web.config.WizardsConfigElement.PageConfig; import org.alfresco.web.config.WizardsConfigElement.StepConfig; import org.alfresco.web.config.WizardsConfigElement.WizardConfig; /** * JUnit tests to exercise the capabilities added to the web client config * service * * @author gavinc */ public class WebClientConfigTest extends BaseTest { /** * @see junit.framework.TestCase#setUp() */ protected void setUp() throws Exception { super.setUp(); } /** * Tests the property sheet configuration classes */ public void testPropertySheetConfig() { // setup the config service String configFile = getResourcesDir() + "test-config.xml"; XMLConfigService svc = new XMLConfigService(new FileConfigSource(configFile)); svc.init(); // get hold of the property sheet config from the global section Config global = svc.getGlobalConfig(); ConfigElement globalPropSheet = global.getConfigElement("property-sheet"); assertNotNull("global property sheet element should not be null", globalPropSheet); assertTrue("config element should be an instance of PropertySheetConfigElement", (globalPropSheet instanceof PropertySheetConfigElement)); // get the property names from the global section and make sure it is the // name property List propNames = ((PropertySheetConfigElement) globalPropSheet).getItemNamesToShow(); assertTrue("There should only be one property in the list", propNames.size() == 1); assertTrue("The property name should be 'name'", propNames.get(0).equals("name")); // get the config section representing a space aspect and make sure we get // 5 properties Config spaceAspectConfig = svc.getConfig("space-aspect"); assertNotNull("Space aspect config should not be null", spaceAspectConfig); PropertySheetConfigElement spacePropConfig = (PropertySheetConfigElement) spaceAspectConfig .getConfigElement("property-sheet"); assertNotNull("Space aspect property config should not be null", spacePropConfig); propNames = spacePropConfig.getItemNamesToShow(); assertTrue("There should be 6 properties in the list", propNames.size() == 6); // make sure the property sheet config has come back with the correct data Map props = spacePropConfig.getItemsToShow(); ItemConfig descProp = props.get("description"); assertNotNull("description property config should not be null", descProp); assertEquals("display label for description should be 'Description'", descProp.getDisplayLabel(), "Description"); assertFalse("read only for description should be 'false'", descProp.isReadOnly()); ItemConfig createdDataProp = props.get("createddate"); assertNotNull("createddate property config should not be null", createdDataProp); assertEquals("display label for createddate should be null", null, createdDataProp.getDisplayLabel()); assertTrue("read only for createddate should be 'true'", createdDataProp.isReadOnly()); ItemConfig iconProp = props.get("icon"); assertNotNull("icon property config should not be null", iconProp); assertEquals("display label for icon should be null", null, iconProp.getDisplayLabel()); assertFalse("read only for icon should be 'false'", iconProp.isReadOnly()); } /** * Tests the config service by retrieving property sheet configuration using * the generic interfaces */ public void testGenericConfigElement() { // setup the config service String configFiles = getResourcesDir() + "test-config.xml"; XMLConfigService svc = new XMLConfigService(new FileConfigSource(configFiles)); svc.init(); // get the space aspect configuration Config configProps = svc.getConfig("space-aspect"); ConfigElement propsToDisplay = configProps.getConfigElement("property-sheet"); assertNotNull("property sheet config should not be null", propsToDisplay); // get all the property names using the ConfigElement interface methods List kids = propsToDisplay.getChildren(); List propNames = new ArrayList(); for (ConfigElement propElement : propsToDisplay.getChildren()) { String value = propElement.getValue(); assertNull("property value should be null", value); String propName = propElement.getAttribute("name"); propNames.add(propName); } assertTrue("There should be 6 properties", propNames.size() == 6); assertFalse("The id attribute should not be present", propsToDisplay.hasAttribute("id")); // make sure the inEditMode and readOnly flags are set correctly on the last property assertEquals("showInEditMode", "false", kids.get(5).getAttribute("showInEditMode")); assertEquals("readOnly", "true", kids.get(5).getAttribute("readOnly")); } /** * Tests the config service by retrieving property sheet configuration using * the custom config objects */ public void testGetProperties() { // setup the config service String configFiles = getResourcesDir() + "test-config.xml"; XMLConfigService svc = new XMLConfigService(new FileConfigSource(configFiles)); svc.init(); // get the space aspect configuration Config configProps = svc.getConfig("space-aspect"); PropertySheetConfigElement propsToDisplay = (PropertySheetConfigElement)configProps. getConfigElement("property-sheet"); assertNotNull("property sheet config should not be null", propsToDisplay); // get all the property names using the PropertySheetConfigElement implementation List propNames = propsToDisplay.getItemNamesToShow(); // make sure the generic interfaces are also returning the correct data List kids = propsToDisplay.getChildren(); assertNotNull("kids should not be null", kids); assertTrue("There should be more than one child", kids.size() > 1); assertEquals("There should be 6 properties", propNames.size() == 6, true); assertFalse("The id attribute should not be present", propsToDisplay.hasAttribute("id")); } public void testPropertyEditing() { // setup the config service String configFiles = getResourcesDir() + "test-config.xml"; XMLConfigService svc = new XMLConfigService(new FileConfigSource(configFiles)); svc.init(); Config propEditConfig = svc.getConfig("Property Editing"); assertNotNull("Property Editing section should not be null", propEditConfig); PropertySheetConfigElement propSheet = (PropertySheetConfigElement)propEditConfig. getConfigElement("property-sheet"); assertNotNull("property-sheet config should not be null", propSheet); // make sure the list of names method works correctly List itemNamesToEdit = propSheet.getEditableItemNamesToShow(); assertNotNull("itemNamesToEdit should not be null", itemNamesToEdit); assertEquals("Number of properties", 3, itemNamesToEdit.size()); // make sure the property names are correct assertEquals("first property name", "name", itemNamesToEdit.get(0)); assertEquals("second property name", "description", itemNamesToEdit.get(1)); assertEquals("third property name", "icon", itemNamesToEdit.get(2)); // make sure the map has the correct number of items Map itemsToEditMap = propSheet.getEditableItemsToShow(); assertNotNull("itemsToEditMap should not be null", itemsToEditMap); assertEquals("Number of properties", 3, itemsToEditMap.size()); // make sure the icon property is set as read only ItemConfig item = itemsToEditMap.get("icon"); assertNotNull("icon should not be null", item); assertTrue("icon property readOnly status should be true", item.isReadOnly()); // make the size property is unavailable item = itemsToEditMap.get("size"); assertNull("size should be null", item); // make sure the list has the correct numbe of items Collection itemsToEdit = propSheet.getEditableItemsToShow().values(); assertNotNull("itemsToEdit should not be null", itemsToEdit); assertEquals("Number of properties", 3, itemsToEdit.size()); } public void testPropertyOverride() { // setup the config service List configFiles = new ArrayList(2); configFiles.add(getResourcesDir() + "test-config.xml"); configFiles.add(getResourcesDir() + "test-config-override.xml"); XMLConfigService svc = new XMLConfigService(new FileConfigSource(configFiles)); svc.init(); // get the config for the size property in the space-aspect property sheet PropertySheetConfigElement propSheet = ((PropertySheetConfigElement)svc.getConfig("space-aspect"). getConfigElement(PropertySheetConfigElement.CONFIG_ELEMENT_ID)); assertNotNull("propSheet should not be null", propSheet); // make sure the list and map numbers are correct assertEquals("prop names to show size", 6, propSheet.getItemNamesToShow().size()); assertEquals("props to show size", 6, propSheet.getItemsToShow().size()); assertEquals("edit prop names to show size", 5, propSheet.getEditableItemNamesToShow().size()); assertEquals("edit props to show size", 5, propSheet.getEditableItemsToShow().size()); PropertySheetConfigElement.PropertyConfig propConfig = (PropertySheetConfigElement.PropertyConfig)propSheet.getItemsToShow().get("size"); assertNotNull("propConfig should not be null", propConfig); // make sure config has been overridden assertTrue("size should be shown in edit mode", propConfig.isShownInEditMode()); assertTrue("size property should be read only", propConfig.isReadOnly()); assertNotNull("size property should be in edit map", propSheet.getEditableItemsToShow().get("size")); // get the icon propConfig = (PropertySheetConfigElement.PropertyConfig)propSheet.getItemsToShow().get("icon"); assertNotNull("propConfig should not be null", propConfig); } /** * Tests the custom client configuration objects */ public void testClientConfig() { // setup the config service String configFiles = getResourcesDir() + "test-config.xml"; XMLConfigService svc = new XMLConfigService(new FileConfigSource(configFiles)); svc.init(); // get the global config and from that the client config ClientConfigElement clientConfig = (ClientConfigElement)svc.getGlobalConfig(). getConfigElement(ClientConfigElement.CONFIG_ELEMENT_ID); assertNotNull("client config", clientConfig); assertEquals("error page", "/jsp/error.jsp", clientConfig.getErrorPage()); assertEquals("login page", "/jsp/login.jsp", clientConfig.getLoginPage()); assertEquals("home space permission", "Consumer", clientConfig.getHomeSpacePermission()); assertEquals("help url", "http://www.alfresco.org/help/webclient", clientConfig.getHelpUrl()); assertEquals("edit link type", "http", clientConfig.getEditLinkType()); assertEquals("from address", "alfresco@alfresco.org", clientConfig.getFromEmailAddress()); assertEquals("recent spaces", 6, clientConfig.getRecentSpacesItems()); assertEquals("search minimum", 3, clientConfig.getSearchMinimum()); assertTrue("shelf visible", clientConfig.isShelfVisible()); } public void testClientOverride() { // setup the config service List configFiles = new ArrayList(2); configFiles.add(getResourcesDir() + "test-config.xml"); configFiles.add(getResourcesDir() + "test-config-override.xml"); XMLConfigService svc = new XMLConfigService(new FileConfigSource(configFiles)); svc.init(); // try and get the global config section Config globalSection = svc.getGlobalConfig(); assertNotNull("global section", globalSection); // get the client config ClientConfigElement clientConfig = (ClientConfigElement)globalSection. getConfigElement(ClientConfigElement.CONFIG_ELEMENT_ID); assertNotNull("client config", clientConfig); // make sure the error page is still set as the default assertEquals("error page", "/jsp/error.jsp", clientConfig.getErrorPage()); assertEquals("login page", "/jsp/login-override.jsp", clientConfig.getLoginPage()); assertEquals("home space permission", "Editor", clientConfig.getHomeSpacePermission()); assertEquals("help url", "http://www.somewhere.com/help", clientConfig.getHelpUrl()); assertEquals("edit link type", "webdav", clientConfig.getEditLinkType()); assertEquals("from address", "me@somewhere.com", clientConfig.getFromEmailAddress()); assertEquals("recent spaces", 1, clientConfig.getRecentSpacesItems()); assertEquals("search minimum", 10, clientConfig.getSearchMinimum()); assertFalse("shelf visible", clientConfig.isShelfVisible()); } /** * Tests the navigation config i.e. the custom element reader and config element */ public void testNavigation() { // setup the config service String configFiles = getResourcesDir() + "test-config.xml"; XMLConfigService svc = new XMLConfigService(new FileConfigSource(configFiles)); svc.init(); // *** Test the returning of a view id override Config testCfg = svc.getConfig("viewid-navigation-result"); assertNotNull("viewid-navigation-result config should not be null", testCfg); NavigationConfigElement navCfg = (NavigationConfigElement)testCfg.getConfigElement("navigation"); assertNotNull("navigation config should not be null", navCfg); // get the result for the browse view id NavigationResult navResult = navCfg.getOverride("/jsp/browse/browse.jsp", null); assertEquals("result should be '/jsp/forums/forums.jsp'", "/jsp/forums/forums.jsp", navResult.getResult()); assertFalse("isOutcome test should be false", navResult.isOutcome()); // get the result for the browse outcome navResult = navCfg.getOverride(null, "browse"); assertEquals("result should be '/jsp/forums/topics.jsp'", "/jsp/forums/topics.jsp", navResult.getResult()); assertFalse("isOutcome test should be false", navResult.isOutcome()); // get the result when passing both the browse view id and outcome, make // sure we get the result for the outcome as it should take precedence navResult = navCfg.getOverride("/jsp/browse/browse.jsp", "browse"); assertEquals("result should be '/jsp/forums/topics.jsp'", "/jsp/forums/topics.jsp", navResult.getResult()); assertFalse("isOutcome test should be false", navResult.isOutcome()); // *** Test the returning of an outcome override testCfg = svc.getConfig("outcome-navigation-result"); assertNotNull("outcome-navigation-result config should not be null", testCfg); navCfg = (NavigationConfigElement)testCfg.getConfigElement("navigation"); assertNotNull("navigation config should not be null", navCfg); // get the result for the browse view id navResult = navCfg.getOverride("/jsp/browse/browse.jsp", null); assertEquals("result should be 'showSomethingElse'", "showSomethingElse", navResult.getResult()); assertTrue("isOutcome test should be true", navResult.isOutcome()); // get the result for the browse outcome navResult = navCfg.getOverride(null, "browse"); assertEquals("result should be 'showSomethingElse'", "showSomethingElse", navResult.getResult()); assertTrue("isOutcome test should be true", navResult.isOutcome()); // get the result when passing both the browse view id and outcome, make // sure we get the result for the outcome as it should take precedence navResult = navCfg.getOverride("/jsp/browse/browse.jsp", "browse"); assertEquals("result should be 'showSomethingElse'", "showSomethingElse", navResult.getResult()); assertTrue("isOutcome test should be true", navResult.isOutcome()); // *** Test the duplicate result config testCfg = svc.getConfig("duplicate-navigation-overrides"); assertNotNull("duplicate-navigation-overrides config should not be null", testCfg); navCfg = (NavigationConfigElement)testCfg.getConfigElement("navigation"); assertNotNull("navigation config should not be null", navCfg); // make sure the outcome result is 'newOutcome' navResult = navCfg.getOverride(null, "browse"); assertEquals("result should be 'newOutcome'", "newOutcome", navResult.getResult()); assertTrue("isOutcome test should be true", navResult.isOutcome()); // call getOverride passing a valid view id but an invalid outcome // and make sure the result is null navResult = navCfg.getOverride("/jsp/browse/browse.jsp", "nonExistentOutcome"); assertNull("result should be null", navResult); } public void testNavigationGenericConfig() { // setup the config service String configFiles = getResourcesDir() + "test-config.xml"; XMLConfigService svc = new XMLConfigService(new FileConfigSource(configFiles)); svc.init(); // do a lookup using the generic config elements and make sure the correct // info comes out Config testCfg = svc.getConfig("duplicate-navigation-overrides"); assertNotNull("duplicate-navigation-overrides config should not be null", testCfg); ConfigElement ce = testCfg.getConfigElement("navigation"); assertNotNull("navigation config should not be null", ce); List children = ce.getChildren(); assertNotNull(children); // make sure there are 2 children assertEquals("There should be 2 children", 2, children.size()); // get the first child and make sure the attributes are correct, // from-view-id should be '/jsp/browse/browse.jsp' and to-view-id // should be '/jsp/forums/forums.jsp' ConfigElement child = children.get(0); String fromViewId = child.getAttribute("from-view-id"); String fromOutcome = child.getAttribute("from-outcome"); String toViewId = child.getAttribute("to-view-id"); String toOutcome = child.getAttribute("to-outcome"); assertNull("fromOutcome", fromOutcome); assertNull("toOutcome", toOutcome); assertEquals("fromViewId", "/jsp/browse/browse.jsp", fromViewId); assertEquals("toViewId", "/jsp/forums/forums.jsp", toViewId); // get the second child and make sure the attributes are correct, // from-outcome should be 'browse' and to-outcome should be 'newOutcome' child = children.get(1); fromViewId = child.getAttribute("from-view-id"); fromOutcome = child.getAttribute("from-outcome"); toViewId = child.getAttribute("to-view-id"); toOutcome = child.getAttribute("to-outcome"); assertNull("fromViewId", fromViewId); assertNull("toViewId", toViewId); assertEquals("fromOutcome", "browse", fromOutcome); assertEquals("toOutcome", "newOutcome", toOutcome); } public void testLanguages() { // setup the config service List configFiles = new ArrayList(2); configFiles.add(getResourcesDir() + "test-config.xml"); configFiles.add(getResourcesDir() + "test-config-override.xml"); XMLConfigService svc = new XMLConfigService(new FileConfigSource(configFiles)); svc.init(); LanguagesConfigElement config = (LanguagesConfigElement)svc.getConfig("Languages"). getConfigElement(LanguagesConfigElement.CONFIG_ELEMENT_ID); assertNotNull("languages config", config); // make sure there are 3 languages returned assertEquals("number of languages", 4, config.getLanguages().size()); // make sure they are returned in order assertEquals("first language", "en_US", config.getLanguages().get(0)); assertEquals("second language", "fr_FR", config.getLanguages().get(1)); assertEquals("third language", "de_DE", config.getLanguages().get(2)); assertEquals("fourth language", "ja_JP", config.getLanguages().get(3)); // make sure the labels are correct too assertEquals("en_US", "English", config.getLabelForLanguage("en_US")); assertEquals("fr_FR", "French", config.getLabelForLanguage("fr_FR")); assertEquals("de_DE", "German", config.getLabelForLanguage("de_DE")); assertEquals("ja_JP", "Japanese", config.getLabelForLanguage("ja_JP")); // make sure the getChildren method throws an exception try { config.getChildren(); fail("getChildren() did not throw an excpetion"); } catch (ConfigException ce) { // expected } } public void testAdvancedSearch() { // setup the config service List configFiles = new ArrayList(2); configFiles.add(getResourcesDir() + "test-config.xml"); configFiles.add(getResourcesDir() + "test-config-override.xml"); XMLConfigService svc = new XMLConfigService(new FileConfigSource(configFiles)); svc.init(); AdvancedSearchConfigElement config = (AdvancedSearchConfigElement)svc.getConfig("Advanced Search"). getConfigElement(AdvancedSearchConfigElement.CONFIG_ELEMENT_ID); assertNotNull("advanced search config", config); // make sure there are 2 custom types assertEquals("number of content types", 2, config.getContentTypes().size()); // make sure they are correct assertEquals("first type", "cm:dictionaryModel", config.getContentTypes().get(0)); assertEquals("second type", "fm:post", config.getContentTypes().get(1)); // make sure there are 3 custom properties assertEquals("number of content properties", 3, config.getCustomProperties().size()); CustomProperty property = config.getCustomProperties().get(0); assertTrue("first property is type", property.Type != null); property = config.getCustomProperties().get(1); assertTrue("second property is aspect", property.Type == null); assertTrue("second property is aspect", property.Aspect != null); assertEquals("second property aspect", "app:simpleworkflow", property.Aspect); assertEquals("second property name", "app:approveStep", property.Property); property = config.getCustomProperties().get(2); assertEquals("third property name", "app:rejectStep", property.Property); assertEquals("third property display id", "reject_step", property.LabelId); // make sure the getChildren method throws an exception try { config.getChildren(); fail("getChildren() did not throw an excpetion"); } catch (ConfigException ce) { // expected } } public void testViews() { // setup the config service List configFiles = new ArrayList(2); configFiles.add(getResourcesDir() + "test-config.xml"); configFiles.add(getResourcesDir() + "test-config-override.xml"); XMLConfigService svc = new XMLConfigService(new FileConfigSource(configFiles)); svc.init(); ViewsConfigElement config = (ViewsConfigElement)svc.getConfig("Views"). getConfigElement(ViewsConfigElement.CONFIG_ELEMENT_ID); assertNotNull("views config", config); // make sure there are 4 views List views = config.getViews(); assertEquals("configured views", 4, views.size()); // make sure the views are correct assertEquals("details view renderer", "org.alfresco.web.ui.common.renderer.data.RichListRenderer$DetailsViewRenderer", views.get(0)); assertEquals("icons view renderer", "org.alfresco.web.ui.common.renderer.data.RichListRenderer$IconViewRenderer", views.get(1)); assertEquals("list view renderer", "org.alfresco.web.ui.common.renderer.data.RichListRenderer$ListViewRenderer", views.get(2)); assertEquals("bubble view renderer", "org.alfresco.web.bean.ForumsBean$TopicBubbleViewRenderer", views.get(3)); // test default views assertEquals("default view", "details", config.getDefaultView("not-there")); assertEquals("default view for topic", "bubble", config.getDefaultView("topic")); // test page sizes assertEquals("default page size", 10, config.getDefaultPageSize("not", "there")); assertEquals("forums icons page size", 20, config.getDefaultPageSize("forums", "icons")); assertEquals("forum details page size", 50, config.getDefaultPageSize("forum", "details")); assertEquals("icons view page size", 9, config.getDefaultPageSize("not-there", "icons")); // test the sort columns assertEquals("default sort column", "name", config.getDefaultSortColumn("not-there")); assertEquals("browse page sort column", "name", config.getDefaultSortColumn("browse")); assertEquals("forum page sort column", "modified", config.getDefaultSortColumn("forum")); assertEquals("topic page sort column", "created", config.getDefaultSortColumn("topic")); // test the sorting direction assertFalse("default sort direction should be ascending", config.hasDescendingSort("not-there")); assertFalse("browse screen should use an ascending sort", config.hasDescendingSort("browse")); assertTrue("topic screen should use a descending sort", config.hasDescendingSort("forum")); assertFalse("topic screen should use an ascending sort", config.hasDescendingSort("topic")); // make sure the getChildren method throws an exception try { config.getChildren(); fail("getChildren() did not throw an excpetion"); } catch (ConfigException ce) { // expected } } public void testDialogs() { // setup the config service String configFiles = getResourcesDir() + "test-config-dialogs-wizards.xml"; XMLConfigService svc = new XMLConfigService(new FileConfigSource(configFiles)); svc.init(); // get Dialogs config section Config dialogsConfig = svc.getConfig("Dialogs"); assertNotNull("dialogsConfig should not be null", dialogsConfig); // make sure the dialog-container is correct assertEquals("dialog container", "/jsp/dialog/container.jsp", dialogsConfig.getConfigElement("dialog-container").getValue()); // make sure a non existent dialog returns null assertNull("non existent dialog test should return null", dialogsConfig.getConfigElement("Non Existent Dialog")); // get the dialogs element DialogsConfigElement dialogsElement = (DialogsConfigElement)dialogsConfig. getConfigElement(DialogsConfigElement.CONFIG_ELEMENT_ID); assertNotNull("dialogsElement should not be null", dialogsElement); // make sure there are 2 items in the list and map assertEquals("map size", 2, dialogsElement.getDialogs().size()); // get the 'createSpace' dialog DialogConfig dialog = dialogsElement.getDialog("createSpace"); assertNotNull("createSpace dialog config should not be null", dialog); // make sure the info on the dialog is correct assertEquals("name", "createSpace", dialog.getName()); assertEquals("page", "/jsp/dialog/create-space.jsp", dialog.getPage()); assertEquals("managed-bean", "NewSpaceDialog", dialog.getManagedBean()); assertEquals("title-id", "create_space_title", dialog.getTitleId()); assertEquals("description-id", "create_space_description", dialog.getDescriptionId()); assertNull("title should be null", dialog.getTitle()); assertNull("description should be null", dialog.getDescription()); // get the 'spaceDetails' dialog dialog = dialogsElement.getDialog("spaceDetails"); assertNotNull("spaceDetails dialog config should not be null", dialog); // make sure the info on the dialog is correct assertEquals("name", "spaceDetails", dialog.getName()); assertEquals("page", "/jsp/dialog/space-details.jsp", dialog.getPage()); assertEquals("managed-bean", "SpaceDetailsDialog", dialog.getManagedBean()); assertEquals("title", "Space Details Dialog", dialog.getTitle()); assertEquals("description", "Space Details Dialog Decsription", dialog.getDescription()); assertNull("title-id should be null", dialog.getTitleId()); assertNull("description-id should be null", dialog.getDescriptionId()); } public void testDialogOverride() { // setup the config service List configFiles = new ArrayList(2); configFiles.add(getResourcesDir() + "test-config-dialogs-wizards.xml"); configFiles.add(getResourcesDir() + "test-config-override.xml"); XMLConfigService svc = new XMLConfigService(new FileConfigSource(configFiles)); svc.init(); // get the 'dialogs' element DialogsConfigElement dialogsElement = ((DialogsConfigElement)svc.getConfig("Dialogs"). getConfigElement(DialogsConfigElement.CONFIG_ELEMENT_ID)); // make sure there are 2 items in the list and map assertEquals("map size", 2, dialogsElement.getDialogs().size()); // get the 'createSpace' dialog DialogConfig dialog = dialogsElement.getDialog("createSpace"); assertNotNull("createSpace dialog should not be null", dialog); // make sure the page and managed bean attributes have been overridden assertEquals("page", "/custom/my-create-space.jsp", dialog.getPage()); assertEquals("managed-bean", "MyNewSpaceDialog", dialog.getManagedBean()); assertEquals("title-id", "create_space_title", dialog.getTitleId()); assertEquals("description-id", "create_space_description", dialog.getDescriptionId()); } public void testWizards() { // setup the config service String configFiles = getResourcesDir() + "test-config-dialogs-wizards.xml"; XMLConfigService svc = new XMLConfigService(new FileConfigSource(configFiles)); svc.init(); // get Dialogs config section Config wizardsConfig = svc.getConfig("Wizards"); assertNotNull("wizardsConfig should not be null", wizardsConfig); // make sure the wizard-container is correct assertEquals("wizard container", "/jsp/wizard/container.jsp", wizardsConfig.getConfigElement("wizard-container").getValue()); // make sure a non existent wizard returns null assertNull("non existent wizard should not be null", wizardsConfig.getConfigElement("Non Existent Wizard")); // get the wizards element WizardsConfigElement wizardsElement = (WizardsConfigElement)wizardsConfig. getConfigElement(WizardsConfigElement.CONFIG_ELEMENT_ID); assertNotNull("wizardsElement should not be null", wizardsElement); // make sure there are 2 items in the map assertEquals("map size", 2, wizardsElement.getWizards().size()); // get the 'exampleWizard' wizard WizardConfig wizard = wizardsElement.getWizard("exampleWizard"); assertNotNull("exampleWizard wizard should not be null", wizard); // make sure data is correct assertEquals("name", "exampleWizard", wizard.getName()); assertEquals("exampleWizard steps", 2, wizard.getNumberSteps()); assertEquals("managed-bean", "ExampleWizard", wizard.getManagedBean()); assertEquals("title", "Example Wizard Title", wizard.getTitle()); assertEquals("description", "Example Wizard Description", wizard.getDescription()); assertNull("title-id should be null", wizard.getTitleId()); assertNull("description-id should be null", wizard.getDescriptionId()); // get the 'createSpace' wizard and ensure all the data is correct wizard = wizardsElement.getWizard("createSpace"); assertEquals("name", "createSpace", wizard.getName()); assertEquals("createSpace steps", 3, wizard.getNumberSteps()); assertEquals("managed-bean", "AdvancedSpaceWizard", wizard.getManagedBean()); assertEquals("title-id", "advanced_space_details_title", wizard.getTitleId()); assertEquals("description-id", "advanced_space_details_description", wizard.getDescriptionId()); assertNull("title should be null", wizard.getTitle()); assertNull("description should be null", wizard.getDescription()); List steps = wizard.getSteps(); assertNotNull("steps should not be null", steps); // retrieve step1 information and check it is correct StepConfig step1 = steps.get(0); assertEquals("step 1 name", "details", step1.getName()); assertFalse("step 1 should not have conditional pages", step1.hasConditionalPages()); PageConfig step1Page = step1.getDefaultPage(); assertNotNull("step1Page should not be null", step1Page); assertEquals("step 1 page", "/jsp/wizard/new-space/create-from.jsp", step1Page.getPath()); assertEquals("step 1 title-id", "create_space_details_title", step1Page.getTitleId()); assertEquals("step 1 description-id", "create_space_details_desc", step1Page.getDescriptionId()); assertEquals("step 1 instruction-id", "create_space_details_instruction", step1Page.getInstructionId()); assertNull("step 1 title should be null", step1Page.getTitle()); assertNull("step 1 description should be null", step1Page.getDescription()); // check the conditional step2 data StepConfig step2 = steps.get(1); assertEquals("step 2 name", "properties", step2.getName()); assertTrue("step 2 should have conditional pages", step2.hasConditionalPages()); PageConfig step2DefaultPage = step2.getDefaultPage(); assertNotNull("step 2 default page should not be null", step2DefaultPage); assertEquals("step 2 default page", "/jsp/wizard/new-space/from-scratch.jsp", step2DefaultPage.getPath()); assertEquals("step 2 default title-id", "create_space_scratch_title", step2DefaultPage.getTitleId()); assertEquals("step 2 default description-id", "create_space_scratch_desc", step2DefaultPage.getDescriptionId()); assertEquals("step 2 default instruction-id", "create_space_scratch_instruction", step2DefaultPage.getInstructionId()); assertNull("step 2 default title should be null", step2DefaultPage.getTitle()); assertNull("step 2 default description should be null", step2DefaultPage.getDescription()); List conditionalPages = step2.getConditionalPages(); assertEquals("number of conditional pages for step 2", 1, conditionalPages.size()); ConditionalPageConfig step2CondPage = conditionalPages.get(0); assertNotNull("step 2 cond page should not be null", step2CondPage); assertEquals("step 2 conditon", "#{AdvancedSpaceWizard.createFrom == 'template'}", step2CondPage.getCondition()); assertEquals("step 2 cond page", "/jsp/wizard/new-space/from-template.jsp", step2CondPage.getPath()); assertEquals("step 2 cond title-id", "create_space_template_title", step2CondPage.getTitleId()); assertEquals("step 2 cond description-id", "create_space_template_desc", step2CondPage.getDescriptionId()); assertEquals("step 2 cond instruction-id", "create_space_template_instruction", step2CondPage.getInstructionId()); assertNull("step 2 cond title should be null", step2CondPage.getTitle()); assertNull("step 2 cond description should be null", step2CondPage.getDescription()); // check step 3 data StepConfig step3 = steps.get(2); assertEquals("step 3 name", "summary", step3.getName()); assertFalse("step 3 should not have conditional pages", step3.hasConditionalPages()); PageConfig step3Page = step3.getDefaultPage(); assertNotNull("step3Page should not be null", step3Page); assertEquals("step 3 page", "/jsp/wizard/new-space/summary.jsp", step3Page.getPath()); assertEquals("step 3 title-id", "create_space_summary_title", step3Page.getTitleId()); assertEquals("step 3 description-id", "create_space_summary_desc", step3Page.getDescriptionId()); assertEquals("step 3 instruction-id", "create_space_summary_instruction", step3Page.getInstructionId()); assertNull("step 3 title should be null", step3Page.getTitle()); assertNull("step 3 description should be null", step3Page.getDescription()); } }