/*
* (C) Copyright 2011-2016 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:
* 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 static org.junit.Assert.fail;
import java.io.File;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.nuxeo.ecm.core.api.Blob;
import org.nuxeo.ecm.core.api.Blobs;
import org.nuxeo.ecm.core.api.CoreSession;
import org.nuxeo.ecm.core.api.DocumentModel;
import org.nuxeo.ecm.core.api.NuxeoException;
import org.nuxeo.ecm.core.api.SortInfo;
import org.nuxeo.ecm.core.test.CoreFeature;
import org.nuxeo.ecm.core.test.annotations.Granularity;
import org.nuxeo.ecm.core.test.annotations.RepositoryConfig;
import org.nuxeo.ecm.platform.contentview.jsf.ContentView;
import org.nuxeo.ecm.platform.contentview.jsf.ContentViewLayout;
import org.nuxeo.ecm.platform.contentview.jsf.ContentViewLayoutImpl;
import org.nuxeo.ecm.platform.contentview.jsf.ContentViewService;
import org.nuxeo.ecm.platform.contentview.jsf.ContentViewState;
import org.nuxeo.ecm.platform.contentview.jsf.ContentViewStateImpl;
import org.nuxeo.ecm.platform.contentview.json.JSONContentViewState;
import org.nuxeo.ecm.platform.query.api.PageProvider;
import org.nuxeo.ecm.platform.ui.web.jsf.MockFacesContext;
import org.nuxeo.runtime.api.Framework;
import org.nuxeo.runtime.test.runner.Deploy;
import org.nuxeo.runtime.test.runner.Features;
import org.nuxeo.runtime.test.runner.FeaturesRunner;
import org.nuxeo.runtime.test.runner.LocalDeploy;
import org.skyscreamer.jsonassert.JSONAssert;
/**
* @since 5.4.2
*/
@RunWith(FeaturesRunner.class)
@Features(CoreFeature.class)
@RepositoryConfig(cleanup = Granularity.METHOD)
@Deploy({ "org.nuxeo.ecm.platform.query.api", //
"org.nuxeo.ecm.platform.contentview.jsf", //
})
@LocalDeploy("org.nuxeo.ecm.platform.contentview.jsf.test:test-contentview-contrib.xml")
public class TestContentViewState {
@Inject
ContentViewService service;
@Inject
protected CoreSession session;
MockFacesContext facesContext;
DocumentModel currentDocument;
DocumentModel searchDocument;
Boolean booleanParam = Boolean.FALSE;
List<String> listParam = Arrays.asList("deleted", "validated");
String ENC_CURRENT_DOC_CHILDREN = "H4sIAAAAAAAAAI2Qu27DMAxF%2F4Wz4LQdtRVOgAZIUyOvJQgMVWJiAbLk6pFHjfx7KTtdOnXSFXF4eckepLMRbdxpvCxFi8Ch3K5Ws%2BWmnn6U2%2Fcsyrf5YkolYNCJE1benbVC%2F098rb8Je2Egk%2Fc0qaIa8CcGXwn9rRKebCL6AHwPEUOsO5GxWitgR2ECMpuMYXtQaAikKpyF0UpkfTgwCCi8bKZOppb6gA84BOfj3B5d9u2HX%2BlMai0lVpJHHQ3CSL0GiVZpewIefcI7WXoMycSFuLlEhj3YcVX1mFEbHWJuYDAacTDiE03xFyjMaEGcFzYYyrwZG%2FIkBpquX4nYkMEk6zBpb%2FktusE8NO5Srneza0cxH%2Bl%2Bw43bDFeTg6yfgZLjFWXKl%2BHD7e4%2FF8rF5OEBAAA%3D";
String ENC_CURRENT_DOC_CHILDREN_WITH_SEARCH_DOC = "H4sIAAAAAAAAAKWR3U4CMRCFX8XMrUuyC6hJ78iCgQSR8KMXxmw23Vls7LY4bcWV7Ls7BeUF7NX09JxvTtIjSGs8Gv%2Bk8LAoGwQB%2BXa1miw2xfgx3z7EIZ%2FO5mOWiufZZlqsJ6NVPr28QgL7codLsp%2BqQvoPY62%2BOdtPQAYi7rRkDUSawEdAapclMdsjORAvrwk4LEm%2Bja0MDXtBHMG3%2B7j7XmmMRLJ7JK%2FQxbeaxd9gJUVjK1UrrNjdT7NhLx32sttNdiMGd2I4uE75wMnoldeReV529Y7twVLloOu4gCU%2FM7WN2OPpllsdGsP2S%2FLsGjmJplJmB8JTwI5LELqg%2FbxsbeDuJmj9p50hEcp%2FE8ciAw7gF8rgY%2BW61A67H%2B4OaOu6AQAA";
@Before
public void setUp() throws Exception {
searchDocument = session.createDocumentModel("File");
searchDocument.setPropertyValue("dc:title", "search keywords");
searchDocument.setPropertyValue("dc:modified", getModifiedDate());
currentDocument = session.getRootDocument();
// set mock faces context for needed properties resolution
facesContext = new MockFacesContext();
facesContext.mapVariable("documentManager", session);
facesContext.mapVariable("searchDocument", searchDocument);
facesContext.mapVariable("currentDocument", currentDocument);
facesContext.mapVariable("booleanParam", booleanParam);
facesContext.mapVariable("listParam", listParam);
facesContext.setCurrent();
assertNotNull(FacesContext.getCurrentInstance());
}
@After
public void tearDown() {
if (facesContext != null) {
facesContext.relieveCurrent();
}
}
protected Calendar getModifiedDate() {
Calendar modified = Calendar.getInstance();
modified.setTimeInMillis(1397662663000L);
return modified;
}
@Test
public void testSaveContentView() throws Exception {
assertNull(service.saveContentView(null));
ContentView contentView = service.getContentView("CURRENT_DOCUMENT_CHILDREN");
assertNotNull(contentView);
// test bare state
ContentViewState state = service.saveContentView(contentView);
assertNotNull(state);
assertEquals("CURRENT_DOCUMENT_CHILDREN", state.getContentViewName());
assertNull(state.getPageProviderName());
assertNull(state.getCurrentPage());
assertNull(state.getPageSize());
Object[] queryParams = state.getQueryParameters();
assertNotNull(queryParams);
assertEquals(4, queryParams.length);
assertEquals(currentDocument.getId(), queryParams[0]);
assertEquals(booleanParam, queryParams[1]);
assertEquals(null, queryParams[2]);
assertEquals(listParam, queryParams[3]);
assertNull(state.getResultColumns());
ContentViewLayout resultLayout = state.getResultLayout();
assertNotNull(resultLayout);
assertEquals("document_listing", resultLayout.getName());
assertEquals("label.document_listing.layout", resultLayout.getTitle());
assertTrue(resultLayout.getTranslateTitle());
assertEquals("/icons/myicon.png", resultLayout.getIconPath());
assertTrue(resultLayout.getShowCSVExport());
assertNull(state.getSearchDocumentModel());
assertNull(state.getSortInfos());
// init provider, result columns and test save again
contentView.getPageProviderWithParams("test_parent_id", booleanParam, null, listParam);
contentView.setCurrentResultLayoutColumns(Collections.singletonList("column_1"));
state = service.saveContentView(contentView);
checkContentViewState(state, true);
}
protected void checkContentViewState(ContentViewState state, boolean withPP) {
assertNotNull(state);
assertEquals("CURRENT_DOCUMENT_CHILDREN", state.getContentViewName());
if (withPP) {
assertEquals("CURRENT_DOCUMENT_CHILDREN", state.getPageProviderName());
} else {
assertNull(state.getPageProviderName());
}
assertEquals(new Long(0), state.getCurrentPage());
assertEquals(new Long(2), state.getPageSize());
Object[] queryParams = state.getQueryParameters();
assertNotNull(queryParams);
assertEquals(4, queryParams.length);
assertEquals("test_parent_id", queryParams[0]);
assertEquals(booleanParam, queryParams[1]);
assertEquals(null, queryParams[2]);
assertEquals(listParam, queryParams[3]);
List<String> resultColumns = state.getResultColumns();
assertNotNull(resultColumns);
assertEquals(1, resultColumns.size());
assertEquals("column_1", resultColumns.get(0));
ContentViewLayout resultLayout = state.getResultLayout();
assertNotNull(resultLayout);
assertEquals("document_listing", resultLayout.getName());
assertEquals("label.document_listing.layout", resultLayout.getTitle());
assertTrue(resultLayout.getTranslateTitle());
assertEquals("/icons/myicon.png", resultLayout.getIconPath());
assertTrue(resultLayout.getShowCSVExport());
assertNull(state.getSearchDocumentModel());
List<SortInfo> sortInfos = state.getSortInfos();
assertNotNull(sortInfos);
assertEquals(1, sortInfos.size());
assertEquals("dc:title", sortInfos.get(0).getSortColumn());
assertTrue(sortInfos.get(0).getSortAscending());
}
@Test
public void testRestoreContentView() throws Exception {
assertNull(service.restoreContentView(null));
// dummy state, to test errors
ContentViewState dummyState = new ContentViewStateImpl();
dummyState.setContentViewName("DUMMY_TEST_CONTENT_VIEW");
try {
service.restoreContentView(dummyState);
fail("Should have raised a client exception");
} catch (NuxeoException e) {
assertEquals("Unknown content view with name 'DUMMY_TEST_CONTENT_VIEW'", e.getMessage());
}
// build state
ContentViewState state = new ContentViewStateImpl();
state.setContentViewName("CURRENT_DOCUMENT_CHILDREN");
state.setPageProviderName("CURRENT_DOCUMENT_CHILDREN");
state.setCurrentPage(new Long(0));
state.setPageSize(new Long(2));
Object[] queryParams = new Object[] { "test_parent_id", booleanParam, null, listParam };
state.setQueryParameters(queryParams);
state.setResultColumns(Collections.singletonList("column_1"));
state.setResultLayout(new ContentViewLayoutImpl("document_listing", "label.document_listing.layout", true,
"/icons/myicon.png", true));
List<SortInfo> sortInfos = new ArrayList<>();
sortInfos.add(new SortInfo("dc:modified", false));
state.setSortInfos(sortInfos);
ContentView contentView = service.restoreContentView(state);
assertNotNull(contentView);
assertEquals("CURRENT_DOCUMENT_CHILDREN", contentView.getName());
assertEquals(new Long(2), contentView.getCurrentPageSize());
PageProvider<?> pp = contentView.getCurrentPageProvider();
assertNotNull(pp);
assertNull(pp.getSearchDocumentModel());
assertEquals(new Long(0), new Long(pp.getCurrentPageIndex()));
queryParams = pp.getParameters();
assertNotNull(queryParams);
assertEquals(4, queryParams.length);
assertEquals("test_parent_id", queryParams[0]);
assertEquals(booleanParam, queryParams[1]);
assertEquals(null, queryParams[2]);
assertEquals(listParam, queryParams[3]);
sortInfos = pp.getSortInfos();
assertNotNull(sortInfos);
assertEquals(1, sortInfos.size());
assertEquals("dc:modified", sortInfos.get(0).getSortColumn());
assertFalse(sortInfos.get(0).getSortAscending());
ContentViewLayout resultLayout = contentView.getCurrentResultLayout();
assertNotNull(resultLayout);
assertEquals("document_listing", resultLayout.getName());
assertEquals("label.document_listing.layout", resultLayout.getTitle());
assertTrue(resultLayout.getTranslateTitle());
assertEquals("/icons/myicon.png", resultLayout.getIconPath());
assertTrue(resultLayout.getShowCSVExport());
List<String> resultColumns = contentView.getCurrentResultLayoutColumns();
assertNotNull(resultColumns);
assertEquals(1, resultColumns.size());
assertEquals("column_1", resultColumns.get(0));
assertTrue(contentView.isExecuted());
}
@Test
public void testSaveJSONContentView() throws Exception {
assertNull(service.saveContentView(null));
ContentView contentView = service.getContentView("CURRENT_DOCUMENT_CHILDREN");
assertNotNull(contentView);
// init provider, result columns and save
contentView.getPageProviderWithParams("test_parent_id", booleanParam, null, listParam);
contentView.setCurrentResultLayoutColumns(Collections.singletonList("column_1"));
ContentViewState state = service.saveContentView(contentView);
String json = JSONContentViewState.toJSON(state, false);
String expectedJson = "{" + "\"contentViewName\":\"CURRENT_DOCUMENT_CHILDREN\","
+ "\"pageProviderName\":\"CURRENT_DOCUMENT_CHILDREN\"," + "\"pageSize\":2," + "\"currentPage\":0,"
+ "\"queryParameters\":[\"test_parent_id\",false,null,[\"deleted\", \"validated\"]],"
+ "\"searchDocument\":null," + "\"sortInfos\":[{\"sortColumn\":\"dc:title\",\"sortAscending\":true}],"
+ "\"resultLayout\":{\"name\":\"document_listing\",\"title\":\"label.document_listing.layout\",\"translateTitle\":true,\"iconPath\":\"/icons/myicon.png\",\"showCSVExport\":true},"
+ "\"resultColumns\":[\"column_1\"]," + "\"executed\":false" + "}";
JSONAssert.assertEquals(expectedJson, json, true);
String encodedJson = JSONContentViewState.toJSON(state, true);
assertEquals(ENC_CURRENT_DOC_CHILDREN, encodedJson);
}
@Test
public void testRestoreJSONContentView() throws Exception {
assertNull(service.saveContentView(null));
String json = "{" + "\"contentViewName\":\"CURRENT_DOCUMENT_CHILDREN\"," + "\"pageSize\":2,"
+ "\"currentPage\":0,"
+ "\"queryParameters\":[\"test_parent_id\",false,null,[\"deleted\", \"validated\"]],"
+ "\"searchDocument\":null," + "\"sortInfos\":[{\"sortColumn\":\"dc:title\",\"sortAscending\":true}],"
+ "\"resultLayout\":{\"name\":\"document_listing\",\"title\":\"label.document_listing.layout\",\"translateTitle\":true,\"iconPath\":\"/icons/myicon.png\",\"showCSVExport\":true},"
+ "\"resultColumns\":[\"column_1\"]" + "}";
ContentViewState state = JSONContentViewState.fromJSON(json, false);
checkContentViewState(state, false);
state = JSONContentViewState.fromJSON(ENC_CURRENT_DOC_CHILDREN, true);
checkContentViewState(state, true);
}
@Test
public void testSaveContentViewWithSearchDoc() throws Exception {
ContentView contentView = service.getContentView("CURRENT_DOCUMENT_CHILDREN_WITH_SEARCH_DOCUMENT");
assertNotNull(contentView);
// test bare state
ContentViewState state = service.saveContentView(contentView);
assertNotNull(state);
assertEquals("CURRENT_DOCUMENT_CHILDREN_WITH_SEARCH_DOCUMENT", state.getContentViewName());
assertNull(state.getPageProviderName());
assertNull(state.getCurrentPage());
assertNull(state.getPageSize());
Object[] queryParams = state.getQueryParameters();
assertNotNull(queryParams);
assertEquals(0, queryParams.length);
assertNull(state.getResultColumns());
assertNull(state.getResultLayout());
DocumentModel searchDoc = state.getSearchDocumentModel();
assertNotNull(searchDoc);
assertEquals("search keywords", searchDoc.getPropertyValue("dc:title"));
assertEquals(getModifiedDate(), searchDoc.getPropertyValue("dc:modified"));
assertNull(searchDoc.getPropertyValue("dc:description"));
assertNull(state.getSortInfos());
// init provider with search doc, result columns and test save again
contentView.setSearchDocumentModel(searchDocument);
contentView.getPageProvider();
contentView.setCurrentResultLayoutColumns(Collections.singletonList("column_1"));
state = service.saveContentView(contentView);
checkContentViewStateWithSearchDoc(state, true, true);
}
protected void checkContentViewStateWithSearchDoc(ContentViewState state, boolean withQueryParams,
boolean withSortInfos) {
assertNotNull(state);
assertEquals("CURRENT_DOCUMENT_CHILDREN_WITH_SEARCH_DOCUMENT", state.getContentViewName());
assertEquals("CURRENT_DOCUMENT_CHILDREN_WITH_SEARCH_DOCUMENT", state.getPageProviderName());
assertEquals(new Long(0), state.getCurrentPage());
assertEquals(new Long(2), state.getPageSize());
Object[] queryParams = state.getQueryParameters();
if (withQueryParams) {
assertNotNull(queryParams);
assertEquals(0, queryParams.length);
} else {
assertNull(queryParams);
}
List<String> resultColumns = state.getResultColumns();
assertNotNull(resultColumns);
assertEquals(1, resultColumns.size());
assertEquals("column_1", resultColumns.get(0));
assertNull(state.getResultLayout());
DocumentModel searchDoc = state.getSearchDocumentModel();
assertNotNull(searchDoc);
assertEquals("search keywords", searchDoc.getPropertyValue("dc:title"));
assertEquals(getModifiedDate(), searchDoc.getPropertyValue("dc:modified"));
assertNull(searchDoc.getPropertyValue("dc:description"));
List<SortInfo> sortInfos = state.getSortInfos();
if (withSortInfos) {
assertNotNull(sortInfos);
assertEquals(1, sortInfos.size());
assertEquals("dc:title", sortInfos.get(0).getSortColumn());
assertTrue(sortInfos.get(0).getSortAscending());
} else {
assertNull(sortInfos);
}
}
@Test
public void testRestoreContentViewWithSearchDoc() throws Exception {
ContentViewService service = Framework.getService(ContentViewService.class);
assertNotNull(service);
assertNull(service.restoreContentView(null));
// build state
ContentViewState state = new ContentViewStateImpl();
state.setContentViewName("CURRENT_DOCUMENT_CHILDREN_WITH_SEARCH_DOCUMENT");
state.setCurrentPage(new Long(0));
state.setPageSize(new Long(2));
state.setResultColumns(Collections.singletonList("column_1"));
state.setResultLayout(new ContentViewLayoutImpl("document_listing", "label.document_listing.layout", true,
"/icons/myicon.png", true));
List<SortInfo> sortInfos = new ArrayList<>();
sortInfos.add(new SortInfo("dc:modified", false));
state.setSortInfos(sortInfos);
state.setSearchDocumentModel(searchDocument);
ContentView contentView = service.restoreContentView(state);
assertNotNull(contentView);
assertEquals("CURRENT_DOCUMENT_CHILDREN_WITH_SEARCH_DOCUMENT", contentView.getName());
assertEquals(new Long(2), contentView.getCurrentPageSize());
PageProvider<?> pp = contentView.getCurrentPageProvider();
assertNotNull(pp);
DocumentModel searchDoc = pp.getSearchDocumentModel();
assertNotNull(searchDoc);
assertEquals("search keywords", searchDoc.getPropertyValue("dc:title"));
assertNull(searchDoc.getPropertyValue("dc:description"));
assertEquals(new Long(0), new Long(pp.getCurrentPageIndex()));
Object[] queryParams = pp.getParameters();
assertNotNull(queryParams);
assertEquals(0, queryParams.length);
sortInfos = pp.getSortInfos();
assertNotNull(sortInfos);
assertEquals(1, sortInfos.size());
assertEquals("dc:modified", sortInfos.get(0).getSortColumn());
assertFalse(sortInfos.get(0).getSortAscending());
ContentViewLayout resultLayout = contentView.getCurrentResultLayout();
assertNotNull(resultLayout);
assertEquals("document_listing", resultLayout.getName());
assertEquals("label.document_listing.layout", resultLayout.getTitle());
assertTrue(resultLayout.getTranslateTitle());
assertEquals("/icons/myicon.png", resultLayout.getIconPath());
assertTrue(resultLayout.getShowCSVExport());
List<String> resultColumns = contentView.getCurrentResultLayoutColumns();
assertNotNull(resultColumns);
assertEquals(1, resultColumns.size());
assertEquals("column_1", resultColumns.get(0));
}
/**
* Non regression test for NXP-11419, showing an issue when restoring with a search doc and a current page > 0
*/
@Test
public void testRestoreContentViewWithSearchDocAndCurrentPage() throws Exception {
ContentViewService service = Framework.getService(ContentViewService.class);
assertNotNull(service);
assertNull(service.restoreContentView(null));
// build state
ContentViewState state = new ContentViewStateImpl();
state.setContentViewName("CURRENT_DOCUMENT_CHILDREN_WITH_SEARCH_DOCUMENT");
// set current page to the first one
state.setCurrentPage(new Long(1));
state.setPageSize(new Long(2));
state.setResultColumns(Collections.singletonList("column_1"));
state.setResultLayout(new ContentViewLayoutImpl("document_listing", "label.document_listing.layout", true,
"/icons/myicon.png", true));
List<SortInfo> sortInfos = new ArrayList<>();
sortInfos.add(new SortInfo("dc:modified", false));
state.setSortInfos(sortInfos);
state.setSearchDocumentModel(searchDocument);
ContentView contentView = service.restoreContentView(state);
assertNotNull(contentView);
assertEquals("CURRENT_DOCUMENT_CHILDREN_WITH_SEARCH_DOCUMENT", contentView.getName());
assertEquals(new Long(2), contentView.getCurrentPageSize());
PageProvider<?> pp = contentView.getCurrentPageProvider();
assertNotNull(pp);
DocumentModel searchDoc = pp.getSearchDocumentModel();
assertNotNull(searchDoc);
assertEquals("search keywords", searchDoc.getPropertyValue("dc:title"));
assertNull(searchDoc.getPropertyValue("dc:description"));
assertEquals(new Long(1), new Long(pp.getCurrentPageIndex()));
}
@Test
public void testSaveJSONContentViewWithSearchDoc() throws Exception {
assertNull(service.saveContentView(null));
ContentView contentView = service.getContentView("CURRENT_DOCUMENT_CHILDREN_WITH_SEARCH_DOCUMENT");
assertNotNull(contentView);
// set some blob properties on the searchDocument ( has the schema
// files)
// to check that there are ignored during serialization
Map<String, Serializable> file = new HashMap<>();
ArrayList<Map<String, Serializable>> files = new ArrayList<>();
// Attach one file to the list
File tmpFile = Framework.createTempFile("test", ".txt");
Framework.trackFile(tmpFile, this);
FileUtils.writeStringToFile(tmpFile, "Content");
Blob blob = Blobs.createBlob(tmpFile);
file.put("file", (Serializable) blob);
files.add(file);
searchDocument.setPropertyValue("files:files", files);
// init provider with search doc, result columns and save
contentView.setSearchDocumentModel(searchDocument);
contentView.getPageProvider();
contentView.setCurrentResultLayoutColumns(Collections.singletonList("column_1"));
ContentViewState state = service.saveContentView(contentView);
String json = JSONContentViewState.toJSON(state, false);
String expectedJson = "{" + "\"contentViewName\":\"CURRENT_DOCUMENT_CHILDREN_WITH_SEARCH_DOCUMENT\","
+ "\"pageProviderName\":\"CURRENT_DOCUMENT_CHILDREN_WITH_SEARCH_DOCUMENT\"," + "\"pageSize\":2,"
+ "\"currentPage\":0," + "\"queryParameters\":[],"
+ "\"searchDocument\":{\"type\":\"File\",\"properties\":{\"dc:modified\":\"2014-04-16T15:37:43+0000\",\"dc:title\":\"search keywords\",\"files\":[]}},"
+ "\"sortInfos\":[{\"sortColumn\":\"dc:title\",\"sortAscending\":true}]," + "\"resultLayout\":null,"
+ "\"resultColumns\":[\"column_1\"]," + "\"executed\":false" + "}";
JSONAssert.assertEquals(expectedJson, json, true);
String encodedJson = JSONContentViewState.toJSON(state, true);
assertEquals(ENC_CURRENT_DOC_CHILDREN_WITH_SEARCH_DOC, encodedJson);
}
@Test
public void testRestoreJSONContentViewWithSearchDoc() throws Exception {
assertNull(service.saveContentView(null));
String json = "{" + "\"contentViewName\":\"CURRENT_DOCUMENT_CHILDREN_WITH_SEARCH_DOCUMENT\","
+ "\"pageProviderName\":\"CURRENT_DOCUMENT_CHILDREN_WITH_SEARCH_DOCUMENT\"," + "\"pageSize\":2,"
+ "\"currentPage\":0," + "\"queryParameters\":[],"
+ "\"searchDocument\":{\"type\":\"File\",\"properties\":{\"dc:modified\":\"2014-04-16T17:37:43+0200\",\"dc:title\":\"search keywords\"}},"
+ "\"sortInfos\":[{\"sortColumn\":\"dc:title\",\"sortAscending\":true}]," + "\"resultLayout\":null,"
+ "\"resultColumns\":[\"column_1\"]" + "}";
ContentViewState state = JSONContentViewState.fromJSON(json, false);
checkContentViewStateWithSearchDoc(state, false, true);
state = JSONContentViewState.fromJSON(ENC_CURRENT_DOC_CHILDREN_WITH_SEARCH_DOC, true);
checkContentViewStateWithSearchDoc(state, false, true);
}
@Test
public void testSaveJSONContentViewWithPathParam() throws Exception {
ContentView contentView = service.getContentView("CURRENT_DOCUMENT_WITH_PATH_PARAM");
assertNotNull(contentView);
ContentViewState state = service.saveContentView(contentView);
String json = JSONContentViewState.toJSON(state, false);
String expectedJson = "{" + "\"contentViewName\":\"CURRENT_DOCUMENT_WITH_PATH_PARAM\","
+ "\"queryParameters\":[\"/\"]," + "\"searchDocument\":null," + "\"sortInfos\":[],"
+ "\"resultLayout\":null," + "\"executed\":false" + "}";
JSONAssert.assertEquals(expectedJson, json, true);
String encodedJson = JSONContentViewState.toJSON(state, true);
assertEquals(
"H4sIAAAAAAAAAD2MwQrCMBBE%2F2XPBe%2B5lVawYGsJrR6klBC3KKQJbnbRIv57Uw9ehsfwZj5gg2f0fH7gqzEzgoKi13rfdGN5Kvp6g0vVHcY2%2F4XOa8jgKUhLaygNGCmCusIOhgwiGrL3MliZ0ycoL86lNhBXfgqblyTCKI6PZgnyV%2FCNVhhvoCbjIn5X%2FrApwpgAAAA%3D",
encodedJson);
}
}