mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Fix ALF-2499 (Deleting a web project also deletes similarly named web projects - Potential Data Loss)
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@19918 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -948,7 +948,7 @@ public final class SandboxFactory extends WCMUtil
|
|||||||
String storeName = store.getName();
|
String storeName = store.getName();
|
||||||
|
|
||||||
// list main stores - not preview stores or workflow stores or locally deployed "live" ASR servers (LIVE or TEST)
|
// list main stores - not preview stores or workflow stores or locally deployed "live" ASR servers (LIVE or TEST)
|
||||||
if ((storeName.startsWith(wpStoreId)) &&
|
if ((WCMUtil.getWebProjectStoreId(storeName).equals(wpStoreId)) &&
|
||||||
(! WCMUtil.isPreviewStore(storeName)) &&
|
(! WCMUtil.isPreviewStore(storeName)) &&
|
||||||
((includeLocalhostDeployed || (! WCMUtil.isLocalhostDeployedStore(wpStoreId, storeName)))) &&
|
((includeLocalhostDeployed || (! WCMUtil.isLocalhostDeployedStore(wpStoreId, storeName)))) &&
|
||||||
((includeWorkflowSandboxes || (! WCMUtil.isWorkflowStore(storeName))))
|
((includeWorkflowSandboxes || (! WCMUtil.isWorkflowStore(storeName))))
|
||||||
|
@@ -251,6 +251,8 @@ public class SandboxServiceImpl implements SandboxService
|
|||||||
{
|
{
|
||||||
sbInfos = new ArrayList<SandboxInfo>(1);
|
sbInfos = new ArrayList<SandboxInfo>(1);
|
||||||
|
|
||||||
|
if (userRole != null)
|
||||||
|
{
|
||||||
SandboxInfo authorSandbox = getAuthorSandbox(wpStoreId, currentUser);
|
SandboxInfo authorSandbox = getAuthorSandbox(wpStoreId, currentUser);
|
||||||
|
|
||||||
if (authorSandbox != null)
|
if (authorSandbox != null)
|
||||||
@@ -260,6 +262,7 @@ public class SandboxServiceImpl implements SandboxService
|
|||||||
|
|
||||||
sbInfos.add(getSandbox(WCMUtil.buildStagingStoreName(wpStoreId))); // get staging sandbox
|
sbInfos.add(getSandbox(WCMUtil.buildStagingStoreName(wpStoreId))); // get staging sandbox
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return sbInfos;
|
return sbInfos;
|
||||||
}
|
}
|
||||||
|
@@ -254,9 +254,15 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest
|
|||||||
WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-list", TEST_WEBPROJ_NAME+" list", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION);
|
WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-list", TEST_WEBPROJ_NAME+" list", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION);
|
||||||
String wpStoreId = wpInfo.getStoreId();
|
String wpStoreId = wpInfo.getStoreId();
|
||||||
|
|
||||||
List<SandboxInfo> sbInfos = sbService.listSandboxes(wpInfo.getStoreId());
|
// Create ANOther web project
|
||||||
|
WebProjectInfo wpAnoInfo = wpService.createWebProject(TEST_SANDBOX+"-list ano", TEST_WEBPROJ_NAME+" list ano", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION);
|
||||||
|
String wpStoreAnoId = wpAnoInfo.getStoreId();
|
||||||
|
|
||||||
|
List<SandboxInfo> sbInfos = sbService.listSandboxes(wpStoreId);
|
||||||
assertEquals(2, sbInfos.size()); // staging sandbox, author sandbox (for admin)
|
assertEquals(2, sbInfos.size()); // staging sandbox, author sandbox (for admin)
|
||||||
|
|
||||||
|
assertEquals(2, sbService.listSandboxes(wpStoreAnoId).size());
|
||||||
|
|
||||||
String expectedUserSandboxId = TEST_SANDBOX+"-list" + "--" + AuthenticationUtil.getAdminUserName();
|
String expectedUserSandboxId = TEST_SANDBOX+"-list" + "--" + AuthenticationUtil.getAdminUserName();
|
||||||
|
|
||||||
// Do detailed check of the sandbox info objects
|
// Do detailed check of the sandbox info objects
|
||||||
@@ -432,7 +438,12 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest
|
|||||||
WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-delete", TEST_WEBPROJ_NAME+" delete", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION);
|
WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-delete", TEST_WEBPROJ_NAME+" delete", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION);
|
||||||
String wpStoreId = wpInfo.getStoreId();
|
String wpStoreId = wpInfo.getStoreId();
|
||||||
|
|
||||||
|
// Create ANOther web project
|
||||||
|
WebProjectInfo wpAnoInfo = wpService.createWebProject(TEST_SANDBOX+"-delete ano", TEST_WEBPROJ_NAME+" delete ano", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION);
|
||||||
|
String wpStoreAnoId = wpAnoInfo.getStoreId();
|
||||||
|
|
||||||
assertEquals(2, sbService.listSandboxes(wpStoreId).size());
|
assertEquals(2, sbService.listSandboxes(wpStoreId).size());
|
||||||
|
assertEquals(2, sbService.listSandboxes(wpStoreAnoId).size());
|
||||||
|
|
||||||
// Get staging sandbox
|
// Get staging sandbox
|
||||||
SandboxInfo sbInfo = sbService.getStagingSandbox(wpStoreId);
|
SandboxInfo sbInfo = sbService.getStagingSandbox(wpStoreId);
|
||||||
@@ -460,10 +471,11 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get admin author sandbox
|
// Get admin author sandbox
|
||||||
sbInfo = sbService.getAuthorSandbox(wpInfo.getStoreId());
|
sbInfo = sbService.getAuthorSandbox(wpStoreId);
|
||||||
sbService.deleteSandbox(sbInfo.getSandboxId());
|
sbService.deleteSandbox(sbInfo.getSandboxId());
|
||||||
|
|
||||||
assertEquals(1, sbService.listSandboxes(wpInfo.getStoreId()).size());
|
assertEquals(1, sbService.listSandboxes(wpStoreId).size());
|
||||||
|
assertEquals(2, sbService.listSandboxes(wpStoreAnoId).size());
|
||||||
|
|
||||||
// Invite web users
|
// Invite web users
|
||||||
wpService.inviteWebUser(wpStoreId, USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER);
|
wpService.inviteWebUser(wpStoreId, USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER);
|
||||||
|
@@ -482,6 +482,13 @@ public class WebProjectServiceImplTest extends AbstractWCMServiceImplTest
|
|||||||
String wpStoreId = wpInfo.getStoreId();
|
String wpStoreId = wpInfo.getStoreId();
|
||||||
assertNotNull(wpService.getWebProject(wpStoreId));
|
assertNotNull(wpService.getWebProject(wpStoreId));
|
||||||
|
|
||||||
|
// Create ANOther web project
|
||||||
|
WebProjectInfo wpAnoInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-delete ano", TEST_WEBPROJ_NAME+"-delete ano", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, true, null);
|
||||||
|
String wpStoreAnoId = wpAnoInfo.getStoreId();
|
||||||
|
|
||||||
|
assertEquals(2, sbService.listSandboxes(wpStoreId).size());
|
||||||
|
assertEquals(2, sbService.listSandboxes(wpStoreAnoId).size());
|
||||||
|
|
||||||
// Switch to USER_ONE
|
// Switch to USER_ONE
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE);
|
AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE);
|
||||||
|
|
||||||
@@ -517,6 +524,9 @@ public class WebProjectServiceImplTest extends AbstractWCMServiceImplTest
|
|||||||
wpService.deleteWebProject(wpStoreId);
|
wpService.deleteWebProject(wpStoreId);
|
||||||
assertNull(wpService.getWebProject(wpStoreId));
|
assertNull(wpService.getWebProject(wpStoreId));
|
||||||
|
|
||||||
|
assertEquals(0, sbService.listSandboxes(wpStoreId).size());
|
||||||
|
assertEquals(2, sbService.listSandboxes(wpStoreAnoId).size());
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Try to delete a web project that isn't there (-ve test)
|
// Try to delete a web project that isn't there (-ve test)
|
||||||
|
Reference in New Issue
Block a user