/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* 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.
*/
package com.liferay.wiki.util.test;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.test.util.RandomTestUtil;
import com.liferay.portal.kernel.test.util.ServiceContextTestUtil;
import com.liferay.portal.kernel.test.util.TestPropsValues;
import com.liferay.portal.kernel.util.ArrayUtil;
import com.liferay.portal.kernel.util.Constants;
import com.liferay.portal.kernel.util.FileUtil;
import com.liferay.portal.kernel.util.MimeTypesUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.workflow.WorkflowConstants;
import com.liferay.portal.kernel.workflow.WorkflowThreadLocal;
import com.liferay.wiki.model.WikiNode;
import com.liferay.wiki.model.WikiPage;
import com.liferay.wiki.model.WikiPageConstants;
import com.liferay.wiki.service.WikiNodeLocalServiceUtil;
import com.liferay.wiki.service.WikiPageLocalServiceUtil;
import java.io.File;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
/**
* @author Julio Camarero
* @author Roberto Díaz
*/
public class WikiTestUtil {
public static WikiNode addDefaultNode(long groupId) throws Exception {
WorkflowThreadLocal.setEnabled(true);
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(groupId);
serviceContext.setWorkflowAction(WorkflowConstants.ACTION_SAVE_DRAFT);
serviceContext = (ServiceContext)serviceContext.clone();
WikiNode node = WikiNodeLocalServiceUtil.addDefaultNode(
TestPropsValues.getUserId(), serviceContext);
return node;
}
public static WikiNode addNode(long groupId) throws Exception {
return addNode(
TestPropsValues.getUserId(), groupId, RandomTestUtil.randomString(),
RandomTestUtil.randomString(50));
}
public static WikiNode addNode(
long userId, long groupId, String name, String description)
throws Exception {
WorkflowThreadLocal.setEnabled(true);
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(groupId);
serviceContext.setWorkflowAction(WorkflowConstants.ACTION_SAVE_DRAFT);
serviceContext = (ServiceContext)serviceContext.clone();
WikiNode node = WikiNodeLocalServiceUtil.addNode(
userId, name, description, serviceContext);
return node;
}
public static WikiPage addPage(long groupId, long nodeId, boolean approved)
throws Exception {
return addPage(
TestPropsValues.getUserId(), groupId, nodeId,
RandomTestUtil.randomString(), approved);
}
public static WikiPage addPage(
long userId, long groupId, long nodeId, String title,
boolean approved)
throws Exception {
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(groupId);
serviceContext.setCommand(Constants.ADD);
serviceContext.setLayoutFullURL("http://localhost");
return addPage(
userId, nodeId, title, "content", approved, serviceContext);
}
public static WikiPage addPage(
long userId, long nodeId, String title, String content,
boolean approved, ServiceContext serviceContext)
throws Exception {
boolean workflowEnabled = WorkflowThreadLocal.isEnabled();
try {
WorkflowThreadLocal.setEnabled(true);
serviceContext = (ServiceContext)serviceContext.clone();
serviceContext.setWorkflowAction(
WorkflowConstants.ACTION_SAVE_DRAFT);
WikiPage page = WikiPageLocalServiceUtil.addPage(
userId, nodeId, title, content, "Summary", false,
serviceContext);
if (approved) {
page = updateStatus(page, serviceContext);
}
return page;
}
finally {
WorkflowThreadLocal.setEnabled(workflowEnabled);
}
}
public static WikiPage addPage(
long userId, long nodeId, String title, String content,
String parentTitle, boolean approved, ServiceContext serviceContext)
throws Exception {
boolean workflowEnabled = WorkflowThreadLocal.isEnabled();
try {
WorkflowThreadLocal.setEnabled(true);
serviceContext = (ServiceContext)serviceContext.clone();
serviceContext.setCommand(Constants.ADD);
serviceContext.setWorkflowAction(
WorkflowConstants.ACTION_SAVE_DRAFT);
WikiPage page = WikiPageLocalServiceUtil.addPage(
userId, nodeId, title, WikiPageConstants.VERSION_DEFAULT,
content, "Summary", false, "creole", true, parentTitle, null,
serviceContext);
if (approved) {
page = updateStatus(page, serviceContext);
}
return page;
}
finally {
WorkflowThreadLocal.setEnabled(workflowEnabled);
}
}
public static WikiPage[] addPageWithChangedParentPage(
long groupId, long nodeId)
throws Exception {
WikiPage initialParentPage = addPage(
TestPropsValues.getUserId(), groupId, nodeId,
RandomTestUtil.randomString(), true);
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(groupId);
WikiPage childPage = addPage(
TestPropsValues.getUserId(), nodeId, RandomTestUtil.randomString(),
RandomTestUtil.randomString(), initialParentPage.getTitle(), true,
serviceContext);
WikiPage finalParentPage = addPage(
TestPropsValues.getUserId(), groupId, nodeId,
RandomTestUtil.randomString(), true);
WikiPageLocalServiceUtil.changeParent(
TestPropsValues.getUserId(), nodeId, childPage.getTitle(),
finalParentPage.getTitle(), serviceContext);
childPage = WikiPageLocalServiceUtil.getPage(
nodeId, childPage.getTitle());
initialParentPage = WikiPageLocalServiceUtil.getPageByPageId(
initialParentPage.getPageId());
finalParentPage = WikiPageLocalServiceUtil.getPageByPageId(
finalParentPage.getPageId());
return new WikiPage[] {childPage, finalParentPage, initialParentPage};
}
public static WikiPage[] addPageWithChildPageAndRedirectPage(
long groupId, long nodeId)
throws Exception {
addPage(TestPropsValues.getUserId(), groupId, nodeId, "TestPage", true);
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(groupId);
addPage(
TestPropsValues.getUserId(), nodeId, "TestChildPage",
RandomTestUtil.randomString(), "TestPage", true, serviceContext);
WikiPageLocalServiceUtil.renamePage(
TestPropsValues.getUserId(), nodeId, "TestPage", "B",
serviceContext);
WikiPage page = WikiPageLocalServiceUtil.getPage(nodeId, "B");
WikiPage childPage = WikiPageLocalServiceUtil.getPage(
nodeId, "TestChildPage");
WikiPage redirectPage = WikiPageLocalServiceUtil.getPage(
nodeId, "TestPage");
return new WikiPage[] {page, childPage, redirectPage};
}
public static WikiPage[] addRenamedParentPageWithChildPageAndGrandchildPage(
long groupId, long nodeId)
throws Exception {
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(groupId);
addPage(TestPropsValues.getUserId(), groupId, nodeId, "TestPage", true);
WikiPage childPage = addPage(
TestPropsValues.getUserId(), nodeId, "TestChildPage",
RandomTestUtil.randomString(), "TestPage", true, serviceContext);
WikiPage grandchildPage = addPage(
TestPropsValues.getUserId(), nodeId, "TestGrandchildPage",
RandomTestUtil.randomString(), "TestChildPage", true,
serviceContext);
WikiPageLocalServiceUtil.renamePage(
TestPropsValues.getUserId(), nodeId, "TestPage", "B",
serviceContext);
WikiPage page = WikiPageLocalServiceUtil.getPage(nodeId, "B");
WikiPage redirectPage = WikiPageLocalServiceUtil.getPage(
nodeId, "TestPage");
childPage = WikiPageLocalServiceUtil.getPageByPageId(
childPage.getPageId());
grandchildPage = WikiPageLocalServiceUtil.getPageByPageId(
grandchildPage.getPageId());
return new WikiPage[] {page, redirectPage, childPage, grandchildPage};
}
public static WikiPage[] addRenamedTrashedPage(
long groupId, long nodeId, boolean explicitlyRemoveRedirectPage)
throws Exception {
addPage(TestPropsValues.getUserId(), groupId, nodeId, "A", true);
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(groupId);
WikiPageLocalServiceUtil.renamePage(
TestPropsValues.getUserId(), nodeId, "A", "B", serviceContext);
WikiPage page = WikiPageLocalServiceUtil.getPage(nodeId, "B");
WikiPage redirectPage = WikiPageLocalServiceUtil.getPage(nodeId, "A");
if (explicitlyRemoveRedirectPage) {
WikiPageLocalServiceUtil.movePageToTrash(
TestPropsValues.getUserId(), nodeId, "A");
}
WikiPageLocalServiceUtil.movePageToTrash(
TestPropsValues.getUserId(), nodeId, "B");
page = WikiPageLocalServiceUtil.getPageByPageId(page.getPageId());
redirectPage = WikiPageLocalServiceUtil.getPageByPageId(
redirectPage.getPageId());
return new WikiPage[] {page, redirectPage};
}
public static WikiPage[] addRenamedTrashedParentPage(
long groupId, long nodeId, boolean explicitlyRemoveChildPage,
boolean explicitlyRemoveRedirectPage)
throws Exception {
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(groupId);
addPage(TestPropsValues.getUserId(), groupId, nodeId, "A", true);
WikiPageLocalServiceUtil.renamePage(
TestPropsValues.getUserId(), nodeId, "A", "B", serviceContext);
WikiPage page = WikiPageLocalServiceUtil.getPage(nodeId, "B");
WikiPage redirectPage = WikiPageLocalServiceUtil.getPage(nodeId, "A");
WikiPage childPage = addPage(
TestPropsValues.getUserId(), nodeId, "TestChildPage",
RandomTestUtil.randomString(), "B", true, serviceContext);
if (explicitlyRemoveChildPage) {
WikiPageLocalServiceUtil.movePageToTrash(
TestPropsValues.getUserId(), nodeId, "TestChildPage");
}
if (explicitlyRemoveRedirectPage) {
WikiPageLocalServiceUtil.movePageToTrash(
TestPropsValues.getUserId(), nodeId, "A");
}
WikiPageLocalServiceUtil.movePageToTrash(
TestPropsValues.getUserId(), nodeId, "B");
page = WikiPageLocalServiceUtil.getPageByPageId(page.getPageId());
childPage = WikiPageLocalServiceUtil.getPageByPageId(
childPage.getPageId());
redirectPage = WikiPageLocalServiceUtil.getPageByPageId(
redirectPage.getPageId());
return new WikiPage[] {page, childPage, redirectPage};
}
public static WikiPage[] addTrashedPageWithChildPage(
long groupId, long nodeId, boolean explicitlyRemoveChildPage)
throws Exception {
WikiPage page = addPage(
TestPropsValues.getUserId(), groupId, nodeId, "TestPage", true);
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(groupId);
WikiPage childPage = addPage(
TestPropsValues.getUserId(), nodeId, "TestChildPage",
RandomTestUtil.randomString(), "TestPage", true, serviceContext);
if (explicitlyRemoveChildPage) {
WikiPageLocalServiceUtil.movePageToTrash(
TestPropsValues.getUserId(), childPage);
}
WikiPageLocalServiceUtil.movePageToTrash(
TestPropsValues.getUserId(), page);
page = WikiPageLocalServiceUtil.getPageByPageId(page.getPageId());
childPage = WikiPageLocalServiceUtil.getPageByPageId(
childPage.getPageId());
return new WikiPage[] {page, childPage};
}
public static WikiPage[] addTrashedParentPageWithChildPageAndGrandchildPage(
long groupId, long nodeId, boolean explicitMoveChildToTrash,
boolean explicitMoveParentToTrash)
throws Exception {
WikiPage parentPage = addPage(
TestPropsValues.getUserId(), groupId, nodeId,
RandomTestUtil.randomString(), true);
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(groupId);
WikiPage childPage = addPage(
TestPropsValues.getUserId(), nodeId, RandomTestUtil.randomString(),
RandomTestUtil.randomString(), parentPage.getTitle(), true,
serviceContext);
WikiPage grandchildPage = addPage(
TestPropsValues.getUserId(), nodeId, RandomTestUtil.randomString(),
RandomTestUtil.randomString(), childPage.getTitle(), true,
serviceContext);
if (explicitMoveChildToTrash) {
WikiPageLocalServiceUtil.movePageToTrash(
TestPropsValues.getUserId(), childPage);
}
if (explicitMoveParentToTrash) {
WikiPageLocalServiceUtil.movePageToTrash(
TestPropsValues.getUserId(), parentPage);
}
parentPage = WikiPageLocalServiceUtil.getPageByPageId(
parentPage.getPageId());
childPage = WikiPageLocalServiceUtil.getPageByPageId(
childPage.getPageId());
grandchildPage = WikiPageLocalServiceUtil.getPageByPageId(
grandchildPage.getPageId());
return new WikiPage[] {parentPage, childPage, grandchildPage};
}
public static File addWikiAttachment(
long userId, long nodeId, String title, Class<?> clazz)
throws Exception {
String fileName = RandomTestUtil.randomString() + ".docx";
return addWikiAttachment(userId, nodeId, title, fileName, clazz);
}
public static File addWikiAttachment(
long userId, long nodeId, String title, String fileName,
Class<?> clazz)
throws Exception {
byte[] fileBytes = FileUtil.getBytes(
clazz, "dependencies/OSX_Test.docx");
File file = null;
if (ArrayUtil.isNotEmpty(fileBytes)) {
file = FileUtil.createTempFile(fileBytes);
}
String mimeType = MimeTypesUtil.getExtensionContentType("docx");
WikiPageLocalServiceUtil.addPageAttachment(
userId, nodeId, title, fileName, file, mimeType);
return file;
}
public static WikiPage copyPage(
WikiPage page, boolean approved, ServiceContext serviceContext)
throws Exception {
WikiPage copyPage = addPage(
page.getUserId(), page.getNodeId(), RandomTestUtil.randomString(),
page.getContent(), approved, serviceContext);
WikiPageLocalServiceUtil.copyPageAttachments(
page.getUserId(), page.getNodeId(), page.getTitle(),
copyPage.getNodeId(), copyPage.getTitle());
return copyPage;
}
public static void populateNotificationsServiceContext(
ServiceContext serviceContext, String command)
throws Exception {
serviceContext.setAttribute("entryURL", "http://localhost");
if (Validator.isNotNull(command)) {
serviceContext.setCommand(command);
}
serviceContext.setLayoutFullURL("http://localhost");
}
public static WikiPage updatePage(WikiPage page) throws Exception {
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(page.getGroupId());
serviceContext.setCommand(Constants.UPDATE);
serviceContext.setLayoutFullURL("http://localhost");
return updatePage(
page, page.getUserId(), page.getTitle(),
RandomTestUtil.randomString(50), true, serviceContext);
}
public static WikiPage updatePage(
WikiPage page, long userId, String content,
ServiceContext serviceContext)
throws Exception {
return updatePage(
page, userId, page.getTitle(), content, true, serviceContext);
}
public static WikiPage updatePage(
WikiPage page, long userId, String title, String content,
boolean approved, ServiceContext serviceContext)
throws Exception {
boolean workflowEnabled = WorkflowThreadLocal.isEnabled();
try {
WorkflowThreadLocal.setEnabled(true);
serviceContext = (ServiceContext)serviceContext.clone();
serviceContext.setWorkflowAction(
WorkflowConstants.ACTION_SAVE_DRAFT);
page = WikiPageLocalServiceUtil.updatePage(
userId, page.getNodeId(), title, page.getVersion(), content,
page.getSummary(), false, page.getFormat(),
page.getParentTitle(), page.getRedirectTitle(), serviceContext);
if (approved) {
page = updateStatus(page, serviceContext);
}
return page;
}
finally {
WorkflowThreadLocal.setEnabled(workflowEnabled);
}
}
protected static WikiPage updateStatus(
WikiPage page, ServiceContext serviceContext)
throws Exception {
Map<String, Serializable> workflowContext = new HashMap<>();
workflowContext.put(WorkflowConstants.CONTEXT_URL, "http://localhost");
page = WikiPageLocalServiceUtil.updateStatus(
page.getUserId(), page, WorkflowConstants.STATUS_APPROVED,
serviceContext, workflowContext);
return page;
}
}