mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-06-30 18:15:39 +00:00
55206: Branch created for 4.2.x releases. 55209: Merged HEAD to BRANCHES/V4.2: 55208: Added Sharepoint config to unit test classpath to fix VtiRequestDispatcherTest. 55222: Merged HEAD-BUG-FIX to V4.2 55220: Merged V4.1-BUG-FIX (4.1.7) to HEAD-BUG-FIX (4.2) 55218: Fix for ALF-19894 Site is not displayed after restoring from Trashcan This bug was reported on 4.2, but the bug is also present on 4.1. I have added a testcase to reproduce the bug along with a fix. The problem was in SiteServiceImpl.delete where the code was writing an empty property value into the {}memberships property and therefore there was no record of which users had been members of the deleted site. 55245: Fixed javadoc while checking that ALF-19055 was fixed. ActivityService no longer uses 'format 55246: CLOUD-2050 -Content changes are not synced from Cloud to On-Premise (errors in the logs) 55249: Hazelcast: Added ability to create cache with 'read-backup-data' via property *.readBackupData 55250: Hazelcast cache builder now accepts 'async-backup-count' value and any error in setting a value logs the full exception 55251: Asynchronous cache: Better logging of in- and after-transaction processes 55252: Asynchronous cache: Better logging of in- and after-transaction processes 55266: Workflow REST API fix for variable retrieval 55276: Merged HEAD to BRANCHES/V4.2: 55274: Disabling Sharepoint unit tests until we can make them run properly in the build. 55278: ALF-19889 - String for Brazilian Portuguese 55279: Merged DEV to 4.2 ALF-17464 : Replication jobs aren't displayed until sorting by some characteristic - Changing not exact equals (!==) to not euqals (!=) 55280: Fix for ALF-19865 - Forgot password link redirects to Login page. Also cleaned up the mess that is the 'Sign in to Alfresco in the cloud' dialog. 55281: Probable fix for ALF-19225 Intermittent test failures in SubscriptionServiceActivitiesTest 55282: ALF-19865 - Cloud Sync profile area now looks like the rest of profile area. 55285: Merged BRANCHES/DEV/BELARUS/HEAD-2013_08_27 to BRANCHES/V4.2: 55068: ALF-19915 : MT and WebDAV: Content is lost when uploading non-empty document 55286: Merged BRANCHES/DEV/BELARUS/HEAD-2013_08_29 to BRANCHES/V4.2: 55207: ALF-19915 : MT and WebDAV: Content is lost when uploading non-empty document 55210: ALF-19915 : MT and WebDAV: Content is lost when uploading non-empty document 55297: As part of prep work for fixing ALF-20023 Recent Sites and Favorite Sites in copy/move pickers empty, 55299: ALF-19556: IE10 specific fix for file upload browse (impressive how IE finds more and more innovative ways to spoil things for itself) 55300: Fixed date issue when creating a new process instance 55308: Resync to HEAD@55302 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@55309 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
246 lines
11 KiB
Java
246 lines
11 KiB
Java
/*
|
|
* Copyright (C) 2005-2013 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 <http://www.gnu.org/licenses/>.
|
|
*/
|
|
package org.alfresco.repo.preference;
|
|
|
|
import static org.junit.Assert.assertEquals;
|
|
import static org.junit.Assert.assertNotNull;
|
|
import static org.junit.Assert.fail;
|
|
|
|
import java.io.Serializable;
|
|
import java.util.Date;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
import org.alfresco.model.ContentModel;
|
|
import org.alfresco.repo.jscript.ClasspathScriptLocation;
|
|
import org.alfresco.repo.model.Repository;
|
|
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
|
import org.alfresco.repo.security.permissions.AccessDeniedException;
|
|
import org.alfresco.repo.transaction.RetryingTransactionHelper;
|
|
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
|
import org.alfresco.service.cmr.preference.PreferenceService;
|
|
import org.alfresco.service.cmr.repository.ContentReader;
|
|
import org.alfresco.service.cmr.repository.ContentService;
|
|
import org.alfresco.service.cmr.repository.NodeRef;
|
|
import org.alfresco.service.cmr.repository.ScriptLocation;
|
|
import org.alfresco.service.cmr.repository.ScriptService;
|
|
import org.alfresco.service.cmr.security.PersonService;
|
|
import org.alfresco.util.test.junitrules.AlfrescoPerson;
|
|
import org.alfresco.util.test.junitrules.ApplicationContextInit;
|
|
import org.alfresco.util.test.junitrules.RunAsFullyAuthenticatedRule;
|
|
import org.alfresco.util.test.junitrules.RunAsFullyAuthenticatedRule.RunAsUser;
|
|
import org.apache.commons.logging.Log;
|
|
import org.apache.commons.logging.LogFactory;
|
|
import org.json.JSONException;
|
|
import org.json.JSONObject;
|
|
import org.json.JSONTokener;
|
|
import org.junit.BeforeClass;
|
|
import org.junit.ClassRule;
|
|
import org.junit.Rule;
|
|
import org.junit.Test;
|
|
import org.junit.rules.RuleChain;
|
|
|
|
/**
|
|
* {@link PreferenceService} implementation unit test
|
|
*
|
|
* @author Roy Wetherall
|
|
* @author Neil Mc Erlean (refactoring to JUnit Rules and enabling disabled tests)
|
|
*/
|
|
public class PreferenceServiceImplTest
|
|
{
|
|
private static final Log log = LogFactory.getLog(PreferenceServiceImplTest.class);
|
|
|
|
// JUnit rule to initialise the default Alfresco spring configuration
|
|
@ClassRule public static ApplicationContextInit APP_CONTEXT_INIT = new ApplicationContextInit();
|
|
|
|
private static final String USERNAME2 = "userBad";
|
|
|
|
// Rules to create test users. Note that this class is unusual in that we do *NOT* want to reuse users across test methods.
|
|
public AlfrescoPerson testUser1 = new AlfrescoPerson(APP_CONTEXT_INIT);
|
|
public AlfrescoPerson testUser2 = new AlfrescoPerson(APP_CONTEXT_INIT, USERNAME2);
|
|
|
|
// A rule to have all test methods be run as "UserOne".
|
|
public RunAsFullyAuthenticatedRule runAsRule = new RunAsFullyAuthenticatedRule(testUser1);
|
|
|
|
// Tie them together in a Rule Chain
|
|
@Rule public RuleChain ruleChain = RuleChain.outerRule(testUser1)
|
|
.around(testUser2)
|
|
.around(runAsRule);
|
|
|
|
|
|
// Various services
|
|
private static ContentService CONTENT_SERVICE;
|
|
private static PersonService PERSON_SERVICE;
|
|
private static PreferenceService PREFERENCE_SERVICE;
|
|
private static RetryingTransactionHelper TRANSACTION_HELPER;
|
|
private static ScriptService SCRIPT_SERVICE;
|
|
|
|
private static NodeRef COMPANY_HOME;
|
|
|
|
@BeforeClass public static void initStaticData() throws Exception
|
|
{
|
|
CONTENT_SERVICE = APP_CONTEXT_INIT.getApplicationContext().getBean("ContentService", ContentService.class);
|
|
PERSON_SERVICE = APP_CONTEXT_INIT.getApplicationContext().getBean("PersonService", PersonService.class);
|
|
PREFERENCE_SERVICE = APP_CONTEXT_INIT.getApplicationContext().getBean("PreferenceService", PreferenceService.class);
|
|
SCRIPT_SERVICE = APP_CONTEXT_INIT.getApplicationContext().getBean("ScriptService", ScriptService.class);
|
|
TRANSACTION_HELPER = APP_CONTEXT_INIT.getApplicationContext().getBean("retryingTransactionHelper", RetryingTransactionHelper.class);
|
|
|
|
Repository repositoryHelper = (Repository) APP_CONTEXT_INIT.getApplicationContext().getBean("repositoryHelper");
|
|
COMPANY_HOME = repositoryHelper.getCompanyHome();
|
|
}
|
|
|
|
@Test public void testPreferences() throws Exception
|
|
{
|
|
TRANSACTION_HELPER.doInTransaction(new RetryingTransactionCallback<Void>()
|
|
{
|
|
@Override public Void execute() throws Throwable
|
|
{
|
|
// Try and get preferences before they have been set
|
|
Map<String, Serializable> prefs = PREFERENCE_SERVICE.getPreferences(testUser1.getUsername());
|
|
assertNotNull(prefs);
|
|
assertEquals(0, prefs.size());
|
|
|
|
// Lets set some preferences for the user
|
|
prefs = new HashMap<String, Serializable>(5);
|
|
prefs.put("alfresco.one.alpha", "string");
|
|
prefs.put("alfresco.one.beta", 100);
|
|
prefs.put("alfresco.two.alpha", 3.142);
|
|
prefs.put("alfresco.two.beta", COMPANY_HOME);
|
|
prefs.put("alfresco.two.gamma", new Date());
|
|
prefs.put("atTheRoot", "thisIsAtTheRoot");
|
|
PREFERENCE_SERVICE.setPreferences(testUser1.getUsername(), prefs);
|
|
|
|
NodeRef personNodeRef = PERSON_SERVICE.getPerson(testUser1.getUsername());
|
|
ContentReader reader = CONTENT_SERVICE.getReader(personNodeRef, ContentModel.PROP_PREFERENCE_VALUES);
|
|
log.debug("JSON: \n" + prettyJson(reader.getContentString()));
|
|
|
|
// Try and get all the preferences
|
|
prefs = PREFERENCE_SERVICE.getPreferences(testUser1.getUsername(), null);
|
|
assertNotNull(prefs);
|
|
assertEquals(6, prefs.size());
|
|
|
|
// Try and get some of the preferences
|
|
prefs = PREFERENCE_SERVICE.getPreferences(testUser1.getUsername(), "alfresco.two");
|
|
assertNotNull(prefs);
|
|
assertEquals(3, prefs.size());
|
|
|
|
// Clear some of the preferences
|
|
PREFERENCE_SERVICE.clearPreferences(testUser1.getUsername(), "alfresco.two");
|
|
prefs = PREFERENCE_SERVICE.getPreferences(testUser1.getUsername(), null);
|
|
assertNotNull(prefs);
|
|
assertEquals(3, prefs.size());
|
|
|
|
// Clear all the preferences
|
|
PREFERENCE_SERVICE.clearPreferences(testUser1.getUsername());
|
|
prefs = PREFERENCE_SERVICE.getPreferences(testUser1.getUsername());
|
|
assertNotNull(prefs);
|
|
assertEquals(0, prefs.size());
|
|
return null;
|
|
}
|
|
});
|
|
}
|
|
|
|
@Test(expected=AccessDeniedException.class)
|
|
@RunAsUser(userName=USERNAME2)
|
|
public void testBadUser()
|
|
{
|
|
TRANSACTION_HELPER.doInTransaction(new RetryingTransactionCallback<Void>()
|
|
{
|
|
@Override public Void execute() throws Throwable
|
|
{
|
|
Map<String, Serializable> prefs = new HashMap<String, Serializable>(5);
|
|
prefs.put("alfresco.one.alpha", "string");
|
|
PREFERENCE_SERVICE.setPreferences(testUser1.getUsername(), prefs);
|
|
|
|
return null;
|
|
}
|
|
});
|
|
}
|
|
|
|
@Test public void testGetOtherUserPreferences()
|
|
{
|
|
TRANSACTION_HELPER.doInTransaction(new RetryingTransactionCallback<Void>()
|
|
{
|
|
@Override public Void execute() throws Throwable
|
|
{
|
|
// Lets set some preferences for the user one
|
|
Map<String, Serializable> prefs = new HashMap<String, Serializable>(5);
|
|
prefs.put("alfresco.one.alpha", "string");
|
|
prefs.put("alfresco.one.beta", 100);
|
|
PREFERENCE_SERVICE.setPreferences(testUser1.getUsername(), prefs);
|
|
|
|
Map<String, Serializable> userOnePrefs = PREFERENCE_SERVICE.getPreferences(testUser1.getUsername());
|
|
assertNotNull(userOnePrefs);
|
|
assertEquals(2, prefs.size());
|
|
return null;
|
|
}
|
|
});
|
|
|
|
TRANSACTION_HELPER.doInTransaction(new RetryingTransactionCallback<Void>()
|
|
{
|
|
@Override public Void execute() throws Throwable
|
|
{
|
|
AuthenticationUtil.setFullyAuthenticatedUser(USERNAME2);
|
|
// This should not be possible
|
|
try
|
|
{
|
|
PREFERENCE_SERVICE.getPreferences(testUser1.getUsername());
|
|
}
|
|
catch (AccessDeniedException expected) { return null; }
|
|
fail("Expected exception when trying to access another user's prefs");
|
|
|
|
return null;
|
|
}
|
|
});
|
|
}
|
|
|
|
// == Test the JavaScript API ==
|
|
@Test public void testJSAPI() throws Exception
|
|
{
|
|
TRANSACTION_HELPER.doInTransaction(new RetryingTransactionCallback<Void>()
|
|
{
|
|
@Override public Void execute() throws Throwable
|
|
{
|
|
// This test is running as user1 and the JavaScript needs to know that.
|
|
Map<String, Object> model = new HashMap<String, Object>();
|
|
model.put("username", testUser1.getUsername());
|
|
|
|
ScriptLocation location = new ClasspathScriptLocation("org/alfresco/repo/preference/script/test_preferenceService.js");
|
|
SCRIPT_SERVICE.executeScript(location, model);
|
|
|
|
return null;
|
|
}
|
|
});
|
|
}
|
|
|
|
private String prettyJson(String jsonString)
|
|
{
|
|
String result = jsonString;
|
|
try
|
|
{
|
|
JSONObject json = new JSONObject(new JSONTokener(jsonString));
|
|
result = json.toString(2);
|
|
} catch (JSONException ignored)
|
|
{
|
|
// Intentionally empty
|
|
}
|
|
return result;
|
|
}
|
|
}
|