diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionManager.java b/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionManager.java index 1ace1be46..97ebc79ca 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionManager.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionManager.java @@ -42,10 +42,13 @@ import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.TypedQuery; import javax.transaction.Transactional; + import org.librecms.CmsConstants; import org.librecms.lifecycle.LifecycleDefinition; +import java.util.Optional; + import static org.librecms.CmsConstants.*; import static org.librecms.contentsection.ContentSection.*; @@ -69,8 +72,9 @@ public class ContentSectionManager { @Inject private RoleRepository roleRepo; -// @Inject -// private RoleManager roleManager; + @Inject + private ContentTypeRepository typeRepo; + @Inject private PermissionManager permissionManager; @@ -106,6 +110,7 @@ public class ContentSectionManager { final Folder rootFolder = new Folder(); rootFolder.setName(String.format("%s_root", name)); + rootFolder.setType(FolderType.DOCUMENTS_FOLDER); rootFolder.getTitle().addValue(defautLocale, rootFolder.getName()); rootFolder.setDisplayName(rootFolder.getName()); rootFolder.setUuid(UUID.randomUUID().toString()); @@ -115,6 +120,7 @@ public class ContentSectionManager { final Folder rootAssetFolder = new Folder(); rootAssetFolder.setName(String.format("%s_assets", name)); + rootAssetFolder.setType(FolderType.ASSETS_FOLDER); rootAssetFolder.getTitle().addValue(defautLocale, rootAssetFolder.getName()); rootAssetFolder.setDisplayName(rootAssetFolder.getName()); @@ -233,6 +239,15 @@ public class ContentSectionManager { final String roleName, final String... privileges) { + if (section == null) { + throw new IllegalArgumentException("Can't add a role to " + + "section null."); + } + + if (roleName == null || roleName.trim().isEmpty()) { + throw new IllegalArgumentException("No role name provided."); + } + final Role role = new Role(); role.setName(String.join("_", section.getLabel(), roleName)); roleRepo.save(role); @@ -261,6 +276,16 @@ public class ContentSectionManager { @RequiresPrivilege(PRIVILEGE_ADMINISTER_ROLES) final ContentSection section) { + if (section == null) { + throw new IllegalArgumentException("Can't add a role to " + + "section null."); + } + + if (role == null) { + throw new IllegalArgumentException("Can't add role null to a " + + "content section."); + } + section.addRole(role); sectionRepo.save(section); } @@ -307,46 +332,6 @@ public class ContentSectionManager { permissions.forEach(p -> entityManager.remove(p)); } - /** - * Associates a content type with a content section making the type - * available for use in the content section. This operation requires - * {@link CmsConstants#PRIVILEGE_ADMINISTER_CONTENT_TYPES} for the provided - * content section. - * - * @param type The {@link ContentItem} class representing the type to - * add. - * @param section The section to which to type is added. - */ - @AuthorizationRequired - @Transactional(Transactional.TxType.REQUIRED) - public void addTypeToSection( - final Class type, - @RequiresPrivilege(PRIVILEGE_ADMINISTER_CONTENT_TYPES) - final ContentSection section) { - - throw new UnsupportedOperationException(); - } - - /** - * Removes a content type from a content section. After this it is not - * possible to create new items of this type in the content section. - * Existing items are left untouched. This operation requires - * {@link CmsConstants#PRIVILEGE_ADMINISTER_CONTENT_TYPES} for the provided - * content section. - * - * @param type The type to remove. - * @param section The section from which the type is removed. - */ - @AuthorizationRequired - @Transactional(Transactional.TxType.REQUIRED) - public void removeTypeFromSection( - final ContentType type, - @RequiresPrivilege(PRIVILEGE_ADMINISTER_CONTENT_TYPES) - final ContentSection section) { - - throw new UnsupportedOperationException(); - } - /** * Adds a lifecycle definition to a content section. This operation requires * {@link CmsConstants#PRIVILEGE_ADMINISTER_LIFECYLES} for the provided @@ -447,7 +432,9 @@ public class ContentSectionManager { /** * Adds a new {@link ContentType} to a content section, making items of that - * type available in the content section. + * type available in the content section. This operation requires + * {@link CmsConstants#PRIVILEGE_ADMINISTER_CONTENT_TYPES} for the provided + * content section. * * @param type The type to add (a subclass of * {@link ContentItem}. @@ -465,13 +452,79 @@ public class ContentSectionManager { * * @return The new {@link ContentType} instance. */ + @AuthorizationRequired + @Transactional(Transactional.TxType.REQUIRED) public ContentType addContentTypeToSection( final Class type, + @RequiresPrivilege(CmsConstants.PRIVILEGE_ADMINISTER_CONTENT_TYPES) final ContentSection section, final LifecycleDefinition defaultLifecycle, final WorkflowTemplate defaultWorkflow) { - throw new UnsupportedOperationException(); + if (type == null) { + throw new IllegalArgumentException("Can't add null as content type " + + "to a content section."); + } + + if (section == null) { + throw new IllegalArgumentException("Can't add a content type" + + "to section null."); + } + + if (defaultLifecycle == null) { + throw new IllegalArgumentException("Can't create a content type " + + "without a default lifecycle."); + } + + if (defaultWorkflow == null) { + throw new IllegalArgumentException("Can't create a content type " + + "without a default workflow."); + } + + if (!section.getLifecycleDefinitions().contains(defaultLifecycle)) { + final KernelConfig kernelConfig = confManager.findConfiguration( + KernelConfig.class); + final Locale defaultLocale = kernelConfig.getDefaultLocale(); + throw new IllegalArgumentException(String.format( + "The provided default lifecycle %d\"%s\" is not part of the" + + "provided content section %d\"%s\".", + defaultLifecycle.getDefinitionId(), + defaultLifecycle.getLabel().getValue(defaultLocale), + section.getObjectId(), + section.getDisplayName())); + } + + if (!section.getWorkflowTemplates().contains(defaultWorkflow)) { + final KernelConfig kernelConfig = confManager.findConfiguration( + KernelConfig.class); + final Locale defaultLocale = kernelConfig.getDefaultLocale(); + throw new IllegalArgumentException(String.format( + "The provided default workflow %d\"%s\" is not part of the" + + "provided content section %d\"%s\".", + defaultWorkflow.getWorkflowId(), + defaultWorkflow.getName().getValue(defaultLocale), + section.getObjectId(), + section.getDisplayName())); + } + + if (hasContentType(type, section)) { + return typeRepo.findByContentSectionAndClass(section, type).get(); + } + + final ContentType contentType = new ContentType(); + contentType.setUuid(UUID.randomUUID().toString()); + contentType.setContentSection(section); + contentType.setDisplayName(type.getName()); + contentType.setContentItemClass(type.getName()); + contentType.setDefaultLifecycle(defaultLifecycle); + contentType.setDefaultWorkflow(defaultWorkflow); + + section.addContentType(contentType); + + sectionRepo.save(section); + typeRepo.save(contentType); + + return contentType; } /** @@ -487,26 +540,69 @@ public class ContentSectionManager { public boolean hasContentType(final Class type, final ContentSection section) { - throw new UnsupportedOperationException(); + if (type == null) { + return false; + } + + if (section == null) { + return false; + } + + final Optional result = typeRepo + .findByContentSectionAndClass(section, type); + + return result.isPresent(); } /** * Removes an unused {@link ContentType} from a - * {@link ContentSection}. + * {@link ContentSection}. This operation requires + * {@link CmsConstants#PRIVILEGE_ADMINISTER_CONTENT_TYPES} for the provided + * content section. * - * @param type The type to remove from the section. + * @param type The type to remove from the section. * @param section The section from which the type is removed. * * @throws IllegalArgumentException if the provided {@link ContentType} is * in use or the parameters or otherwise * illegal. - * @see ContentTypeRepository#delete(org.librecms.contentsection.ContentType) + * @see + * ContentTypeRepository#delete(org.librecms.contentsection.ContentType) */ + @AuthorizationRequired + @Transactional(Transactional.TxType.REQUIRED) public void removeContentTypeFromSection( final Class type, + @RequiresPrivilege(CmsConstants.PRIVILEGE_ADMINISTER_CONTENT_TYPES) final ContentSection section) { - throw new UnsupportedOperationException(); + if (type == null) { + throw new IllegalArgumentException("Can't remove content type null."); + } + + if (section == null) { + throw new IllegalArgumentException("Can't remove a content type " + + "from section null."); + } + + final Optional contentType = typeRepo + .findByContentSectionAndClass(section, type); + + if (!contentType.isPresent()) { + return; + } + + if (typeRepo.isContentTypeInUse(contentType.get())) { + throw new IllegalArgumentException(String.format( + "ContentType %d:\"%s\" is used by content section %d:\"s\" can can't" + + "be deleted.", + contentType.get().getObjectId(), + contentType.get().getDisplayName(), + section.getObjectId(), + section.getDisplayName())); + } + + typeRepo.delete(contentType.get()); } } diff --git a/ccm-cms/src/test/java/org/librecms/contentsection/ContentSectionManagerTest.java b/ccm-cms/src/test/java/org/librecms/contentsection/ContentSectionManagerTest.java index dbdff01bd..bb01461e1 100644 --- a/ccm-cms/src/test/java/org/librecms/contentsection/ContentSectionManagerTest.java +++ b/ccm-cms/src/test/java/org/librecms/contentsection/ContentSectionManagerTest.java @@ -56,6 +56,13 @@ import static org.librecms.CmsConstants.*; import static org.libreccm.testutils.DependenciesHelpers.*; import org.jboss.arquillian.container.test.api.ShouldThrowException; +import org.libreccm.workflow.WorkflowTemplate; +import org.libreccm.workflow.WorkflowTemplateRepository; +import org.librecms.contenttypes.Article; +import org.librecms.contenttypes.Event; +import org.librecms.contenttypes.News; +import org.librecms.lifecycle.LifecycleDefinition; +import org.librecms.lifecycle.LifecycleDefinitionRepository; /** * Tests for the {@link ContentSectionManager}. @@ -87,6 +94,12 @@ public class ContentSectionManagerTest { @Inject private ContentTypeRepository typeRepo; + @Inject + private LifecycleDefinitionRepository lifecycleDefRepo; + + @Inject + private WorkflowTemplateRepository workflowTemplateRepo; + public ContentSectionManagerTest() { } @@ -153,6 +166,7 @@ public class ContentSectionManagerTest { .getPackage()) .addPackage(org.librecms.lifecycle.Lifecycle.class.getPackage()) .addPackage(ContentSection.class.getPackage()) + .addPackage(org.librecms.contenttypes.Article.class.getPackage()) .addPackage(org.libreccm.tests.categories.IntegrationTest.class .getPackage()) //.addAsLibraries(getModuleDependencies()) @@ -175,6 +189,8 @@ public class ContentSectionManagerTest { assertThat(confManager, is(not(nullValue()))); assertThat(categoryRepo, is(not(nullValue()))); assertThat(typeRepo, is(not(nullValue()))); + assertThat(lifecycleDefRepo, is(not(nullValue()))); + assertThat(workflowTemplateRepo, is(not(nullValue()))); } /** @@ -196,7 +212,9 @@ public class ContentSectionManagerTest { "uuid", "created", "section_id", - "creation_date"}) + "creation_date", + "content_section_id", + "folder_id"}) @InSequence(100) public void createSection() { manager.createContentSection("test"); @@ -401,10 +419,25 @@ public class ContentSectionManagerTest { + "ContentSectionManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/contentsection/" - + "ContentSectionManagerTest/after-add-contenttype.xml") + + "ContentSectionManagerTest/after-add-contenttype.xml", + excludeColumns = {"object_id", + "uuid"}) @InSequence(400) public void addContentTypeToSection() { - fail(); + final ContentSection section = repository.findById(-1100L); + final LifecycleDefinition lifecycleDef = lifecycleDefRepo + .findById(-13002L); + final WorkflowTemplate workflowTemplate = workflowTemplateRepo + .findById(-14001L); + + assertThat(section, is(not(nullValue()))); + assertThat(lifecycleDef, is(not(nullValue()))); + assertThat(workflowTemplate, is(not(nullValue()))); + + manager.addContentTypeToSection(Event.class, + section, + lifecycleDef, + workflowTemplate); } /** @@ -419,8 +452,21 @@ public class ContentSectionManagerTest { @ShouldMatchDataSet("datasets/org/librecms/contentsection/" + "ContentSectionManagerTest/data.xml") @InSequence(500) - public void addAlreadyAddedTypeToSection() { - fail(); + public void addAlreadyAddedContentTypeToSection() { + final ContentSection section = repository.findById(-1100L); + final LifecycleDefinition lifecycleDef = lifecycleDefRepo + .findById(-13002L); + final WorkflowTemplate workflowTemplate = workflowTemplateRepo + .findById(-14002L); + + assertThat(section, is(not(nullValue()))); + assertThat(lifecycleDef, is(not(nullValue()))); + assertThat(workflowTemplate, is(not(nullValue()))); + + manager.addContentTypeToSection(News.class, + section, + lifecycleDef, + workflowTemplate); } /** @@ -436,8 +482,22 @@ public class ContentSectionManagerTest { + "ContentSectionManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(600) - public void addTypeToSectionTypeIsNull() { - fail(); + public void addContentTypeToSectionTypeIsNull() { + final ContentSection section = repository.findById(-1100L); + final LifecycleDefinition lifecycleDef = lifecycleDefRepo + .findById(-13002L); + final WorkflowTemplate workflowTemplate = workflowTemplateRepo + .findById(-14002L); + + assertThat(section, is(not(nullValue()))); + assertThat(lifecycleDef, is(not(nullValue()))); + assertThat(workflowTemplate, is(not(nullValue()))); + + manager.addContentTypeToSection(null, + section, + lifecycleDef, + workflowTemplate); + } /** @@ -453,8 +513,19 @@ public class ContentSectionManagerTest { + "ContentSectionManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(700) - public void addTypeToSectionSectionIsNull() { - fail(); + public void addContentTypeToSectionSectionIsNull() { + final LifecycleDefinition lifecycleDef = lifecycleDefRepo + .findById(-13002L); + final WorkflowTemplate workflowTemplate = workflowTemplateRepo + .findById(-14002L); + + assertThat(lifecycleDef, is(not(nullValue()))); + assertThat(workflowTemplate, is(not(nullValue()))); + + manager.addContentTypeToSection(Event.class, + null, + lifecycleDef, + workflowTemplate); } /** @@ -470,8 +541,18 @@ public class ContentSectionManagerTest { + "ContentSectionManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(800) - public void addTypeToSectionLifecycleIsNull() { - fail(); + public void addContentTypeToSectionLifecycleIsNull() { + final ContentSection section = repository.findById(-1100L); + final WorkflowTemplate workflowTemplate = workflowTemplateRepo + .findById(-14001L); + + assertThat(section, is(not(nullValue()))); + assertThat(workflowTemplate, is(not(nullValue()))); + + manager.addContentTypeToSection(Event.class, + section, + null, + workflowTemplate); } /** @@ -487,8 +568,19 @@ public class ContentSectionManagerTest { + "ContentSectionManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(900) - public void addTypeToSectionWorkflowIsNull() { - fail(); + public void addContentTypeToSectionWorkflowIsNull() { + final ContentSection section = repository.findById(-1100L); + final LifecycleDefinition lifecycleDef = lifecycleDefRepo + .findById(-13002L); + + assertThat(section, is(not(nullValue()))); + assertThat(lifecycleDef, is(not(nullValue()))); + + manager.addContentTypeToSection(Event.class, + section, + lifecycleDef, + null); + } /** @@ -504,8 +596,21 @@ public class ContentSectionManagerTest { + "ContentSectionManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(1000) - public void addTypeToSectionLifecycleNotInSection() { - fail(); + public void addContentTypeToSectionLifecycleNotInSection() { + final ContentSection section = repository.findById(-1100L); + final LifecycleDefinition lifecycleDef = lifecycleDefRepo + .findById(-13003L); + final WorkflowTemplate workflowTemplate = workflowTemplateRepo + .findById(-14001L); + + assertThat(section, is(not(nullValue()))); + assertThat(lifecycleDef, is(not(nullValue()))); + assertThat(workflowTemplate, is(not(nullValue()))); + + manager.addContentTypeToSection(Event.class, + section, + lifecycleDef, + workflowTemplate); } /** @@ -521,8 +626,21 @@ public class ContentSectionManagerTest { + "ContentSectionManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(1100) - public void addTypeToSectionWorkflowNoInSection() { - fail(); + public void addContentTypeToSectionWorkflowNoInSection() { + final ContentSection section = repository.findById(-1100L); + final LifecycleDefinition lifecycleDef = lifecycleDefRepo + .findById(-13002L); + final WorkflowTemplate workflowTemplate = workflowTemplateRepo + .findById(-14003L); + + assertThat(section, is(not(nullValue()))); + assertThat(lifecycleDef, is(not(nullValue()))); + assertThat(workflowTemplate, is(not(nullValue()))); + + manager.addContentTypeToSection(Event.class, + section, + lifecycleDef, + workflowTemplate); } /** @@ -532,12 +650,13 @@ public class ContentSectionManagerTest { @Test @UsingDataSet("datasets/org/librecms/contentsection/" + "ContentSectionManagerTest/data.xml") - @ShouldMatchDataSet( - value = "datasets/org/librecms/contentsection/" - + "ContentSectionManagerTest/after-add-contenttype.xml") @InSequence(1200) public void verifyHasContentType() { - fail(); + final ContentSection section = repository.findById(-1100L); + + assertThat(manager.hasContentType(Article.class, section), is(true)); + assertThat(manager.hasContentType(News.class, section), is(true)); + assertThat(manager.hasContentType(Event.class, section), is(false)); } /** @@ -551,7 +670,9 @@ public class ContentSectionManagerTest { + "ContentSectionManagerTest/after-remove-contenttype.xml") @InSequence(1300) public void removeContentTypeFromSection() { - fail(); + final ContentSection section = repository.findById(-1100L); + + manager.removeContentTypeFromSection(News.class, section); } /** @@ -568,7 +689,9 @@ public class ContentSectionManagerTest { + "ContentSectionManagerTest/data.xml") @InSequence(1301) public void removeNotExistingContentTypeFromSection() { - fail(); + final ContentSection section = repository.findById(-1100L); + + manager.removeContentTypeFromSection(Event.class, section); } /** @@ -586,7 +709,9 @@ public class ContentSectionManagerTest { @ShouldThrowException(IllegalArgumentException.class) @InSequence(1400) public void removeContentTypeFromSectionTypeInUse() { - fail(); + final ContentSection section = repository.findById(-1100L); + + manager.removeContentTypeFromSection(Article.class, section); } /** @@ -604,7 +729,9 @@ public class ContentSectionManagerTest { @ShouldThrowException(IllegalArgumentException.class) @InSequence(1400) public void removeContentTypeFromSectionTypeIsNull() { - fail(); + final ContentSection section = repository.findById(-1100L); + + manager.removeContentTypeFromSection(null, section); } /** @@ -622,7 +749,7 @@ public class ContentSectionManagerTest { @ShouldThrowException(IllegalArgumentException.class) @InSequence(1400) public void removeContentTypeFromSectionSectionIsNull() { - fail(); + manager.removeContentTypeFromSection(News.class, null); } } diff --git a/ccm-cms/src/test/java/org/librecms/contentsection/DatasetsTest.java b/ccm-cms/src/test/java/org/librecms/contentsection/DatasetsTest.java index 5d55e6251..6725218bc 100644 --- a/ccm-cms/src/test/java/org/librecms/contentsection/DatasetsTest.java +++ b/ccm-cms/src/test/java/org/librecms/contentsection/DatasetsTest.java @@ -44,6 +44,8 @@ public class DatasetsTest extends DatasetsVerifier { public static Collection data() { return Arrays.asList(new String[]{ "/datasets/org/librecms/contentsection/ContentSectionManagerTest/data.xml", + "/datasets/org/librecms/contentsection/ContentSectionManagerTest/after-add-contenttype.xml", + "/datasets/org/librecms/contentsection/ContentSectionManagerTest/after-remove-contenttype.xml", "/datasets/org/librecms/contentsection/ContentSectionManagerTest/after-add-role.xml", "/datasets/org/librecms/contentsection/ContentSectionManagerTest/after-create.xml", "/datasets/org/librecms/contentsection/ContentSectionManagerTest/after-remove-role.xml", @@ -64,15 +66,13 @@ public class DatasetsTest extends DatasetsVerifier { "/datasets/org/librecms/contentsection/ContentTypeRepositoryTest/data.xml", "/datasets/org/librecms/contentsection/ContentTypeRepositoryTest/after-delete.xml", - + "/datasets/org/librecms/contentsection/FolderManagerTest/data.xml", "/datasets/org/librecms/contentsection/FolderManagerTest/after-create-docs-folder.xml", "/datasets/org/librecms/contentsection/FolderManagerTest/after-create-assets-folder.xml", "/datasets/org/librecms/contentsection/FolderManagerTest/after-delete-folder.xml", "/datasets/org/librecms/contentsection/FolderManagerTest/after-move-folder.xml", - "/datasets/org/librecms/contentsection/FolderManagerTest/after-move-folder-same-name.xml", - - }); + "/datasets/org/librecms/contentsection/FolderManagerTest/after-move-folder-same-name.xml",}); } public DatasetsTest(final String datasetPath) { diff --git a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentSectionManagerTest/after-add-contenttype.xml b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentSectionManagerTest/after-add-contenttype.xml new file mode 100644 index 000000000..22fc29574 --- /dev/null +++ b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentSectionManagerTest/after-add-contenttype.xml @@ -0,0 +1,423 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentSectionManagerTest/after-add-role.xml b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentSectionManagerTest/after-add-role.xml index 6dcb35b98..b5772acec 100644 --- a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentSectionManagerTest/after-add-role.xml +++ b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentSectionManagerTest/after-add-role.xml @@ -1,6 +1,9 @@ + + @@ -10,6 +13,20 @@ + + + + + + @@ -46,22 +64,122 @@ - + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -19,7 +22,21 @@ + + + + + + + + + + + + + + @@ -96,6 +122,10 @@ type="DOCUMENTS_FOLDER" /> + + + + + + + + + + + + + + + + @@ -114,7 +176,63 @@ content_section_id="-1200" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentSectionManagerTest/after-remove-role.xml b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentSectionManagerTest/after-remove-role.xml index ce95e3985..c6113512a 100644 --- a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentSectionManagerTest/after-remove-role.xml +++ b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentSectionManagerTest/after-remove-role.xml @@ -36,6 +36,9 @@ --> + + @@ -45,7 +48,21 @@ - + + + + + + + @@ -82,21 +100,120 @@ application_type="org.librecms.contentsection.ContentSection" primary_url="info" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + @@ -46,22 +65,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + content_section_id="-1100" /> + + + + + + + + + + + + + + + + + + + + + + + + @@ -45,6 +48,20 @@ + + + + + + @@ -82,21 +100,121 @@ application_type="org.librecms.contentsection.ContentSection" primary_url="info" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - +