/*
* #%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 static org.alfresco.util.GUID.generate;
import java.util.List;
import org.alfresco.module.org_alfresco_module_rm.search.RecordsManagementSearchParameters;
import org.alfresco.module.org_alfresco_module_rm.search.SavedSearchDetails;
import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.util.Pair;
/**
* Search service implementation unit test.
*
* @author Roy Wetherall
*/
public class RecordsManagementSearchServiceImplTest extends BaseRMTestCase
{
@Override
protected boolean isMultiHierarchyTest()
{
return true;
}
private static final String SEARCH1 = "search1";
private static final String SEARCH2 = "search2";
private static final String SEARCH3 = "search3";
private static final String SEARCH4 = "search4";
private String user;
private NodeRef folderLevelRecordFolder;
private NodeRef recordLevelRecordFolder;
private int numberOfReports;
/**
* @see org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase#setupTestData()
*/
@Override
protected void setupTestData()
{
super.setupTestData();
doTestInTransaction(new Test<Void>()
{
@Override
public Void run()
{
// Count the number of pre-defined reports
List<SavedSearchDetails> searches = rmSearchService.getSavedSearches(siteId);
assertNotNull(searches);
numberOfReports = searches.size();
user = generate();
createPerson(user);
return null;
}
}, AuthenticationUtil.getSystemUserName());
}
/**
* @see org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase#setupMultiHierarchyTestData()
*/
@Override
protected void setupMultiHierarchyTestData()
{
super.setupMultiHierarchyTestData();
doTestInTransaction(new Test<Void>()
{
@Override
public Void run()
{
folderLevelRecordFolder = mhRecordFolder42;
recordLevelRecordFolder = mhRecordFolder43;
utils.createRecord(folderLevelRecordFolder, "recordOne.txt", null, "record one - folder level - elephant");
utils.createRecord(folderLevelRecordFolder, "recordTwo.txt", null, "record two - folder level - snake");
utils.createRecord(folderLevelRecordFolder, "recordThree.txt", null, "record three - folder level - monkey");
utils.createRecord(recordLevelRecordFolder, "recordFour.txt", null, "record four - record level - elephant");
utils.createRecord(recordLevelRecordFolder, "recordFive.txt", null, "record five - record level - snake");
utils.createRecord(recordLevelRecordFolder, "recordSix.txt", null, "record six - record level - monkey");
return null;
}
}, AuthenticationUtil.getSystemUserName());
}
public void testSearch()
{
// Full text search
doTestInTransaction(new Test<Void>()
{
@Override
public Void run()
{
String query = "keywords:\"elephant\"";
RecordsManagementSearchParameters params = new RecordsManagementSearchParameters();
params.setIncludeUndeclaredRecords(true);
List<Pair<NodeRef, NodeRef>> results = rmSearchService.search(siteId, query, params);
assertNotNull(results);
assertEquals(2, results.size());
return null;
}
}, AuthenticationUtil.getSystemUserName());
// Property search
//
}
public void testSaveSearch()
{
// Add some saved searches (as admin user)
doTestInTransaction(new Test<Void>()
{
@Override
public Void run()
{
SavedSearchDetails details1 = rmSearchService.saveSearch(siteId, SEARCH1, "description1", "query1", new RecordsManagementSearchParameters(), true);
checkSearchDetails(details1, siteId, "search1", "description1", "query1", new RecordsManagementSearchParameters(), true);
SavedSearchDetails details2 = rmSearchService.saveSearch(siteId, SEARCH2, "description2", "query2", new RecordsManagementSearchParameters(), false);
checkSearchDetails(details2, siteId, "search2", "description2", "query2", new RecordsManagementSearchParameters(), false);
return null;
}
});
// Add some saved searches (as user1)
doTestInTransaction(new Test<Void>()
{
@Override
public Void run()
{
SavedSearchDetails details1 = rmSearchService.saveSearch(siteId, SEARCH3, "description3", "query3", new RecordsManagementSearchParameters(), false);
checkSearchDetails(details1, siteId, SEARCH3, "description3", "query3", new RecordsManagementSearchParameters(), false);
SavedSearchDetails details2 = rmSearchService.saveSearch(siteId, SEARCH4, "description4", "query4", new RecordsManagementSearchParameters(), false);
checkSearchDetails(details2, siteId, SEARCH4, "description4", "query4", new RecordsManagementSearchParameters(), false);
return null;
}
}, user);
// Get searches (as admin user)
doTestInTransaction(new Test<Void>()
{
@Override
public Void run()
{
List<SavedSearchDetails> searches = rmSearchService.getSavedSearches(siteId);
assertNotNull(searches);
assertEquals(numberOfReports + 2, searches.size());
SavedSearchDetails search1 = rmSearchService.getSavedSearch(siteId, SEARCH1);
assertNotNull(search1);
checkSearchDetails(search1, siteId, "search1", "description1", "query1", new RecordsManagementSearchParameters(), true);
SavedSearchDetails search2 = rmSearchService.getSavedSearch(siteId, SEARCH2);
assertNotNull(search2);
checkSearchDetails(search2, siteId, "search2", "description2", "query2", new RecordsManagementSearchParameters(), false);
SavedSearchDetails search3 = rmSearchService.getSavedSearch(siteId, SEARCH3);
assertNull(search3);
SavedSearchDetails search4 = rmSearchService.getSavedSearch(siteId, SEARCH4);
assertNull(search4);
return null;
}
});
// Get searches (as user1)
doTestInTransaction(new Test<Void>()
{
@Override
public Void run()
{
List<SavedSearchDetails> searches = rmSearchService.getSavedSearches(siteId);
assertNotNull(searches);
assertEquals(numberOfReports + 3, searches.size());
SavedSearchDetails search1 = rmSearchService.getSavedSearch(siteId, SEARCH1);
assertNotNull(search1);
checkSearchDetails(search1, siteId, "search1", "description1", "query1", new RecordsManagementSearchParameters(), true);
SavedSearchDetails search2 = rmSearchService.getSavedSearch(siteId, SEARCH2);
assertNull(search2);
SavedSearchDetails search3 = rmSearchService.getSavedSearch(siteId, SEARCH3);
assertNotNull(search3);
checkSearchDetails(search3, siteId, SEARCH3, "description3", "query3", new RecordsManagementSearchParameters(), false);
SavedSearchDetails search4 = rmSearchService.getSavedSearch(siteId, SEARCH4);
assertNotNull(search4);
checkSearchDetails(search4, siteId, "search4", "description4", "query4", new RecordsManagementSearchParameters(), false);
return null;
}
}, user);
// Update search (as admin user)
doTestInTransaction(new Test<Void>()
{
@Override
public Void run()
{
SavedSearchDetails search1 = rmSearchService.getSavedSearch(siteId, SEARCH1);
assertNotNull(search1);
checkSearchDetails(search1, siteId, SEARCH1, "description1", "query1", new RecordsManagementSearchParameters(), true);
rmSearchService.saveSearch(siteId, SEARCH1, "change", "change", new RecordsManagementSearchParameters(), true);
search1 = rmSearchService.getSavedSearch(siteId, SEARCH1);
assertNotNull(search1);
checkSearchDetails(search1, siteId, SEARCH1, "change", "change", new RecordsManagementSearchParameters(), true);
return null;
}
});
// Delete searches (as admin user)
// TODO
}
/**
* Check the details of the saved search.
*/
private void checkSearchDetails(
SavedSearchDetails details,
String siteid,
String name,
String description,
String query,
RecordsManagementSearchParameters searchParameters,
boolean isPublic)
{
assertNotNull(details);
assertEquals(siteid, details.getSiteId());
assertEquals(name, details.getName());
assertEquals(description, details.getDescription());
assertEquals(query, details.getSearch());
assertEquals(isPublic, details.isPublic());
assertEquals(searchParameters.getMaxItems(), details.getSearchParameters().getMaxItems());
assertEquals(searchParameters.isIncludeRecords(), details.getSearchParameters().isIncludeRecords());
assertEquals(searchParameters.isIncludeUndeclaredRecords(), details.getSearchParameters().isIncludeUndeclaredRecords());
assertEquals(searchParameters.isIncludeVitalRecords(), details.getSearchParameters().isIncludeVitalRecords());
assertEquals(searchParameters.isIncludeRecordFolders(), details.getSearchParameters().isIncludeRecordFolders());
assertEquals(searchParameters.isIncludeFrozen(), details.getSearchParameters().isIncludeFrozen());
assertEquals(searchParameters.isIncludeCutoff(), details.getSearchParameters().isIncludeCutoff());
// Check the other stuff ....
}
}