/** * 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.exportimport.test; import com.liferay.arquillian.extension.junit.bridge.junit.Arquillian; import com.liferay.asset.kernel.model.AssetCategory; import com.liferay.asset.kernel.model.AssetVocabulary; import com.liferay.bookmarks.model.BookmarksEntry; import com.liferay.bookmarks.model.BookmarksFolder; import com.liferay.bookmarks.util.test.BookmarksTestUtil; import com.liferay.exportimport.kernel.lar.ExportImportPathUtil; import com.liferay.exportimport.kernel.lar.PortletDataContext; import com.liferay.exportimport.kernel.lar.PortletDataContextFactoryUtil; import com.liferay.exportimport.kernel.lar.StagedModelDataHandlerUtil; import com.liferay.journal.content.web.constants.JournalContentPortletKeys; import com.liferay.portal.kernel.model.Group; import com.liferay.portal.kernel.model.Portlet; import com.liferay.portal.kernel.service.PortletLocalServiceUtil; import com.liferay.portal.kernel.service.ServiceContext; import com.liferay.portal.kernel.test.rule.AggregateTestRule; import com.liferay.portal.kernel.test.rule.DeleteAfterTestRun; import com.liferay.portal.kernel.test.rule.Sync; import com.liferay.portal.kernel.test.rule.SynchronousDestinationTestRule; import com.liferay.portal.kernel.test.util.GroupTestUtil; 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.GetterUtil; import com.liferay.portal.kernel.xml.Document; import com.liferay.portal.kernel.xml.Element; import com.liferay.portal.kernel.xml.SAXReaderUtil; import com.liferay.portal.kernel.zip.ZipWriter; import com.liferay.portal.kernel.zip.ZipWriterFactoryUtil; import com.liferay.portal.service.test.ServiceTestUtil; import com.liferay.portal.test.rule.LiferayIntegrationTestRule; import com.liferay.portlet.asset.util.test.AssetTestUtil; import java.util.HashMap; import java.util.List; 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 Mate Thurzo */ @RunWith(Arquillian.class) @Sync public class PortletDataContextReferencesTest { @ClassRule @Rule public static final AggregateTestRule aggregateTestRule = new AggregateTestRule( new LiferayIntegrationTestRule(), SynchronousDestinationTestRule.INSTANCE); @Before public void setUp() throws Exception { _group = GroupTestUtil.addGroup(); ServiceTestUtil.setUser(TestPropsValues.getUser()); _serviceContext = ServiceContextTestUtil.getServiceContext( _group.getGroupId(), TestPropsValues.getUserId()); ZipWriter zipWriter = ZipWriterFactoryUtil.getZipWriter(); _portletDataContext = PortletDataContextFactoryUtil.createExportPortletDataContext( TestPropsValues.getCompanyId(), _group.getGroupId(), new HashMap<String, String[]>(), null, null, zipWriter); Document document = SAXReaderUtil.createDocument(); Element rootElement = document.addElement("root"); _portletDataContext.setExportDataRootElement(rootElement); _portletDataContext.setImportDataRootElement(rootElement); Element missingReferencesElement = rootElement.addElement( "missing-references"); _portletDataContext.setMissingReferencesElement( missingReferencesElement); _bookmarksFolder = BookmarksTestUtil.addFolder( _group.getGroupId(), RandomTestUtil.randomString()); _bookmarksEntry = BookmarksTestUtil.addEntry( _bookmarksFolder.getFolderId(), true, _serviceContext); } @Test public void testCleanUpMissingReferences() throws Exception { Portlet portlet = PortletLocalServiceUtil.getPortletById( JournalContentPortletKeys.JOURNAL_CONTENT); AssetVocabulary assetVocabulary = AssetTestUtil.addVocabulary( _group.getGroupId()); AssetCategory assetCategory = AssetTestUtil.addCategory( _group.getGroupId(), assetVocabulary.getVocabularyId()); _portletDataContext.addReferenceElement( portlet, _portletDataContext.getExportDataRootElement(), assetCategory, PortletDataContext.REFERENCE_TYPE_DEPENDENCY, true); Element missingReferencesElement = _portletDataContext.getMissingReferencesElement(); List<Element> missingReferenceElements = missingReferencesElement.elements(); Assert.assertFalse(missingReferenceElements.isEmpty()); Assert.assertEquals( missingReferenceElements.toString(), 1, missingReferenceElements.size()); StagedModelDataHandlerUtil.exportStagedModel( _portletDataContext, assetCategory); missingReferenceElements = missingReferencesElement.elements(); Assert.assertTrue(missingReferenceElements.isEmpty()); } @Test public void testMissingNotMissingReference() throws Exception { Element bookmarksEntryElement = _portletDataContext.getExportDataElement(_bookmarksEntry); _portletDataContext.addReferenceElement( _bookmarksEntry, bookmarksEntryElement, _bookmarksFolder, PortletDataContext.REFERENCE_TYPE_PARENT, true); _portletDataContext.addReferenceElement( _bookmarksEntry, bookmarksEntryElement, _bookmarksFolder, PortletDataContext.REFERENCE_TYPE_PARENT, false); Element missingReferencesElement = _portletDataContext.getMissingReferencesElement(); List<Element> missingReferenceElements = missingReferencesElement.elements(); Assert.assertEquals( missingReferenceElements.toString(), 0, missingReferenceElements.size()); } @Test public void testMissingReference() throws Exception { Element bookmarksEntryElement = _portletDataContext.getExportDataElement(_bookmarksEntry); _portletDataContext.addReferenceElement( _bookmarksEntry, bookmarksEntryElement, _bookmarksFolder, PortletDataContext.REFERENCE_TYPE_PARENT, true); Element missingReferencesElement = _portletDataContext.getMissingReferencesElement(); List<Element> missingReferenceElements = missingReferencesElement.elements(); Assert.assertEquals( missingReferenceElements.toString(), 1, missingReferenceElements.size()); Element missingReferenceElement = missingReferenceElements.get(0); Assert.assertEquals( _bookmarksFolder.getModelClassName(), missingReferenceElement.attributeValue("class-name")); Assert.assertEquals( String.valueOf(_bookmarksFolder.getPrimaryKeyObj()), missingReferenceElement.attributeValue("class-pk")); } @Test public void testMultipleMissingNotMissingReference() throws Exception { Element bookmarksEntryElement1 = _portletDataContext.getExportDataElement(_bookmarksEntry); _portletDataContext.addReferenceElement( _bookmarksEntry, bookmarksEntryElement1, _bookmarksFolder, PortletDataContext.REFERENCE_TYPE_PARENT, true); _portletDataContext.addReferenceElement( _bookmarksEntry, bookmarksEntryElement1, _bookmarksFolder, PortletDataContext.REFERENCE_TYPE_PARENT, false); BookmarksEntry bookmarksEntry = BookmarksTestUtil.addEntry( _bookmarksFolder.getFolderId(), true, _serviceContext); Element bookmarksEntryElement2 = _portletDataContext.getExportDataElement(bookmarksEntry); _portletDataContext.addReferenceElement( bookmarksEntry, bookmarksEntryElement2, _bookmarksFolder, PortletDataContext.REFERENCE_TYPE_PARENT, true); Element missingReferencesElement = _portletDataContext.getMissingReferencesElement(); List<Element> missingReferenceElements = missingReferencesElement.elements(); Assert.assertEquals( missingReferenceElements.toString(), 0, missingReferenceElements.size()); } @Test public void testMultipleMissingReferences() throws Exception { Portlet portlet = PortletLocalServiceUtil.getPortletById( JournalContentPortletKeys.JOURNAL_CONTENT); _portletDataContext.addReferenceElement( portlet, _portletDataContext.getExportDataRootElement(), _bookmarksEntry, PortletDataContext.REFERENCE_TYPE_DEPENDENCY, true); _portletDataContext.addReferenceElement( portlet, _portletDataContext.getExportDataRootElement(), _bookmarksEntry, PortletDataContext.REFERENCE_TYPE_DEPENDENCY, true); Element missingReferencesElement = _portletDataContext.getMissingReferencesElement(); List<Element> missingReferenceElements = missingReferencesElement.elements(); Assert.assertFalse(missingReferenceElements.isEmpty()); Assert.assertEquals( missingReferenceElements.toString(), 1, missingReferenceElements.size()); Element missingReferenceElement = missingReferenceElements.get(0); Assert.assertEquals( BookmarksEntry.class.getName(), missingReferenceElement.attributeValue("class-name")); Assert.assertEquals( String.valueOf(_bookmarksEntry.getPrimaryKeyObj()), missingReferenceElement.attributeValue("class-pk")); } @Test public void testNotMissingMissingReference() throws Exception { Element bookmarksEntryElement = _portletDataContext.getExportDataElement(_bookmarksEntry); _portletDataContext.addReferenceElement( _bookmarksEntry, bookmarksEntryElement, _bookmarksFolder, PortletDataContext.REFERENCE_TYPE_PARENT, false); _portletDataContext.addReferenceElement( _bookmarksEntry, bookmarksEntryElement, _bookmarksFolder, PortletDataContext.REFERENCE_TYPE_PARENT, true); Element missingReferencesElement = _portletDataContext.getMissingReferencesElement(); List<Element> missingReferenceElements = missingReferencesElement.elements(); Assert.assertEquals( missingReferenceElements.toString(), 0, missingReferenceElements.size()); } @Test public void testNotMissingReference() throws Exception { Element bookmarksEntryElement = _portletDataContext.getExportDataElement(_bookmarksEntry); _portletDataContext.addReferenceElement( _bookmarksEntry, bookmarksEntryElement, _bookmarksFolder, PortletDataContext.REFERENCE_TYPE_PARENT, false); Element missingReferencesElement = _portletDataContext.getMissingReferencesElement(); List<Element> missingReferenceElements = missingReferencesElement.elements(); Assert.assertEquals( missingReferenceElements.toString(), 0, missingReferenceElements.size()); } @Test public void testNotReferenceMissingReference() throws Exception { ZipWriter zipWriter = ZipWriterFactoryUtil.getZipWriter(); _portletDataContext.setZipWriter(zipWriter); Element bookmarksEntryElement = _portletDataContext.getExportDataElement(_bookmarksEntry); _portletDataContext.addClassedModel( bookmarksEntryElement, ExportImportPathUtil.getModelPath(_bookmarksEntry), _bookmarksEntry); Element bookmarksFolderElement = _portletDataContext.getExportDataElement(_bookmarksFolder); _portletDataContext.addReferenceElement( _bookmarksFolder, bookmarksFolderElement, _bookmarksEntry, PortletDataContext.REFERENCE_TYPE_CHILD, true); Element missingReferencesElement = _portletDataContext.getMissingReferencesElement(); List<Element> missingReferenceElements = missingReferencesElement.elements(); Assert.assertTrue(missingReferenceElements.isEmpty()); } @Test public void testSameMissingReferenceMultipleTimes() throws Exception { Element bookmarksEntryElement = _portletDataContext.getExportDataElement(_bookmarksEntry); bookmarksEntryElement.addAttribute( "path", ExportImportPathUtil.getModelPath(_bookmarksEntry)); _portletDataContext.addReferenceElement( _bookmarksEntry, bookmarksEntryElement, _bookmarksFolder, PortletDataContext.REFERENCE_TYPE_DEPENDENCY, true); _portletDataContext.addReferenceElement( _bookmarksEntry, bookmarksEntryElement, _bookmarksFolder, PortletDataContext.REFERENCE_TYPE_DEPENDENCY, true); Element missingReferencesElement = _portletDataContext.getMissingReferencesElement(); List<Element> missingReferenceElements = missingReferencesElement.elements(); Assert.assertEquals( missingReferenceElements.toString(), 1, missingReferenceElements.size()); List<Element> referencesElements = _portletDataContext.getReferenceElements( _bookmarksEntry, BookmarksFolder.class); Assert.assertEquals( referencesElements.toString(), 2, referencesElements.size()); for (Element referenceElement : referencesElements) { Assert.assertTrue( GetterUtil.getBoolean( referenceElement.attributeValue("missing"))); } } private BookmarksEntry _bookmarksEntry; private BookmarksFolder _bookmarksFolder; @DeleteAfterTestRun private Group _group; private PortletDataContext _portletDataContext; private ServiceContext _serviceContext; }