/*
* (C) Copyright 2010 Nuxeo SA (http://nuxeo.com/) and contributors.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser General Public License
* (LGPL) version 2.1 which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl.html
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* Contributors:
* Anahide Tchertchian
*/
package org.nuxeo.ecm.platform.contentview.jsf.test;
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;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import org.nuxeo.ecm.core.api.ClientException;
import org.nuxeo.ecm.platform.contentview.jsf.ContentView;
import org.nuxeo.ecm.platform.contentview.jsf.ContentViewHeader;
import org.nuxeo.ecm.platform.contentview.jsf.ContentViewLayout;
import org.nuxeo.ecm.platform.contentview.jsf.ContentViewService;
import org.nuxeo.ecm.platform.query.api.PageProvider;
import org.nuxeo.ecm.platform.query.api.PageProviderService;
import org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider;
import org.nuxeo.ecm.platform.query.nxql.CoreQueryDocumentPageProvider;
import org.nuxeo.runtime.api.Framework;
import org.nuxeo.runtime.test.NXRuntimeTestCase;
/**
* @author Anahide Tchertchian
*/
public class TestContentViewService extends NXRuntimeTestCase {
protected ContentViewService service;
@Before
public void setUp() throws Exception {
super.setUp();
deployContrib("org.nuxeo.ecm.platform.query.api",
"OSGI-INF/pageprovider-framework.xml");
deployContrib("org.nuxeo.ecm.platform.contentview.jsf",
"OSGI-INF/contentview-framework.xml");
deployContrib("org.nuxeo.ecm.platform.contentview.jsf.test",
"test-contentview-contrib.xml");
service = Framework.getService(ContentViewService.class);
assertNotNull(service);
}
@Test
public void testRegistration() throws Exception {
assertNull(service.getContentView("foo"));
ContentView contentView = service.getContentView("CURRENT_DOCUMENT_CHILDREN");
assertNotNull(contentView);
// check content view attributes
assertEquals("CURRENT_DOCUMENT_CHILDREN", contentView.getName());
assertEquals("current document children", contentView.getTitle());
assertFalse(contentView.getTranslateTitle());
assertEquals("/icons/document_listing_icon.png",
contentView.getIconPath());
assertEquals("CURRENT_SELECTION_LIST",
contentView.getActionsCategories().get(0));
assertEquals("simple", contentView.getPagination());
List<ContentViewLayout> resultLayouts = contentView.getResultLayouts();
assertNotNull(resultLayouts);
assertEquals(1, resultLayouts.size());
assertEquals("document_listing", resultLayouts.get(0).getName());
assertEquals("label.document_listing.layout",
resultLayouts.get(0).getTitle());
assertTrue(resultLayouts.get(0).getTranslateTitle());
assertEquals("/icons/myicon.png", resultLayouts.get(0).getIconPath());
assertTrue(resultLayouts.get(0).getShowCSVExport());
assertEquals("search_layout", contentView.getSearchLayout().getName());
assertFalse(contentView.getSearchLayout().isFilterUnfolded());
assertNull(contentView.getSearchLayout().getTitle());
assertFalse(contentView.getSearchLayout().getTranslateTitle());
assertNull(contentView.getEmptySentence());
assertFalse(contentView.getTranslateEmptySentence());
assertFalse(contentView.getShowTitle());
assertNull(contentView.getSearchLayout().getIconPath());
assertFalse(contentView.getSearchLayout().getShowCSVExport());
assertEquals("quick",
contentView.getSearchLayout().getFilterDisplayType());
assertEquals("CURRENT_SELECTION", contentView.getSelectionListName());
List<String> eventNames = contentView.getRefreshEventNames();
assertNotNull(eventNames);
assertEquals(1, eventNames.size());
assertEquals("documentChildrenChanged", eventNames.get(0));
eventNames = contentView.getResetEventNames();
assertNotNull(eventNames);
assertEquals(0, eventNames.size());
assertFalse(contentView.getUseGlobalPageSize());
List<String> flags = contentView.getFlags();
assertNotNull(flags);
assertEquals(2, flags.size());
assertEquals("foo", flags.get(0));
assertEquals("bar", flags.get(1));
// headers
ContentViewHeader header = service.getContentViewHeader("foo");
assertNull(header);
header = service.getContentViewHeader("CURRENT_DOCUMENT_CHILDREN");
assertNotNull(header);
assertEquals("CURRENT_DOCUMENT_CHILDREN", header.getName());
assertEquals("current document children", header.getTitle());
assertEquals("/icons/document_listing_icon.png", header.getIconPath());
assertFalse(header.isTranslateTitle());
}
@Test
public void testOverride() throws Exception {
ContentView contentView = service.getContentView("CURRENT_DOCUMENT_CHILDREN_FETCH");
assertNotNull(contentView);
contentView = service.getContentView("CURRENT_DOCUMENT_CHILDREN");
assertNotNull(contentView);
assertTrue(contentView.getShowFilterForm());
assertFalse(contentView.getShowRefreshCommand());
deployContrib("org.nuxeo.ecm.platform.contentview.jsf.test",
"test-contentview-override-contrib.xml");
// check content view has been disabled correctly
contentView = service.getContentView("CURRENT_DOCUMENT_CHILDREN_FETCH");
assertNull(contentView);
assertNull(service.getContentView("foo"));
contentView = service.getContentView("CURRENT_DOCUMENT_CHILDREN");
assertNotNull(contentView);
// check content view attributes
assertEquals("CURRENT_DOCUMENT_CHILDREN", contentView.getName());
assertEquals("current document children overriden",
contentView.getTitle());
assertFalse(contentView.getTranslateTitle());
assertEquals("label.my.empty.cv.sentence",
contentView.getEmptySentence());
assertTrue(contentView.getTranslateEmptySentence());
assertTrue(contentView.getShowTitle());
assertEquals("/icons/document_listing_icon.png",
contentView.getIconPath());
assertEquals("CURRENT_SELECTION_LIST_2",
contentView.getActionsCategories().get(0));
assertEquals("simple_2", contentView.getPagination());
assertTrue(contentView.getShowFilterForm());
assertFalse(contentView.getShowRefreshCommand());
List<ContentViewLayout> resultLayouts = contentView.getResultLayouts();
assertNotNull(resultLayouts);
assertEquals(2, resultLayouts.size());
assertEquals("document_listing", resultLayouts.get(0).getName());
assertEquals("label.document_listing.layout",
resultLayouts.get(0).getTitle());
assertTrue(resultLayouts.get(0).getTranslateTitle());
assertEquals("/icons/myicon.png", resultLayouts.get(0).getIconPath());
assertTrue(resultLayouts.get(0).getShowCSVExport());
assertEquals("document_listing_2", resultLayouts.get(1).getName());
assertEquals("label.document_listing.layout_2",
resultLayouts.get(1).getTitle());
assertTrue(resultLayouts.get(1).getTranslateTitle());
assertNull(resultLayouts.get(1).getIconPath());
assertFalse(resultLayouts.get(1).getShowCSVExport());
assertEquals("search_layout_2", contentView.getSearchLayout().getName());
assertNull(contentView.getSearchLayout().getTitle());
assertFalse(contentView.getSearchLayout().getTranslateTitle());
assertNull(contentView.getSearchLayout().getIconPath());
assertFalse(contentView.getSearchLayout().getShowCSVExport());
assertTrue(contentView.getSearchLayout().isFilterUnfolded());
assertEquals("CURRENT_SELECTION_2", contentView.getSelectionListName());
List<String> eventNames = contentView.getRefreshEventNames();
assertNotNull(eventNames);
assertEquals(1, eventNames.size());
assertEquals("documentChildrenChanged", eventNames.get(0));
eventNames = contentView.getResetEventNames();
assertNotNull(eventNames);
assertEquals(0, eventNames.size());
assertTrue(contentView.getUseGlobalPageSize());
List<String> flags = contentView.getFlags();
assertNotNull(flags);
assertEquals(1, flags.size());
assertEquals("foo2", flags.get(0));
// headers
ContentViewHeader header = service.getContentViewHeader("foo");
assertNull(header);
header = service.getContentViewHeader("CURRENT_DOCUMENT_CHILDREN");
assertNotNull(header);
assertEquals("CURRENT_DOCUMENT_CHILDREN", header.getName());
assertEquals("current document children overriden", header.getTitle());
assertEquals("/icons/document_listing_icon.png", header.getIconPath());
assertFalse(header.isTranslateTitle());
// check that result layouts are not emptied after merge (see NXP-9333)
contentView = service.getContentView("CURRENT_DOCUMENT_CHILDREN_REF");
assertNotNull(contentView);
List<ContentViewLayout> rl = contentView.getResultLayouts();
assertNotNull(rl);
assertEquals(1, rl.size());
}
@Test
public void testGetContentViewNames() throws Exception {
Set<String> names = service.getContentViewNames();
assertNotNull(names);
assertEquals(15, names.size());
List<String> orderedNames = new ArrayList<String>();
orderedNames.addAll(names);
Collections.sort(orderedNames);
assertEquals("CURRENT_DOCUMENT_CHILDREN", orderedNames.get(0));
assertEquals("CURRENT_DOCUMENT_CHILDREN_FETCH", orderedNames.get(1));
assertEquals("CURRENT_DOCUMENT_CHILDREN_FETCH_REF", orderedNames.get(2));
assertEquals("CURRENT_DOCUMENT_CHILDREN_REF", orderedNames.get(3));
assertEquals("CURRENT_DOCUMENT_CHILDREN_WITH_SEARCH_DOCUMENT",
orderedNames.get(4));
assertEquals("CURRENT_DOCUMENT_CHILDREN_WITH_SEARCH_DOCUMENT_REF",
orderedNames.get(5));
// check after override too
deployContrib("org.nuxeo.ecm.platform.contentview.jsf.test",
"test-contentview-override-contrib.xml");
names = service.getContentViewNames();
assertNotNull(names);
assertEquals(14, names.size());
orderedNames = new ArrayList<String>();
orderedNames.addAll(names);
Collections.sort(orderedNames);
assertEquals("CURRENT_DOCUMENT_CHILDREN", orderedNames.get(0));
assertEquals("CURRENT_DOCUMENT_CHILDREN_FETCH_REF", orderedNames.get(1));
assertEquals("CURRENT_DOCUMENT_CHILDREN_REF", orderedNames.get(2));
assertEquals("CURRENT_DOCUMENT_CHILDREN_WITH_SEARCH_DOCUMENT",
orderedNames.get(3));
assertEquals("CURRENT_DOCUMENT_CHILDREN_WITH_SEARCH_DOCUMENT_REF",
orderedNames.get(4));
}
@Test
public void testGetContentViewHeaders() throws Exception {
Set<ContentViewHeader> headers = service.getContentViewHeaders();
assertNotNull(headers);
assertEquals(15, headers.size());
List<ContentViewHeader> sortedHeaders = new ArrayList<ContentViewHeader>();
sortedHeaders.addAll(headers);
Collections.sort(sortedHeaders);
assertEquals("CURRENT_DOCUMENT_CHILDREN",
sortedHeaders.get(0).getName());
assertEquals("current document children",
sortedHeaders.get(0).getTitle());
assertEquals("/icons/document_listing_icon.png",
sortedHeaders.get(0).getIconPath());
assertFalse(sortedHeaders.get(0).isTranslateTitle());
assertEquals("CURRENT_DOCUMENT_CHILDREN_FETCH",
sortedHeaders.get(1).getName());
assertEquals("CURRENT_DOCUMENT_CHILDREN_FETCH_REF",
sortedHeaders.get(2).getName());
assertEquals("CURRENT_DOCUMENT_CHILDREN_REF",
sortedHeaders.get(3).getName());
assertEquals("CURRENT_DOCUMENT_CHILDREN_WITH_SEARCH_DOCUMENT",
sortedHeaders.get(4).getName());
assertEquals("CURRENT_DOCUMENT_CHILDREN_WITH_SEARCH_DOCUMENT_REF",
sortedHeaders.get(5).getName());
}
@Test
public void testGetContentViewByFlag() throws Exception {
Set<String> names = service.getContentViewNames("foo");
assertNotNull(names);
assertEquals(2, names.size());
List<String> orderedNames = new ArrayList<String>();
orderedNames.addAll(names);
Collections.sort(orderedNames);
assertEquals("CURRENT_DOCUMENT_CHILDREN", orderedNames.get(0));
assertEquals("CURRENT_DOCUMENT_CHILDREN_FETCH", orderedNames.get(1));
names = service.getContentViewNames("foo2");
assertNotNull(names);
assertEquals(0, names.size());
names = service.getContentViewNames("bar");
assertNotNull(names);
assertEquals(1, names.size());
orderedNames.clear();
orderedNames.addAll(names);
Collections.sort(orderedNames);
assertEquals("CURRENT_DOCUMENT_CHILDREN", orderedNames.get(0));
names = service.getContentViewNames("not_set");
assertNotNull(names);
assertEquals(0, names.size());
// check after override too
deployContrib("org.nuxeo.ecm.platform.contentview.jsf.test",
"test-contentview-override-contrib.xml");
names = service.getContentViewNames("foo");
assertNotNull(names);
assertEquals(0, names.size());
names = service.getContentViewNames("foo2");
assertNotNull(names);
assertEquals(1, names.size());
assertEquals("CURRENT_DOCUMENT_CHILDREN", names.iterator().next());
names = service.getContentViewNames("bar");
assertNotNull(names);
assertEquals(0, names.size());
names = service.getContentViewNames("not_set");
assertNotNull(names);
assertEquals(0, names.size());
}
@Test
public void testGetContentViewHeadersByFlag() throws Exception {
Set<ContentViewHeader> headers = service.getContentViewHeaders("foo");
assertNotNull(headers);
assertEquals(2, headers.size());
List<ContentViewHeader> sortedHeaders = new ArrayList<ContentViewHeader>();
sortedHeaders.addAll(headers);
Collections.sort(sortedHeaders);
assertEquals("CURRENT_DOCUMENT_CHILDREN",
sortedHeaders.get(0).getName());
assertEquals("current document children",
sortedHeaders.get(0).getTitle());
assertEquals("/icons/document_listing_icon.png",
sortedHeaders.get(0).getIconPath());
assertFalse(sortedHeaders.get(0).isTranslateTitle());
assertEquals("CURRENT_DOCUMENT_CHILDREN_FETCH",
sortedHeaders.get(1).getName());
headers = service.getContentViewHeaders("foo2");
assertNotNull(headers);
assertEquals(0, headers.size());
headers = service.getContentViewHeaders("bar");
assertNotNull(headers);
assertEquals(1, headers.size());
sortedHeaders.clear();
sortedHeaders.addAll(headers);
Collections.sort(sortedHeaders);
assertEquals("CURRENT_DOCUMENT_CHILDREN",
sortedHeaders.get(0).getName());
headers = service.getContentViewHeaders("not_set");
assertNotNull(headers);
assertEquals(0, headers.size());
}
@Test
public void testUnknownRefPP() throws Exception {
ContentView cv = service.getContentView("UNKNOWN_REF_PP");
try {
PageProvider<?> pp = cv.getPageProvider(null, null, -1L, -1L, null);
Assert.fail("Should have triggered an exception");
} catch (Exception e) {
assertTrue(e instanceof ClientException);
assertEquals("Could not resolve page provider with name 'foo'",
e.getMessage());
}
}
@Test
public void testOverrideWithGenericPP() throws Exception {
ContentView cv = service.getContentView("OVERRIDE_PAGE_PROVIDER_WITH_GENERIC");
PageProvider<?> pp = cv.getPageProvider(null, null, -1L, -1L, null);
assertTrue(pp instanceof CoreQueryDocumentPageProvider);
assertEquals("OVERRIDE_PAGE_PROVIDER_WITH_GENERIC", pp.getName());
// check after override too
deployContrib("org.nuxeo.ecm.platform.contentview.jsf.test",
"test-contentview-override-contrib.xml");
cv = service.getContentView("OVERRIDE_PAGE_PROVIDER_WITH_GENERIC");
pp = cv.getPageProvider(null, null, -1L, -1L, null);
assertTrue(pp instanceof CoreQueryAndFetchPageProvider);
assertEquals("OVERRIDE_PAGE_PROVIDER_WITH_GENERIC", pp.getName());
}
@Test
public void testOverrideWithRefPP() throws Exception {
ContentView cv = service.getContentView("CURRENT_DOCUMENT_CHILDREN_REF");
PageProvider<?> pp = cv.getPageProvider(null, null, -1L, -1L, null);
assertTrue(pp instanceof CoreQueryDocumentPageProvider);
assertEquals("CURRENT_DOCUMENT_CHILDREN_PP", pp.getName());
// check after override too
deployContrib("org.nuxeo.ecm.platform.contentview.jsf.test",
"test-contentview-override-contrib.xml");
cv = service.getContentView("CURRENT_DOCUMENT_CHILDREN_REF");
pp = cv.getPageProvider(null, null, -1L, -1L, null);
assertTrue(pp instanceof CoreQueryDocumentPageProvider);
assertEquals("CURRENT_DOCUMENT_CHILDREN_PP_2", pp.getName());
}
@Test
public void testSetResultLayoutByName() throws Exception {
deployContrib("org.nuxeo.ecm.platform.contentview.jsf.test",
"test-contentview-override-contrib.xml");
ContentView contentView = service.getContentView("CURRENT_DOCUMENT_CHILDREN");
assertNotNull(contentView);
List<ContentViewLayout> resultLayouts = contentView.getResultLayouts();
assertEquals(2, resultLayouts.size());
ContentViewLayout currentResultLayout = contentView.getCurrentResultLayout();
assertEquals(currentResultLayout.getName(),
resultLayouts.get(0).getName());
contentView.setCurrentResultLayout(resultLayouts.get(1).getName());
currentResultLayout = contentView.getCurrentResultLayout();
assertEquals(currentResultLayout.getName(),
resultLayouts.get(1).getName());
}
@Test
public void testPageProviderRegistering() throws Exception {
PageProviderService ppService = Framework.getService(PageProviderService.class);
// CorePP
assertNotNull(ppService.getPageProviderDefinition("CURRENT_DOCUMENT_CHILDREN"));
// GenericPP
assertNotNull(ppService.getPageProviderDefinition("CURRENT_DOCUMENT_CHILDREN_FETCH"));
// NamedPP
ContentView cv = service.getContentView("NAMED_PAGE_PROVIDER");
assertEquals("PP_NAME", cv.getPageProvider().getName());
assertNotNull(ppService.getPageProviderDefinition("PP_NAME"));
assertNull(ppService.getPageProviderDefinition("NAMED_PAGE_PROVIDER"));
}
}