/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.search.builder; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; import org.junit.Test; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.enonic.cms.core.content.ContentKey; import com.enonic.cms.core.content.access.ContentAccessEntity; import com.enonic.cms.core.content.category.CategoryAccessEntity; import com.enonic.cms.core.security.group.GroupEntity; import com.enonic.cms.core.security.group.GroupKey; public class ContentIndexDataAccessRightsBuilderTest extends ContentIndexDataTestBase { private ContentIndexDataAccessRightsFactory accessRightsBuilder = new ContentIndexDataAccessRightsFactory(); @Test public void testContentAccessRightsFilter() { List<ContentAccessEntity> contentAccessRights = Lists.newArrayList(); ContentAccessEntity accessRight1 = createContentAccessEntity( "c", "g1", true, true, true ); ContentAccessEntity accessRight2 = createContentAccessEntity( "c", "g2", true, false, true ); ContentAccessEntity accessRight3 = createContentAccessEntity( "c", "g3", true, true, false ); ContentAccessEntity accessRight4 = createContentAccessEntity( "c", "g4", false, false, false ); contentAccessRights.add( accessRight1 ); contentAccessRights.add( accessRight2 ); contentAccessRights.add( accessRight3 ); contentAccessRights.add( accessRight4 ); final ContentIndexData contentIndexData = new ContentIndexData( new ContentKey( 1 ) ); accessRightsBuilder.create( contentIndexData, contentAccessRights, Collections.<GroupKey, CategoryAccessEntity>emptyMap() ); final Set<ContentIndexDataElement> contentDataElements = contentIndexData.getContentIndexDataElements(); verifyElementExistsAndNumberOfValues( contentDataElements, IndexFieldNameConstants.CONTENT_ACCESS_READ_FIELDNAME, 3 ); verifyElementExistsAndNumberOfValues( contentDataElements, IndexFieldNameConstants.CONTENT_ACCESS_DELETE_FIELDNAME, 2 ); verifyElementExistsAndNumberOfValues( contentDataElements, IndexFieldNameConstants.CONTENT_ACCESS_UPDATE_FIELDNAME, 2 ); } @Test public void testCategoryAccessRightsFilter() throws Exception { final List<ContentAccessEntity> contentAccessRights = Lists.newArrayList(); ContentAccessEntity contentAccessRights1 = createContentAccessEntity( "c", "g1", false, false, false ); ContentAccessEntity contentAccessRights2 = createContentAccessEntity( "c", "g2", false, false, false ); ContentAccessEntity contentAccessRights3 = createContentAccessEntity( "c", "g3", false, false, false ); ContentAccessEntity contentAccessRights4 = createContentAccessEntity( "c", "g4", false, false, false ); contentAccessRights.add( contentAccessRights1 ); contentAccessRights.add( contentAccessRights2 ); contentAccessRights.add( contentAccessRights3 ); contentAccessRights.add( contentAccessRights4 ); final Map<GroupKey, CategoryAccessEntity> categoryAccessRights = Maps.newHashMap(); CategoryAccessEntity catAccessAdmin = createCategoryAccessEntity( "g1", false, false, false, false, true ); CategoryAccessEntity catAccessRead = createCategoryAccessEntity( "g2", true, false, false, false, false ); CategoryAccessEntity catAccessReadBrowsePublish = createCategoryAccessEntity( "g3", true, true, true, false, false ); CategoryAccessEntity catAccessReadCreate = createCategoryAccessEntity( "g4", true, false, false, true, false ); CategoryAccessEntity catAccessNoRights = createCategoryAccessEntity( "g5", false, false, false, false, false ); CategoryAccessEntity catAccessReadPublish = createCategoryAccessEntity( "g6", true, false, true, false, false ); final CategoryAccessEntity[] categoryAccessEntities = {catAccessAdmin, catAccessRead, catAccessReadBrowsePublish, catAccessReadCreate, catAccessNoRights, catAccessReadPublish}; for ( CategoryAccessEntity cae : categoryAccessEntities ) { categoryAccessRights.put( cae.getGroup().getGroupKey(), cae ); } final ContentIndexData contentIndexData = new ContentIndexData( new ContentKey( 1 ) ); accessRightsBuilder.create( contentIndexData, contentAccessRights, categoryAccessRights ); final Set<ContentIndexDataElement> contentDataElements = contentIndexData.getContentIndexDataElements(); verifyElementExistsAndNumberOfValues( contentDataElements, IndexFieldNameConstants.CONTENT_CATEGORY_ACCESS_ADMINISTRATE_FIELDNAME, 1 ); verifyElementExistsAndNumberOfValues( contentDataElements, IndexFieldNameConstants.CONTENT_CATEGORY_ACCESS_APPROVE_FIELDNAME, 3 ); verifyElementExistsAndNumberOfValues( contentDataElements, IndexFieldNameConstants.CONTENT_CATEGORY_ACCESS_BROWSE_FIELDNAME, 2 ); } private ContentAccessEntity createContentAccessEntity( String contentKey, String groupKey, boolean readAccess, boolean updateAccess, boolean deleteAccess ) { final ContentAccessEntity accessRights = new ContentAccessEntity(); accessRights.setKey( contentKey ); accessRights.setDeleteAccess( deleteAccess ); accessRights.setUpdateAccess( updateAccess ); accessRights.setReadAccess( readAccess ); final GroupEntity group = new GroupEntity(); group.setKey( new GroupKey( groupKey ) ); accessRights.setGroup( group ); return accessRights; } private CategoryAccessEntity createCategoryAccessEntity( String groupKey, boolean readAccess, boolean adminBrowseAccess, boolean publishAccess, boolean createAccess, boolean adminAccess ) { final CategoryAccessEntity accessRights = new CategoryAccessEntity(); accessRights.setReadAccess( readAccess ); accessRights.setCreateAccess( createAccess ); accessRights.setAdminAccess( adminAccess ); accessRights.setAdminBrowseAccess( adminBrowseAccess ); accessRights.setPublishAccess( publishAccess ); final GroupEntity group = new GroupEntity(); group.setKey( new GroupKey( groupKey ) ); accessRights.setGroup( group ); return accessRights; } }