diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/ContentItem.java b/ccm-cms/src/main/java/org/librecms/contentsection/ContentItem.java index 50fc45113..af70ef0ca 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/ContentItem.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/ContentItem.java @@ -88,6 +88,26 @@ import static org.librecms.CmsConstants.*; + " OR true = :isSystemUser OR true = :isAdmin" + " )") , + @NamedQuery( + name = "ContentItem.findByUuid", + query + = "SELECT DISTINCT i " + + "FROM ContentItem i " + + "JOIN i.permissions p " + + "WHERE i.uuid = :uuid " + + "AND (" + + " (" + + " p.grantee IN :roles " + + " AND p.grantedPrivilege = " + + " (CASE WHEN i.version = 'DRAFT' " + + " THEN '" + ItemPrivileges.PREVIEW + "' " + + " ELSE '" + ItemPrivileges.VIEW_PUBLISHED + "' " + + " END" + + " )" + + " ) " + + " OR true = :isSystemUser OR true = :isAdmin" + + " )") + , @NamedQuery( name = "ContentItem.findByType", query @@ -108,6 +128,48 @@ import static org.librecms.CmsConstants.*; + " OR true = :isSystemUser OR true = :isAdmin" + " )") , + @NamedQuery( + name = "ContentItem.findByIdAndType", + query + = "SELECT DISTINCT i " + + "FROM ContentItem i " + + "JOIN i.permissions p " + + "WHERE i.objectId = :objectId " + + "AND TYPE(i) = :type " + + "AND (" + + " (" + + " p.grantee IN :roles " + + " AND p.grantedPrivilege = " + + " (CASE WHEN i.version = 'DRAFT' " + + " THEN '" + ItemPrivileges.PREVIEW + "' " + + " ELSE '" + ItemPrivileges.VIEW_PUBLISHED + "' " + + " END" + + " )" + + " ) " + + " OR true = :isSystemUser OR true = :isAdmin" + + " )") + , + @NamedQuery( + name = "ContentItem.findByUuidAndType", + query + = "SELECT DISTINCT i " + + "FROM ContentItem i " + + "JOIN i.permissions p " + + "WHERE i.uuid = :uuid " + + "AND TYPE(i) = :type " + + "AND (" + + " (" + + " p.grantee IN :roles " + + " AND p.grantedPrivilege = " + + " (CASE WHEN i.version = 'DRAFT' " + + " THEN '" + ItemPrivileges.PREVIEW + "' " + + " ELSE '" + ItemPrivileges.VIEW_PUBLISHED + "' " + + " END" + + " )" + + " ) " + + " OR true = :isSystemUser OR true = :isAdmin" + + " )") + , @NamedQuery( name = "ContentItem.findByFolder", query @@ -133,7 +195,7 @@ import static org.librecms.CmsConstants.*; @NamedQuery( name = "ContentItem.countItemsInFolder", query - = "SELECT DISTINCT COUNT(i) " + = "SELECT COUNT(DISTINCT i) " + "FROM ContentItem i " + "JOIN i.categories c " + "JOIN i.permissions p " @@ -177,7 +239,7 @@ import static org.librecms.CmsConstants.*; , @NamedQuery( name = "ContentItem.countByNameInFolder", - query = "SELECT DISTINCT COUNT(i)" + query = "SELECT COUNT(DISTINCT i)" + " FROM ContentItem i " + "JOIN i.categories c " + "JOIN i.permissions p " @@ -205,15 +267,28 @@ import static org.librecms.CmsConstants.*; + "JOIN i.permissions p " + "WHERE c.category = :folder " + "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "' " - + "AND LOWER(i.displayName) LIKE CONCAT(LOWER(:name), '%')") + + "AND LOWER(i.displayName) LIKE CONCAT(LOWER(:name), '%') " + + "AND (" + + " (" + + " p.grantee IN :roles " + + " AND p.grantedPrivilege = " + + " (CASE WHEN i.version = 'DRAFT' " + + " THEN '" + ItemPrivileges.PREVIEW + "' " + + " ELSE '" + ItemPrivileges.VIEW_PUBLISHED + "' " + + " END" + + " )" + + " )" + + " OR true = :isSystemUser OR true = :isAdmin" + + " ) " + + "ORDER BY i.displayName") , @NamedQuery( name = "ContentItem.countFilterByFolderAndName", - query = "SELECT COUNT(i) FROM ContentItem i " + query = "SELECT COUNT(DISTINCT i) FROM ContentItem i " + "JOIN i.categories c " + + "JOIN i.permissions p " + "WHERE c.category = :folder " - + "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER - + "' " + + "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "' " + "AND LOWER(i.displayName) LIKE CONCAT(LOWER(:name), '%') " + "AND (" + " (" diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/ContentItemRepository.java b/ccm-cms/src/main/java/org/librecms/contentsection/ContentItemRepository.java index 4778627e1..61b64e0e4 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/ContentItemRepository.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/ContentItemRepository.java @@ -74,7 +74,7 @@ public class ContentItemRepository @Inject private Shiro shiro; - + @Inject private PermissionChecker permissionChecker; @@ -111,10 +111,16 @@ public class ContentItemRepository * nothing if there is such content item. */ public Optional findById(final long itemId) { - final Optional result = ccmObjectRepo.findObjectById(itemId); - if (result.isPresent() && result.get() instanceof ContentItem) { - return Optional.of((ContentItem) result.get()); - } else { + + final TypedQuery query = getEntityManager() + .createNamedQuery("ContentItem.findById", + ContentItem.class); + query.setParameter("objectId", itemId); + setAuthorizationParameters(query); + + try { + return Optional.of(query.getSingleResult()); + } catch (NoResultException ex) { return Optional.empty(); } } @@ -133,10 +139,21 @@ public class ContentItemRepository @SuppressWarnings("unchecked") public Optional findById(final long itemId, final Class type) { - final Optional result = ccmObjectRepo.findById(itemId); - if (result.get().getClass().isAssignableFrom(type)) { - return Optional.of((T) result.get()); - } else { + + final TypedQuery query = getEntityManager() + .createNamedQuery("ContentItem.findByIdAndType", ContentItem.class); + query.setParameter("objectId", itemId); + query.setParameter("type", type); + setAuthorizationParameters(query); + + try { + final ContentItem result = query.getSingleResult(); + if (result.getClass().isAssignableFrom(type)) { + return Optional.of((T) query.getSingleResult()); + } else { + return Optional.empty(); + } + } catch (NoResultException ex) { return Optional.empty(); } } @@ -150,10 +167,16 @@ public class ContentItemRepository * nothing if there is such content item. */ public Optional findByUuid(final String uuid) { - final Optional result = ccmObjectRepo.findObjectByUuid(uuid); - if (result.isPresent() && result.get() instanceof ContentItem) { - return Optional.of((ContentItem) result.get()); - } else { + + final TypedQuery query = getEntityManager() + .createNamedQuery("ContentItem.findByUuid", + ContentItem.class); + query.setParameter("objectId", uuid); + setAuthorizationParameters(query); + + try { + return Optional.of(query.getSingleResult()); + } catch (NoResultException ex) { return Optional.empty(); } } @@ -173,12 +196,22 @@ public class ContentItemRepository @SuppressWarnings("unchecked") public Optional findByUuid(final String uuid, final Class type) { - final Optional result = ccmObjectRepo.findObjectByUuid(uuid); - if (result.isPresent() - && result.get().getClass().isAssignableFrom(type)) { - return Optional.of((T) result.get()); - } else { + final TypedQuery query = getEntityManager() + .createNamedQuery("ContentItem.findByUuidAndType", + ContentItem.class); + query.setParameter("uuid", uuid); + query.setParameter("type", type); + setAuthorizationParameters(query); + + try { + final ContentItem result = query.getSingleResult(); + if (result.getClass().isAssignableFrom(type)) { + return Optional.of((T) query.getSingleResult()); + } else { + return Optional.empty(); + } + } catch (NoResultException ex) { return Optional.empty(); } } @@ -193,9 +226,11 @@ public class ContentItemRepository */ @SuppressWarnings("unchecked") public List findByType(final Class type) { + final TypedQuery query = getEntityManager() .createNamedQuery("ContentItem.findByType", ContentItem.class); query.setParameter("type", type); + setAuthorizationParameters(query); return (List) query.getResultList(); } @@ -208,10 +243,12 @@ public class ContentItemRepository * @return A list of all items in the provided folder. */ public List findByFolder(final Category folder) { + final TypedQuery query = getEntityManager() .createNamedQuery("ContentItem.findByFolder", ContentItem.class); query.setParameter("folder", folder); + setAuthorizationParameters(query); return query.getResultList(); } @@ -224,9 +261,11 @@ public class ContentItemRepository * @return The number of content items in the category/folder. */ public long countItemsInFolder(final Category folder) { + final TypedQuery query = getEntityManager() .createNamedQuery("ContentItem.countItemsInFolder", Long.class); query.setParameter("folder", folder); + setAuthorizationParameters(query); return query.getSingleResult(); } @@ -235,31 +274,13 @@ public class ContentItemRepository public Optional findByNameInFolder(final Category folder, final String name) { - final Optional user = shiro.getUser(); - final List roles; - if (user.isPresent()) { - roles = user - .get() - .getRoleMemberships() - .stream() - .map(membership -> membership.getRole()) - .collect(Collectors.toList()); - } else { - roles = Collections.emptyList(); - } - - final boolean isSystemUser = shiro.isSystemUser(); - final boolean isAdmin = permissionChecker.isPermitted("*"); - final TypedQuery query = getEntityManager() .createNamedQuery("ContentItem.findByNameInFolder", ContentItem.class); query.setParameter("folder", folder); query.setParameter("name", name); - query.setParameter("roles", roles); - query.setParameter("isSystemUser", isSystemUser); - query.setParameter("isAdmin", isAdmin); - + setAuthorizationParameters(query); + try { return Optional.of(query.getSingleResult()); } catch (NoResultException ex) { @@ -276,10 +297,12 @@ public class ContentItemRepository * @return */ public long countByNameInFolder(final Category folder, final String name) { + final TypedQuery query = getEntityManager().createNamedQuery( "ContentItem.countByNameInFolder", Long.class); query.setParameter("folder", folder); query.setParameter("name", name); + setAuthorizationParameters(query); return query.getSingleResult(); } @@ -296,11 +319,13 @@ public class ContentItemRepository */ public List filterByFolderAndName(final Category folder, final String name) { + final TypedQuery query = getEntityManager() .createNamedQuery("ContentItem.filterByFolderAndName", ContentItem.class); query.setParameter("folder", folder); query.setParameter("name", name); + setAuthorizationParameters(query); return query.getResultList(); } @@ -322,15 +347,18 @@ public class ContentItemRepository Long.class); query.setParameter("folder", folder); query.setParameter("name", name); + setAuthorizationParameters(query); return query.getSingleResult(); } public Optional findItemWithWorkflow(final Workflow workflow) { + final TypedQuery query = getEntityManager() .createNamedQuery("ContentItem.findItemWithWorkflow", ContentItem.class); query.setParameter("workflow", workflow); + setAuthorizationParameters(query); try { return Optional.of(query.getSingleResult()); @@ -351,6 +379,7 @@ public class ContentItemRepository * item. */ public Optional findByPath(final String path) { + //The last token is the name of the item itself. Remove this part an get //the folder containing the item using the FolderRepository. final String normalizedPath = PathUtil.normalizePath(path); @@ -381,6 +410,7 @@ public class ContentItemRepository */ public Optional findByPath(final ContentSection section, final String path) { + //The last token is the name of the item itself. Remove this part an get //the folder containing the item using the FolderRepository. final String normalizedPath = PathUtil.normalizePath(path); @@ -449,4 +479,35 @@ public class ContentItemRepository } } + /** + * A helper method for setting the parameters for the common query + * parameters used to determine if a user has access to an item. + * + * @param query The query on which the parameters are set. No type type + * boundary here to allow usage with all results type used in + * this class ({@link ContentItem} and sub classes ,Long) + */ + private void setAuthorizationParameters(final TypedQuery query) { + + final Optional user = shiro.getUser(); + final List roles; + if (user.isPresent()) { + roles = user + .get() + .getRoleMemberships() + .stream() + .map(membership -> membership.getRole()) + .collect(Collectors.toList()); + } else { + roles = Collections.emptyList(); + } + + final boolean isSystemUser = shiro.isSystemUser(); + final boolean isAdmin = permissionChecker.isPermitted("*"); + + query.setParameter("roles", roles); + query.setParameter("isSystemUser", isSystemUser); + query.setParameter("isAdmin", isAdmin); + } + } diff --git a/ccm-cms/src/test/java/org/librecms/contentsection/ContentItemRepositoryTest.java b/ccm-cms/src/test/java/org/librecms/contentsection/ContentItemRepositoryTest.java index ddcb2089d..383b6b890 100644 --- a/ccm-cms/src/test/java/org/librecms/contentsection/ContentItemRepositoryTest.java +++ b/ccm-cms/src/test/java/org/librecms/contentsection/ContentItemRepositoryTest.java @@ -21,7 +21,9 @@ package org.librecms.contentsection; import java.util.List; import java.util.Locale; import java.util.Optional; + import javax.inject.Inject; + import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.junit.InSequence; @@ -50,8 +52,14 @@ import org.librecms.contenttypes.News; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; + import static org.libreccm.testutils.DependenciesHelpers.*; +import org.apache.shiro.subject.Subject; +import org.libreccm.security.Shiro; + +import java.util.concurrent.Callable; + /** * * @author Jens Pelzetter @@ -71,6 +79,9 @@ public class ContentItemRepositoryTest { @Inject private CategoryRepository categoryRepo; + @Inject + private Shiro shiro; + public ContentItemRepositoryTest() { } @@ -92,6 +103,7 @@ public class ContentItemRepositoryTest { @Deployment public static WebArchive createDeployment() { + return ShrinkWrap .create(WebArchive.class, "LibreCCM-org.librecms.contentsection.ContentItemRepositoryTest.war") @@ -154,6 +166,7 @@ public class ContentItemRepositoryTest { @Test @InSequence(10) public void isRepositoryInjected() { + assertThat(itemRepo, is(not(nullValue()))); assertThat(categoryRepo, is(not(nullValue()))); } @@ -163,19 +176,26 @@ public class ContentItemRepositoryTest { @UsingDataSet("datasets/org/librecms/contentsection/" + "ContentItemRepositoryTest/data.xml") public void findByIdAndType() { - final Optional
article1 = itemRepo.findById( - -10100L, Article.class); - final Optional
article2 = itemRepo.findById( - -10200L, Article.class); - final Optional
article3 = itemRepo.findById( - -10300L, Article.class); - final Optional news1 = itemRepo.findById( - -10400L, News.class); - final Optional
newsAsArticle = itemRepo.findById( - -10400, Article.class); - final Optional articleAsNews = itemRepo.findById( - -10200L, News.class); + final Optional
article1 = shiro + .getSystemUser() + .execute(() -> itemRepo.findById(-10100L, Article.class)); + final Optional
article2 = shiro + .getSystemUser() + .execute(() -> itemRepo.findById(-10200L, Article.class)); + final Optional
article3 = shiro + .getSystemUser() + .execute(() -> itemRepo.findById(-10300L, Article.class)); + final Optional news1 = shiro + .getSystemUser() + .execute(() -> itemRepo.findById(-10400L, News.class)); + + final Optional
newsAsArticle = shiro + .getSystemUser() + .execute(() -> itemRepo.findById(-10400, Article.class)); + final Optional articleAsNews = shiro + .getSystemUser() + .execute(() -> itemRepo.findById(-10200L, News.class)); assertThat(article1.isPresent(), is(true)); assertThat(article1.get().getDisplayName(), is(equalTo("article1"))); @@ -195,19 +215,46 @@ public class ContentItemRepositoryTest { @UsingDataSet("datasets/org/librecms/contentsection/" + "ContentItemRepositoryTest/data.xml") public void findByUuidAndType() { - final Optional
article1 = itemRepo.findByUuid( - "aed4b402-1180-46c6-b42d-7245f4dca248", Article.class); - final Optional
article2 = itemRepo.findByUuid( - "acae860f-2ffa-450d-b486-054292f0dae6", Article.class); - final Optional
article3 = itemRepo.findByUuid( - "f4b38abb-234b-4354-bc92-e36c068a1ebd", Article.class); - final Optional news1 = itemRepo.findByUuid( - "d9ea527d-c6e3-4bdd-962d-c0a1a80c6c72", News.class); - final Optional
newsAsArticle = itemRepo.findByUuid( - "d9ea527d-c6e3-4bdd-962d-c0a1a80c6c72", Article.class); - final Optional articleAsNews = itemRepo.findByUuid( - "acae860f-2ffa-450d-b486-054292f0dae6", News.class); + final Subject systemUser = shiro.getSystemUser(); + + final Optional
article1 = systemUser + .execute(() -> { + return itemRepo + .findByUuid("aed4b402-1180-46c6-b42d-7245f4dca248", + Article.class); + }); + final Optional
article2 = systemUser + .execute(() -> { + return itemRepo + .findByUuid("acae860f-2ffa-450d-b486-054292f0dae6", + Article.class); + }); + final Optional
article3 = systemUser + .execute(() -> { + return itemRepo + .findByUuid("f4b38abb-234b-4354-bc92-e36c068a1ebd", + Article.class); + }); + final Optional news1 = systemUser + .execute(() -> { + return itemRepo + .findByUuid("d9ea527d-c6e3-4bdd-962d-c0a1a80c6c72", + News.class); + }); + + final Optional
newsAsArticle = systemUser + .execute(() -> { + return itemRepo + .findByUuid("d9ea527d-c6e3-4bdd-962d-c0a1a80c6c72", + Article.class); + }); + final Optional articleAsNews = systemUser + .execute(() -> { + return itemRepo + .findByUuid("acae860f-2ffa-450d-b486-054292f0dae6", + News.class); + }); assertThat(article1.isPresent(), is(true)); assertThat(article1.get().getDisplayName(), is(equalTo("article1"))); @@ -227,11 +274,16 @@ public class ContentItemRepositoryTest { @UsingDataSet("datasets/org/librecms/contentsection/" + "ContentItemRepositoryTest/data.xml") public void findByType() { - final List
articles = itemRepo.findByType(Article.class); + + final List
articles = shiro + .getSystemUser() + .execute(() -> itemRepo.findByType(Article.class)); assertThat(articles, is(not(nullValue()))); assertThat(articles.size(), is(3)); - final List news = itemRepo.findByType(News.class); + final List news = shiro + .getSystemUser() + .execute(() -> itemRepo.findByType(News.class)); assertThat(news, is(not(nullValue()))); assertThat(news.size(), is(1)); } @@ -245,7 +297,9 @@ public class ContentItemRepositoryTest { assertThat(folder.getObjects().size(), is(4)); - final List items = itemRepo.findByFolder(folder); + final List items = shiro + .getSystemUser() + .execute(() -> itemRepo.findByFolder(folder)); assertThat(items, is(not(nullValue()))); assertThat(items.size(), is(4)); @@ -256,9 +310,14 @@ public class ContentItemRepositoryTest { @UsingDataSet("datasets/org/librecms/contentsection/" + "ContentItemRepositoryTest/data.xml") public void countItemsInFolder() { + final Category folder = categoryRepo.findById(-2100L).get(); - assertThat(itemRepo.countItemsInFolder(folder), is(4L)); + assertThat( + shiro.getSystemUser().execute(() -> { + return itemRepo.countItemsInFolder(folder); + }), + is(4L)); } @Test @@ -266,14 +325,35 @@ public class ContentItemRepositoryTest { @UsingDataSet("datasets/org/librecms/contentsection/" + "ContentItemRepositoryTest/data.xml") public void countByNameInFolder() { + final Category folder = categoryRepo.findById(-2100L).get(); - assertThat(itemRepo.countByNameInFolder(folder, "article1"), is(1L)); - assertThat(itemRepo.countByNameInFolder(folder, "article2"), is(1L)); - assertThat(itemRepo.countByNameInFolder(folder, "article3"), is(1L)); - assertThat(itemRepo.countByNameInFolder(folder, "article4"), is(0L)); - assertThat(itemRepo.countByNameInFolder(folder, "article"), is(0L)); - assertThat(itemRepo.countByNameInFolder(folder, "news1"), is(1L)); + final Subject systemUser = shiro.getSystemUser(); + + assertThat( + systemUser.execute(() -> itemRepo.countByNameInFolder(folder, + "article1")), + is(1L)); + assertThat( + systemUser.execute(() -> itemRepo.countByNameInFolder(folder, + "article2")), + is(1L)); + assertThat( + systemUser.execute(() -> itemRepo.countByNameInFolder(folder, + "article3")), + is(1L)); + assertThat( + systemUser.execute(() -> itemRepo.countByNameInFolder(folder, + "article4")), + is(0L)); + assertThat( + systemUser.execute(() -> itemRepo.countByNameInFolder(folder, + "article")), + is(0L)); + assertThat( + systemUser.execute(() -> itemRepo.countByNameInFolder(folder, + "news1")), + is(1L)); } @Test @@ -283,10 +363,12 @@ public class ContentItemRepositoryTest { public void filterByFolderAndName() { final Category folder = categoryRepo.findById(-2100L).get(); - final List articles = itemRepo.filterByFolderAndName( - folder, "article"); - final List news = itemRepo.filterByFolderAndName(folder, - "news"); + final List articles = shiro + .getSystemUser() + .execute(() -> itemRepo.filterByFolderAndName(folder, "article")); + final List news = shiro + .getSystemUser() + .execute(() -> itemRepo.filterByFolderAndName(folder, "news")); assertThat(articles.size(), is(3)); assertThat(news.size(), is(1)); @@ -305,24 +387,42 @@ public class ContentItemRepositoryTest { public void countFilterByFolderAndName() { final Category folder = categoryRepo.findById(-2100L).get(); - assertThat(itemRepo.countFilterByFolderAndName(folder, "article"), - is(3L)); - assertThat(itemRepo.countFilterByFolderAndName(folder, "art"), - is(3L)); - assertThat(itemRepo.countFilterByFolderAndName(folder, "article1"), - is(1L)); - assertThat(itemRepo.countFilterByFolderAndName(folder, "article2"), - is(1L)); - assertThat(itemRepo.countFilterByFolderAndName(folder, "article3"), - is(1L)); + final Subject systemUser = shiro.getSystemUser(); - assertThat(itemRepo.countFilterByFolderAndName(folder, "news"), - is(1L)); + assertThat( + systemUser.execute(() -> itemRepo.countFilterByFolderAndName(folder, + "article")), + is(3L)); + assertThat( + systemUser.execute(() -> itemRepo.countFilterByFolderAndName(folder, + "art")), + is(3L)); + assertThat( + systemUser.execute(() -> itemRepo.countFilterByFolderAndName(folder, + "article1")), + is(1L)); + assertThat( + systemUser.execute(() -> itemRepo.countFilterByFolderAndName(folder, + "article2")), + is(1L)); + assertThat( + systemUser.execute(() -> itemRepo.countFilterByFolderAndName(folder, + "article3")), + is(1L)); - assertThat(itemRepo.countFilterByFolderAndName(folder, "article10"), - is(0L)); - assertThat(itemRepo.countFilterByFolderAndName(folder, "foo"), - is(0L)); + assertThat( + systemUser.execute(() -> itemRepo.countFilterByFolderAndName(folder, + "news")), + is(1L)); + + assertThat( + systemUser.execute(() -> itemRepo.countFilterByFolderAndName(folder, + "article10")), + is(0L)); + assertThat( + systemUser.execute(() -> itemRepo.countFilterByFolderAndName(folder, + "foo")), + is(0L)); } @Test @@ -336,7 +436,10 @@ public class ContentItemRepositoryTest { "item_uuid", "timestamp"}) public void saveChangedItem() { - final Optional item = itemRepo.findById(-10100L); + + final Optional item = shiro + .getSystemUser() + .execute(() -> itemRepo.findById(-10100L)); assertThat(item.isPresent(), is(true)); diff --git a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemRepositoryTest/after-save.xml b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemRepositoryTest/after-save.xml index 625e40cb5..aaca52867 100644 --- a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemRepositoryTest/after-save.xml +++ b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemRepositoryTest/after-save.xml @@ -364,61 +364,301 @@ object_id="-2100" grantee_id="-3200" creation_date="2016-07-15"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemRepositoryTest/data.xml b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemRepositoryTest/data.xml index b48beae23..0eff27877 100644 --- a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemRepositoryTest/data.xml +++ b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemRepositoryTest/data.xml @@ -278,7 +278,7 @@ @@ -328,61 +328,301 @@ object_id="-2100" grantee_id="-3200" creation_date="2016-07-15"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -