diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/SavedSearchClassificationEnforcementTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/SavedSearchClassificationEnforcementTest.java
new file mode 100644
index 0000000000..e8c3c514aa
--- /dev/null
+++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/SavedSearchClassificationEnforcementTest.java
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 2005-2015 Alfresco Software Limited.
+ *
+ * This file is part of Alfresco
+ *
+ * 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 .
+ */
+package org.alfresco.module.org_alfresco_module_rm.test.integration.classification.interceptor;
+
+import static com.google.common.collect.Sets.newHashSet;
+import static java.lang.Integer.MAX_VALUE;
+import static org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService.ROLE_ADMIN;
+import static org.alfresco.module.org_alfresco_module_rm.search.SavedSearchDetails.QUERY;
+import static org.alfresco.service.cmr.repository.StoreRef.STORE_REF_WORKSPACE_SPACESSTORE;
+import static org.alfresco.service.cmr.search.SearchService.LANGUAGE_FTS_ALFRESCO;
+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.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.search.SearchParameters;
+import org.json.JSONObject;
+
+/**
+ * Integration test for saved searches with classification enforcement
+ *
+ * @author Tuna Aksoy
+ * @since 3.0
+ */
+public class SavedSearchClassificationEnforcementTest extends SearchClassificationEnforcementTestBase
+{
+ public void testSavedSearchWithClassificationEnforcement()
+ {
+ /**
+ * Given that a test user with mid-level security clearance exists
+ * and the test user is added to the RM Admin role
+ * and a category, a folder and five records are created in the file plan
+ * and two of the records are classified with the highest security level
+ * and another record is classified with the mid-level security level
+ *
+ * When I view the results of the saved search as admin
+ * The I will see all five records
+ *
+ * When I view the results of the saved search as the test user
+ * Then I will see the unclassified documents
+ * and the document with the mid-level classification
+ * and I won't be able to see the documents with the classification greater than my clearance level
+ */
+ doBehaviourDrivenTest(new BehaviourDrivenTest()
+ {
+ private NodeRef category;
+ private NodeRef folder;
+ private NodeRef record1;
+ private NodeRef record2;
+ private NodeRef record3;
+ private NodeRef record4;
+ private NodeRef record5;
+ private String savedSearchName = generate();
+ private String searchQuery = generate();
+ private List resultsForAdmin;
+ private List resultsForTestUser;
+
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase.BehaviourDrivenTest#given()
+ */
+ @Override
+ public void given() throws Exception
+ {
+ testUser = generate();
+ createPerson(testUser);
+ filePlanRoleService.assignRoleToAuthority(filePlan, ROLE_ADMIN, testUser);
+ securityClearanceService.setUserSecurityClearance(testUser, LEVEL2);
+
+ category = filePlanService.createRecordCategory(filePlan, generate());
+ folder = recordFolderService.createRecordFolder(category, generate());
+ record1 = utils.createRecord(folder, searchQuery + generate());
+ record2 = utils.createRecord(folder, searchQuery + generate());
+ record3 = utils.createRecord(folder, searchQuery + generate());
+ record4 = utils.createRecord(folder, searchQuery + generate());
+ record5 = utils.createRecord(folder, searchQuery + generate());
+
+ RecordsManagementSearchParameters searchParameters = new RecordsManagementSearchParameters();
+ searchParameters.setIncludeUndeclaredRecords(true);
+ rmSearchService.saveSearch(siteId, savedSearchName, generate(), searchQuery + "*", searchParameters, true);
+
+ contentClassificationService.classifyContent(LEVEL1, generate(), newHashSet(REASON), record1);
+ contentClassificationService.classifyContent(LEVEL2, generate(), newHashSet(REASON), record3);
+ contentClassificationService.classifyContent(LEVEL1, generate(), newHashSet(REASON), record5);
+ }
+
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase.BehaviourDrivenTest#when()
+ */
+ @Override
+ public void when() throws Exception
+ {
+ SavedSearchDetails savedSearchDetails = rmSearchService.getSavedSearch(siteId, savedSearchName);
+ JSONObject jsonObject = new JSONObject(savedSearchDetails.toJSONString());
+ String query = (String) jsonObject.get(QUERY);
+
+ resultsForAdmin = searchAsAdmin(query);
+ resultsForTestUser = searchAsTestUser(query);
+ }
+
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase.BehaviourDrivenTest#then()
+ */
+ @Override
+ public void then() throws Exception
+ {
+ doTestInTransaction(new Test()
+ {
+ @Override
+ public Void run()
+ {
+ assertNotNull(resultsForAdmin);
+ assertEquals(5, resultsForAdmin.size());
+ assertTrue(resultsForAdmin.contains(record1));
+ assertTrue(resultsForAdmin.contains(record2));
+ assertTrue(resultsForAdmin.contains(record3));
+ assertTrue(resultsForAdmin.contains(record4));
+ assertTrue(resultsForAdmin.contains(record5));
+
+ return null;
+ }
+ });
+
+ doTestInTransaction(new Test()
+ {
+ @Override
+ public Void run()
+ {
+ assertNotNull(resultsForTestUser);
+ assertEquals(3, resultsForTestUser.size());
+ assertTrue(resultsForTestUser.contains(record2));
+ assertTrue(resultsForTestUser.contains(record3));
+ assertTrue(resultsForTestUser.contains(record4));
+
+ return null;
+ }
+ }, testUser);
+ }
+ });
+ }
+
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.test.integration.classification.interceptor.SearchClassificationEnforcementTestBase#search(java.lang.String)
+ */
+ @Override
+ protected List search(String searchQuery)
+ {
+ SearchParameters searchParameters = new SearchParameters();
+ searchParameters.setQuery(searchQuery);
+ searchParameters.setLanguage(LANGUAGE_FTS_ALFRESCO);
+ searchParameters.addStore(STORE_REF_WORKSPACE_SPACESSTORE);
+ searchParameters.setMaxItems(MAX_VALUE);
+ searchParameters.setNamespace(RM_URI);
+ searchParameters.addQueryTemplate("keywords", "%(cm:name cm:title cm:description TEXT)");
+ return searchService.query(searchParameters).getNodeRefs();
+ }
+}