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:
Jan Vonka
2010-04-20 15:36:45 +00:00
parent b53c4f4fae
commit d74f934789
4 changed files with 35 additions and 10 deletions

View File

@@ -948,7 +948,7 @@ public final class SandboxFactory extends WCMUtil
String storeName = store.getName();
// 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)) &&
((includeLocalhostDeployed || (! WCMUtil.isLocalhostDeployedStore(wpStoreId, storeName)))) &&
((includeWorkflowSandboxes || (! WCMUtil.isWorkflowStore(storeName))))

View File

@@ -251,14 +251,17 @@ public class SandboxServiceImpl implements SandboxService
{
sbInfos = new ArrayList<SandboxInfo>(1);
SandboxInfo authorSandbox = getAuthorSandbox(wpStoreId, currentUser);
if (authorSandbox != null)
if (userRole != null)
{
sbInfos.add(authorSandbox);
}
SandboxInfo authorSandbox = getAuthorSandbox(wpStoreId, currentUser);
sbInfos.add(getSandbox(WCMUtil.buildStagingStoreName(wpStoreId))); // get staging sandbox
if (authorSandbox != null)
{
sbInfos.add(authorSandbox);
}
sbInfos.add(getSandbox(WCMUtil.buildStagingStoreName(wpStoreId))); // get staging sandbox
}
}
return sbInfos;

View File

@@ -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);
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, sbService.listSandboxes(wpStoreAnoId).size());
String expectedUserSandboxId = TEST_SANDBOX+"-list" + "--" + AuthenticationUtil.getAdminUserName();
// 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);
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(wpStoreAnoId).size());
// Get staging sandbox
SandboxInfo sbInfo = sbService.getStagingSandbox(wpStoreId);
@@ -460,10 +471,11 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest
}
// Get admin author sandbox
sbInfo = sbService.getAuthorSandbox(wpInfo.getStoreId());
sbInfo = sbService.getAuthorSandbox(wpStoreId);
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
wpService.inviteWebUser(wpStoreId, USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER);

View File

@@ -482,6 +482,13 @@ public class WebProjectServiceImplTest extends AbstractWCMServiceImplTest
String wpStoreId = wpInfo.getStoreId();
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
AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE);
@@ -517,6 +524,9 @@ public class WebProjectServiceImplTest extends AbstractWCMServiceImplTest
wpService.deleteWebProject(wpStoreId);
assertNull(wpService.getWebProject(wpStoreId));
assertEquals(0, sbService.listSandboxes(wpStoreId).size());
assertEquals(2, sbService.listSandboxes(wpStoreAnoId).size());
try
{
// Try to delete a web project that isn't there (-ve test)