/*
* (C) Copyright 2006-2007 Nuxeo SA (http://nuxeo.com/) and others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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.
*
* Contributors:
* Nuxeo - initial API and implementation
*
* $Id: TestLayoutService.java 28493 2008-01-04 19:51:30Z sfermigier $
*/
package org.nuxeo.ecm.platform.layout.core.tests;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.nuxeo.ecm.platform.forms.layout.api.BuiltinModes;
import org.nuxeo.ecm.platform.forms.layout.api.FieldDefinition;
import org.nuxeo.ecm.platform.forms.layout.api.LayoutDefinition;
import org.nuxeo.ecm.platform.forms.layout.api.WidgetType;
import org.nuxeo.ecm.platform.forms.layout.api.WidgetTypeConfiguration;
import org.nuxeo.ecm.platform.forms.layout.api.WidgetTypeDefinition;
import org.nuxeo.ecm.platform.forms.layout.api.service.LayoutStore;
import org.nuxeo.runtime.api.Framework;
import org.nuxeo.runtime.test.NXRuntimeTestCase;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
/**
* Test layout service API
*
* @author <a href="mailto:at@nuxeo.com">Anahide Tchertchian</a>
*/
public class TestLayoutStoreService extends NXRuntimeTestCase {
private LayoutStore service;
@Before
public void setUp() throws Exception {
super.setUp();
deployBundle("org.nuxeo.ecm.platform.forms.layout.core");
deployContrib("org.nuxeo.ecm.platform.forms.layout.core.tests", "layouts-core-test-contrib.xml");
service = Framework.getService(LayoutStore.class);
assertNotNull(service);
}
/**
* Non-regression test for NXP-13695.
*/
@Test
public void testLayoutUnregister() throws Exception {
LayoutDefinition l = service.getLayoutDefinition("testCategory", "testLayout");
assertNotNull(l);
assertEquals(4, l.getRows().length);
deployContrib("org.nuxeo.ecm.platform.forms.layout.core.tests", "layouts-core-test-override-contrib.xml");
// check override
l = service.getLayoutDefinition("testCategory", "testLayout");
assertNotNull(l);
assertEquals(0, l.getRows().length);
undeployContrib("org.nuxeo.ecm.platform.forms.layout.core.tests", "layouts-core-test-override-contrib.xml");
// check back to original def
l = service.getLayoutDefinition("testCategory", "testLayout");
assertNotNull(l);
assertEquals(4, l.getRows().length);
}
@Test
public void testWidgetType() throws Exception {
WidgetType wType = service.getWidgetType("testCategory", "test");
assertEquals("test", wType.getName());
assertEquals(2, wType.getProperties().size());
assertEquals(DummyWidgetTypeHandler.class.getName(), wType.getWidgetTypeClass().getName());
WidgetTypeDefinition wTypeDef = service.getWidgetTypeDefinition("testCategory", "test");
assertEquals("test", wTypeDef.getName());
assertEquals(2, wTypeDef.getProperties().size());
assertEquals(DummyWidgetTypeHandler.class.getName(), wTypeDef.getHandlerClassName());
WidgetTypeConfiguration conf = wTypeDef.getConfiguration();
assertNotNull(conf);
assertEquals("Test widget type", conf.getTitle());
assertEquals("<p>This is a test widget type</p>", conf.getDescription());
assertEquals("test", conf.getDemoId());
assertTrue(conf.isDemoPreviewEnabled());
Map<String, List<LayoutDefinition>> fieldLayouts = conf.getFieldLayouts();
assertNotNull(fieldLayouts);
assertEquals(1, fieldLayouts.size());
assertEquals(1, fieldLayouts.get(BuiltinModes.ANY).size());
assertEquals(1, fieldLayouts.get(BuiltinModes.ANY).get(0).getColumns());
Map<String, Serializable> confProps = conf.getConfProperties();
assertNotNull(confProps);
assertEquals(2, confProps.size());
assertEquals("foo", confProps.get("confProp"));
assertEquals("dc:title", confProps.get("sortProperty"));
assertFalse(conf.isComplex());
assertFalse(conf.isList());
List<String> supportedTypes = conf.getSupportedFieldTypes();
assertNotNull(supportedTypes);
assertEquals(1, supportedTypes.size());
assertEquals("string", supportedTypes.get(0));
List<String> defaultTypes = conf.getDefaultFieldTypes();
assertNotNull(defaultTypes);
assertEquals(1, defaultTypes.size());
assertEquals("string", defaultTypes.get(0));
List<FieldDefinition> defaultFieldDefs = conf.getDefaultFieldDefinitions();
assertNotNull(defaultFieldDefs);
assertEquals(2, defaultFieldDefs.size());
assertEquals("dc:title", defaultFieldDefs.get(0).getPropertyName());
assertEquals("data.ref", defaultFieldDefs.get(1).getPropertyName());
List<String> categories = conf.getCategories();
assertNotNull(categories);
assertEquals(2, categories.size());
List<LayoutDefinition> layouts = conf.getPropertyLayouts(BuiltinModes.EDIT, BuiltinModes.ANY);
assertNotNull(layouts);
assertEquals(2, layouts.size());
List<String> supportedControls = conf.getSupportedControls();
assertNotNull(supportedControls);
assertEquals(2, supportedControls.size());
assertTrue(supportedControls.contains("requireSurroundingForm"));
assertTrue(supportedControls.contains("handlingLabels"));
assertTrue(conf.isHandlingLabels());
List<WidgetTypeDefinition> wTypeDefs = service.getWidgetTypeDefinitions("testCategory");
assertNotNull(wTypeDefs);
assertEquals(3, wTypeDefs.size());
assertEquals(wTypeDef, wTypeDefs.get(0));
// same contribs (aliases)
assertEquals(wTypeDef, wTypeDefs.get(1));
}
/**
* Checks that "template" widget type is the implicit one when no class is declared.
*
* @since 7.3
*/
@Test
public void testWidgetTypeNullHandler() throws Exception {
WidgetType wType = service.getWidgetType("testCategory", "complex");
assertNotNull(wType);
assertEquals("complex", wType.getName());
assertNull(wType.getWidgetTypeClass());
}
}