/* * #%L * Alfresco Records Management Module * %% * Copyright (C) 2005 - 2016 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - * If the software was purchased under a paid Alfresco license, the terms of * the paid license agreement will prevail. Otherwise, the software is * provided under the following open source license terms: * - * Alfresco 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 3 of the License, or * (at your option) any later version. * - * Alfresco 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. * - * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * #L% */ package org.alfresco.module.org_alfresco_module_rm.test.legacy.service; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.dataset.DataSet; import org.alfresco.module.org_alfresco_module_rm.dataset.DataSetService; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase; import org.alfresco.module.org_alfresco_module_rm.vital.VitalRecordDefinition; import org.alfresco.service.cmr.repository.NodeRef; /** * Dataset Service Test * * @author Tuna Aksoy * @since 2.1 */ public class DataSetServiceImplTest extends BaseRMTestCase { /** Id of the test data set*/ private static final String DATA_SET_ID = "testExampleData"; /** * @see DataSetService#getDataSets() */ public void testGetDataSets() throws Exception { doTestInTransaction(new Test<Void>() { @Override public Void run() throws Exception { Map<String, DataSet> dataSets = dataSetService.getDataSets(); // Test the data sets assertNotNull(dataSets); // At least the test data set must exist assertTrue(dataSets.size() >= 1); // The test data set must be in the list of available data sets assertNotNull(dataSets.get(DATA_SET_ID)); for (Map.Entry<String, DataSet> entry : dataSets.entrySet()) { // Test the key String key = entry.getKey(); assertNotNull(key); // Test the value DataSet dataSet = entry.getValue(); assertNotNull(dataSet); // Test the id String id = dataSet.getId(); assertNotNull(id); assertEquals(id, key); // Test the label String label = dataSet.getLabel(); assertNotNull(label); // Test the path String path = dataSet.getPath(); assertNotNull(path); } return null; } }); } /** * @see DataSetService#loadDataSet(String, org.alfresco.service.cmr.repository.NodeRef) */ public void testLoadDataSet() throws Exception { doTestInTransaction(new Test<Void>() { @Override public Void run() throws Exception { // Test the file plan before importing the data sets testFilePlanBeforeImportingDataSet(); // Load the data set into the specified file plan dataSetService.loadDataSet(filePlan, DATA_SET_ID); // Test the file plan after importing the data sets testFilePlanAfterImportingDataSet(); return null; } /** * Helper method for testing the test file plan before importing the data */ private void testFilePlanBeforeImportingDataSet() { // There should not be any categories before importing assertNull(nodeService.getChildByName(filePlan, ContentModel.ASSOC_CONTAINS, "TestRecordCategory1")); assertNull(nodeService.getChildByName(filePlan, ContentModel.ASSOC_CONTAINS, "TestRecordCategory2")); // The aspect should exist before loading a data set assertNull(nodeService.getProperty(filePlan, PROP_LOADED_DATA_SET_IDS)); // At the beginning the file plan is empty. So there should not be any data sets assertTrue(dataSetService.getLoadedDataSets(filePlan).size() == 0); assertFalse(dataSetService.isLoadedDataSet(filePlan, DATA_SET_ID)); assertTrue(dataSetService.getDataSets(filePlan, true).size() > 0); assertTrue(dataSetService.getDataSets(filePlan, false).size() > 0); } /** * Helper method for testing the test file plan after importing the data */ private void testFilePlanAfterImportingDataSet() { // Test the "first level" categories after importing if they exist // TestRecordCategory1 NodeRef recCat1 = nodeService.getChildByName(filePlan, ContentModel.ASSOC_CONTAINS, "TestRecordCategory1"); assertNotNull(recCat1); List<NodeRef> recCat1ImmediateChildren = filePlanService.getAllContained(recCat1); assertTrue(recCat1ImmediateChildren.size() == 3); List<NodeRef> recCat1AllChildren = filePlanService.getAllContained(recCat1, true); assertTrue(recCat1AllChildren.size() == 6); DispositionSchedule recCat1DispositionSchedule = dispositionService.getDispositionSchedule(recCat1); assertNull(recCat1DispositionSchedule); // TestRecordCategory2 NodeRef recCat2 = nodeService.getChildByName(filePlan, ContentModel.ASSOC_CONTAINS, "TestRecordCategory2"); assertNotNull(recCat2); List<NodeRef> recCat2ImmediateChildren = filePlanService.getAllContained(recCat2); assertTrue(recCat2ImmediateChildren.size() == 2); List<NodeRef> recCat2AllChildren = filePlanService.getAllContained(recCat2, true); assertTrue(recCat2AllChildren.size() == 4); DispositionSchedule recCat2DispositionSchedule = dispositionService.getDispositionSchedule(recCat2); assertNull(recCat2DispositionSchedule); // TestRecordCategory1: Test the "second level" categories and record folders NodeRef recCat11 = nodeService.getChildByName(recCat1, ContentModel.ASSOC_CONTAINS, "TestRecordCategory11"); assertNotNull(recCat11); List<NodeRef> recCat11ImmediateChilderen = filePlanService.getAllContained(recCat11); assertTrue(recCat11ImmediateChilderen.size() == 2); List<NodeRef> recCat11Childeren = filePlanService.getAllContained(recCat11, true); assertTrue(recCat11Childeren.size() == 2); assertNotNull(nodeService.getChildByName(recCat11, ContentModel.ASSOC_CONTAINS, "TestRecordFolder1")); assertNotNull(nodeService.getChildByName(recCat11, ContentModel.ASSOC_CONTAINS, "TestRecordFolder2")); VitalRecordDefinition recCat11VitalRecordDefinition = vitalRecordService.getVitalRecordDefinition(recCat11); assertNotNull(recCat11VitalRecordDefinition); assertTrue(recCat11VitalRecordDefinition.getReviewPeriod().getExpression().equals("1")); assertNotNull(recCat11VitalRecordDefinition.getNextReviewDate()); NodeRef recCat12 = nodeService.getChildByName(recCat1, ContentModel.ASSOC_CONTAINS, "TestRecordCategory12"); assertNotNull(recCat12); List<NodeRef> recCat12ImmediateChildren = filePlanService.getAllContained(recCat12); assertTrue(recCat12ImmediateChildren.size() == 1); List<NodeRef> recCat12Children = filePlanService.getAllContained(recCat12, true); assertTrue(recCat12Children.size() == 1); assertNotNull(nodeService.getChildByName(recCat12, ContentModel.ASSOC_CONTAINS, "TestRecordFolder3")); DispositionSchedule recCat12DispositionSchedule = dispositionService.getDispositionSchedule(recCat12); assertNotNull(recCat12DispositionSchedule); assertTrue(recCat12DispositionSchedule.getDispositionInstructions().equals("Cut off every 3 months, hold 3 months, then destroy.")); assertTrue(recCat12DispositionSchedule.getDispositionAuthority().equals("T0-000-00-1 item 002")); assertTrue(recCat12DispositionSchedule.getDispositionActionDefinitions().size() == 2); assertNotNull(recCat12DispositionSchedule.getDispositionActionDefinitionByName("cutoff")); assertNotNull(recCat12DispositionSchedule.getDispositionActionDefinitionByName("destroy")); NodeRef recCat13 = nodeService.getChildByName(recCat1, ContentModel.ASSOC_CONTAINS, "TestRecordCategory13"); assertNotNull(recCat13); List<NodeRef> recCat13ImmediateChildren = filePlanService.getAllContained(recCat13); assertTrue(recCat13ImmediateChildren.size() == 0); DispositionSchedule recCat13DispositionSchedule = dispositionService.getDispositionSchedule(recCat13); assertNotNull(recCat13DispositionSchedule); // TestRecordCategory2: Test the "second level" categories and record folders NodeRef recCat21 = nodeService.getChildByName(recCat2, ContentModel.ASSOC_CONTAINS, "TestRecordCategory21"); assertNotNull(recCat21); List<NodeRef> recCat21ImmediateChildren = filePlanService.getAllContained(recCat21); assertTrue(recCat21ImmediateChildren.size() == 0); DispositionSchedule recCat21DispositionSchedule = dispositionService.getDispositionSchedule(recCat21); assertNotNull(recCat21DispositionSchedule); NodeRef recCat22 = nodeService.getChildByName(recCat2, ContentModel.ASSOC_CONTAINS, "TestRecordCategory22"); assertNotNull(recCat22); List<NodeRef> recCat22ImmediateChildren = filePlanService.getAllContained(recCat22); assertTrue(recCat22ImmediateChildren.size() == 2); List<NodeRef> recCat22Children = filePlanService.getAllContained(recCat22, true); assertTrue(recCat22Children.size() == 2); assertNotNull(nodeService.getChildByName(recCat22, ContentModel.ASSOC_CONTAINS, "TestRecordFolder4")); assertNotNull(nodeService.getChildByName(recCat22, ContentModel.ASSOC_CONTAINS, "TestRecordFolder5")); DispositionSchedule recCat22DispositionSchedule = dispositionService.getDispositionSchedule(recCat22); assertNotNull(recCat22DispositionSchedule); // After loading the data set into the file plan the custom aspect should contain the id of the loaded data set Serializable nodeProperty = nodeService.getProperty(filePlan, PROP_LOADED_DATA_SET_IDS); assertNotNull(nodeProperty); @SuppressWarnings("unchecked") ArrayList<String> loadedDataSetIds = (ArrayList<String>)nodeProperty; assertTrue(loadedDataSetIds.size() == 1); assertTrue(loadedDataSetIds.contains(DATA_SET_ID)); // The data set has been loaded into the file plan, so the file plan should contain the data set id Map<String, DataSet> loadedDataSets = dataSetService.getLoadedDataSets(filePlan); assertTrue(loadedDataSets.size() == 1); assertTrue(loadedDataSets.containsKey(DATA_SET_ID)); assertTrue(dataSetService.isLoadedDataSet(filePlan, DATA_SET_ID)); assertTrue(dataSetService.getDataSets(filePlan, true).size() > 0); assertTrue(dataSetService.getDataSets(filePlan, false).size() > 1); } }); } /** * @see DataSetService#existsDataSet(String) */ public void testExistsDataSet() throws Exception { doTestInTransaction(new Test<Void>() { @Override public Void run() throws Exception { // Test if a data set with the specified data set id exists assertTrue(dataSetService.existsDataSet(DATA_SET_ID)); assertFalse(dataSetService.existsDataSet("AnotherDataSetId")); return null; } }); } /* * INFO: * * The tests for * * DataSetService#getDataSets(NodeRef, boolean) * DataSetService#getLoadedDataSets(NodeRef) * DataSetService#isLoadedDataSet(NodeRef, String) * * will be executed in testFilePlanBeforeImportingDataSet() and testFilePlanAfterImportingDataSet(). */ }