/**
* 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.journal.exportimport.data.handler.test;
import com.liferay.arquillian.extension.junit.bridge.junit.Arquillian;
import com.liferay.dynamic.data.mapping.model.DDMStructure;
import com.liferay.dynamic.data.mapping.model.DDMTemplate;
import com.liferay.dynamic.data.mapping.service.DDMStructureLocalServiceUtil;
import com.liferay.dynamic.data.mapping.service.DDMTemplateLocalServiceUtil;
import com.liferay.dynamic.data.mapping.test.util.DDMStructureTestUtil;
import com.liferay.dynamic.data.mapping.test.util.DDMTemplateTestUtil;
import com.liferay.journal.exportimport.data.handler.JournalFeedStagedModelDataHandler;
import com.liferay.journal.model.JournalArticle;
import com.liferay.journal.model.JournalFeed;
import com.liferay.journal.service.JournalFeedLocalServiceUtil;
import com.liferay.journal.test.util.JournalTestUtil;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.model.Layout;
import com.liferay.portal.kernel.model.StagedModel;
import com.liferay.portal.kernel.portlet.PortalPreferences;
import com.liferay.portal.kernel.portlet.PortletPreferencesFactoryUtil;
import com.liferay.portal.kernel.security.auth.CompanyThreadLocal;
import com.liferay.portal.kernel.service.LayoutLocalServiceUtil;
import com.liferay.portal.kernel.service.PortalPreferencesLocalServiceUtil;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.test.rule.AggregateTestRule;
import com.liferay.portal.kernel.test.rule.Sync;
import com.liferay.portal.kernel.test.rule.SynchronousDestinationTestRule;
import com.liferay.portal.kernel.test.util.RandomTestUtil;
import com.liferay.portal.kernel.test.util.TestPropsValues;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.util.PortletKeys;
import com.liferay.portal.lar.test.BaseStagedModelDataHandlerTestCase;
import com.liferay.portal.test.log.CaptureAppender;
import com.liferay.portal.test.log.Log4JLoggerTestUtil;
import com.liferay.portal.test.rule.LiferayIntegrationTestRule;
import com.liferay.portal.util.test.LayoutTestUtil;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Level;
import org.apache.log4j.spi.LoggingEvent;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* @author Daniel Kocsis
*/
@RunWith(Arquillian.class)
@Sync
public class JournalFeedStagedModelDataHandlerTest
extends BaseStagedModelDataHandlerTestCase {
@ClassRule
@Rule
public static final AggregateTestRule aggregateTestRule =
new AggregateTestRule(
new LiferayIntegrationTestRule(),
SynchronousDestinationTestRule.INSTANCE);
@Before
@Override
public void setUp() throws Exception {
super.setUp();
_layout = LayoutTestUtil.addLayout(stagingGroup);
ServiceContext serviceContext = new ServiceContext();
serviceContext.setUuid(_layout.getUuid());
LayoutLocalServiceUtil.addLayout(
TestPropsValues.getUserId(), liveGroup.getGroupId(),
_layout.getPrivateLayout(), _layout.getParentLayoutId(),
_layout.getName(), _layout.getTitle(), _layout.getDescription(),
_layout.getType(), _layout.getHidden(), _layout.getFriendlyURL(),
serviceContext);
CompanyThreadLocal.setCompanyId(TestPropsValues.getCompanyId());
serviceContext.setCompanyId(TestPropsValues.getCompanyId());
PortalPreferences portalPreferenceces =
PortletPreferencesFactoryUtil.getPortalPreferences(
TestPropsValues.getUserId(), true);
_originalPortalPreferencesXML = PortletPreferencesFactoryUtil.toXML(
portalPreferenceces);
portalPreferenceces.setValue(
"", "publishToLiveByDefaultEnabled", "true");
portalPreferenceces.setValue(
"", "versionHistoryByDefaultEnabled", "true");
portalPreferenceces.setValue("", "articleCommentsEnabled", "true");
portalPreferenceces.setValue(
"", "expireAllArticleVersionsEnabled", "true");
portalPreferenceces.setValue("", "folderIconCheckCountEnabled", "true");
portalPreferenceces.setValue(
"", "indexAllArticleVersionsEnabled", "true");
portalPreferenceces.setValue(
"", "databaseContentKeywordSearchEnabled", "true");
portalPreferenceces.setValue("", "journalArticleStorageType", "json");
portalPreferenceces.setValue(
"", "journalArticlePageBreakToken", "@page_break@");
PortalPreferencesLocalServiceUtil.updatePreferences(
TestPropsValues.getCompanyId(),
PortletKeys.PREFS_OWNER_TYPE_COMPANY,
PortletPreferencesFactoryUtil.toXML(portalPreferenceces));
}
@After
@Override
public void tearDown() throws Exception {
super.tearDown();
PortalPreferencesLocalServiceUtil.updatePreferences(
TestPropsValues.getCompanyId(),
PortletKeys.PREFS_OWNER_TYPE_COMPANY,
_originalPortalPreferencesXML);
}
@Override
@Test
public void testCleanStagedModelDataHandler() throws Exception {
try (CaptureAppender captureAppender =
Log4JLoggerTestUtil.configureLog4JLogger(
JournalFeedStagedModelDataHandler.class.getName(),
Level.WARN)) {
super.testCleanStagedModelDataHandler();
List<LoggingEvent> loggingEvents =
captureAppender.getLoggingEvents();
Assert.assertEquals(
loggingEvents.toString(), 1, loggingEvents.size());
LoggingEvent loggingEvent = loggingEvents.get(0);
String message = (String)loggingEvent.getMessage();
Assert.assertTrue(
message, message.startsWith("A feed with the ID "));
Assert.assertTrue(
message,
message.contains(" already exists. The new generated ID is "));
}
}
@Override
@Test
public void testStagedModelDataHandler() throws Exception {
try (CaptureAppender captureAppender =
Log4JLoggerTestUtil.configureLog4JLogger(
JournalFeedStagedModelDataHandler.class.getName(),
Level.WARN)) {
super.testStagedModelDataHandler();
List<LoggingEvent> loggingEvents =
captureAppender.getLoggingEvents();
Assert.assertEquals(
loggingEvents.toString(), 1, loggingEvents.size());
LoggingEvent loggingEvent = loggingEvents.get(0);
String message = (String)loggingEvent.getMessage();
Assert.assertTrue(
message, message.startsWith("A feed with the ID "));
Assert.assertTrue(
message,
message.contains(" already exists. The new generated ID is "));
}
}
@Override
protected Map<String, List<StagedModel>> addDependentStagedModelsMap(
Group group)
throws Exception {
Map<String, List<StagedModel>> dependentStagedModelsMap =
new LinkedHashMap<>();
DDMStructure ddmStructure = DDMStructureTestUtil.addStructure(
group.getGroupId(), JournalArticle.class.getName());
for (int i = 0; i < 2; i++) {
DDMTemplate ddmTemplate = DDMTemplateTestUtil.addTemplate(
group.getGroupId(), ddmStructure.getStructureId(),
PortalUtil.getClassNameId(JournalArticle.class));
addDependentStagedModel(
dependentStagedModelsMap, DDMTemplate.class, ddmTemplate);
}
addDependentStagedModel(
dependentStagedModelsMap, DDMStructure.class, ddmStructure);
return dependentStagedModelsMap;
}
@Override
protected StagedModel addStagedModel(
Group group,
Map<String, List<StagedModel>> dependentStagedModelsMap)
throws Exception {
List<StagedModel> ddmStructureDependentStagedModels =
dependentStagedModelsMap.get(DDMStructure.class.getSimpleName());
DDMStructure ddmStructure =
(DDMStructure)ddmStructureDependentStagedModels.get(0);
List<StagedModel> ddmTemplateDependentStagedModels =
dependentStagedModelsMap.get(DDMTemplate.class.getSimpleName());
DDMTemplate ddmTemplate =
(DDMTemplate)ddmTemplateDependentStagedModels.get(0);
DDMTemplate rendererDDMTemplate =
(DDMTemplate)ddmTemplateDependentStagedModels.get(1);
return JournalTestUtil.addFeed(
group.getGroupId(), _layout.getPlid(),
RandomTestUtil.randomString(), ddmStructure.getStructureKey(),
ddmTemplate.getTemplateKey(), rendererDDMTemplate.getTemplateKey());
}
@Override
protected StagedModel getStagedModel(String uuid, Group group) {
try {
return JournalFeedLocalServiceUtil.getJournalFeedByUuidAndGroupId(
uuid, group.getGroupId());
}
catch (Exception e) {
return null;
}
}
@Override
protected Class<? extends StagedModel> getStagedModelClass() {
return JournalFeed.class;
}
@Override
protected void validateImport(
Map<String, List<StagedModel>> dependentStagedModelsMap,
Group group)
throws Exception {
List<StagedModel> ddmStructureDependentStagedModels =
dependentStagedModelsMap.get(DDMStructure.class.getSimpleName());
Assert.assertEquals(
ddmStructureDependentStagedModels.toString(), 1,
ddmStructureDependentStagedModels.size());
DDMStructure ddmStructure =
(DDMStructure)ddmStructureDependentStagedModels.get(0);
DDMStructureLocalServiceUtil.getDDMStructureByUuidAndGroupId(
ddmStructure.getUuid(), group.getGroupId());
List<StagedModel> ddmTemplateDependentStagedModels =
dependentStagedModelsMap.get(DDMTemplate.class.getSimpleName());
Assert.assertEquals(
ddmTemplateDependentStagedModels.toString(), 2,
ddmTemplateDependentStagedModels.size());
for (StagedModel ddmTemplateDependentStagedModel :
ddmTemplateDependentStagedModels) {
DDMTemplate ddmTemplate =
(DDMTemplate)ddmTemplateDependentStagedModel;
DDMTemplateLocalServiceUtil.getDDMTemplateByUuidAndGroupId(
ddmTemplate.getUuid(), group.getGroupId());
}
}
@Override
protected void validateImportedStagedModel(
StagedModel stagedModel, StagedModel importedStagedModel)
throws Exception {
super.validateImportedStagedModel(stagedModel, importedStagedModel);
JournalFeed feed = (JournalFeed)stagedModel;
JournalFeed importedFeed = (JournalFeed)importedStagedModel;
Assert.assertEquals(feed.getName(), importedFeed.getName());
Assert.assertEquals(feed.getDelta(), importedFeed.getDelta());
Assert.assertEquals(feed.getOrderByCol(), importedFeed.getOrderByCol());
Assert.assertEquals(
feed.getOrderByType(), importedFeed.getOrderByType());
Assert.assertEquals(
feed.getContentField(), importedFeed.getContentField());
}
private Layout _layout;
private String _originalPortalPreferencesXML;
}