/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.search.query;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.junit.Test;
import com.enonic.cms.core.content.category.CategoryKey;
import com.enonic.cms.core.content.contenttype.ContentTypeKey;
import com.enonic.cms.core.content.index.ContentIndexQuery;
import com.enonic.cms.core.security.group.GroupKey;
public class QueryTranslator_filterSecurityTest
extends QueryTranslatorTestBase
{
@Test
public void testFilterQuery_security_filter_one_group()
throws Exception
{
final String expected_search_result = "{\n" +
" \"from\" : 0,\n" +
" \"size\" : 1000,\n" +
" \"query\" : {\n" +
" \"filtered\" : {\n" +
" \"query\" : {\n" +
" \"match_all\" : { }\n" +
" },\n" +
" \"filter\" : {\n" +
" \"bool\" : {\n" +
" \"must\" : [ {\n" +
" \"terms\" : {\n" +
" \"categorykey\" : [ \"42\" ]\n" +
" }\n" +
" }, {\n" +
" \"terms\" : {\n" +
" \"contenttypekey\" : [ \"1234\", \"1235\" ]\n" +
" }\n" +
" }, {\n" +
" \"terms\" : {\n" +
" \"access_read\" : [ \"group1\" ]\n" +
" }\n" +
" } ]\n" +
" }\n" +
" }\n" +
" }\n" +
" }\n" +
"}";
final Set<CategoryKey> categoryFilter = new HashSet<CategoryKey>();
categoryFilter.add( new CategoryKey( 42 ) );
final Set<ContentTypeKey> contentTypeFilter = new HashSet<ContentTypeKey>();
contentTypeFilter.add( new ContentTypeKey( "1234" ) );
contentTypeFilter.add( new ContentTypeKey( "1235" ) );
ContentIndexQuery query = createContentQuery( categoryFilter, contentTypeFilter );
final Collection<GroupKey> filterGroups = new ArrayList<GroupKey>();
filterGroups.add( new GroupKey( "group1" ) );
query.setSecurityFilter( filterGroups );
SearchSourceBuilder builder = getQueryTranslator().build( query );
compareStringsIgnoreFormatting( expected_search_result, builder.toString() );
}
@Test
public void testFilterQuery_security_filter_two_groups()
throws Exception
{
final String expected_search_result = "{\n" +
" \"from\" : 0,\n" +
" \"size\" : 1000,\n" +
" \"query\" : {\n" +
" \"filtered\" : {\n" +
" \"query\" : {\n" +
" \"match_all\" : { }\n" +
" },\n" +
" \"filter\" : {\n" +
" \"bool\" : {\n" +
" \"must\" : [ {\n" +
" \"terms\" : {\n" +
" \"categorykey\" : [ \"42\" ]\n" +
" }\n" +
" }, {\n" +
" \"terms\" : {\n" +
" \"contenttypekey\" : [ \"1234\", \"1235\" ]\n" +
" }\n" +
" }, {\n" +
" \"terms\" : {\n" +
" \"access_read\" : [ \"group1\", \"group2\" ]\n" +
" }\n" +
" } ]\n" +
" }\n" +
" }\n" +
" }\n" +
" }\n" +
"}";
final Set<CategoryKey> categoryFilter = new HashSet<CategoryKey>();
categoryFilter.add( new CategoryKey( 42 ) );
final Set<ContentTypeKey> contentTypeFilter = new HashSet<ContentTypeKey>();
contentTypeFilter.add( new ContentTypeKey( "1234" ) );
contentTypeFilter.add( new ContentTypeKey( "1235" ) );
ContentIndexQuery query = createContentQuery( categoryFilter, contentTypeFilter );
final Collection<GroupKey> filterGroups = new ArrayList<GroupKey>();
filterGroups.add( new GroupKey( "group1" ) );
filterGroups.add( new GroupKey( "group2" ) );
query.setSecurityFilter( filterGroups );
SearchSourceBuilder builder = getQueryTranslator().build( query );
compareStringsIgnoreFormatting( expected_search_result, builder.toString() );
}
@Test
public void testFilterQuery_security_filter_not_specified()
throws Exception
{
final String expected_search_result = "{\n" +
" \"from\" : 0,\n" +
" \"size\" : 1000,\n" +
" \"query\" : {\n" +
" \"filtered\" : {\n" +
" \"query\" : {\n" +
" \"match_all\" : { }\n" +
" },\n" +
" \"filter\" : {\n" +
" \"bool\" : {\n" +
" \"must\" : [ {\n" +
" \"terms\" : {\n" +
" \"categorykey\" : [ \"42\" ]\n" +
" }\n" +
" }, {\n" +
" \"terms\" : {\n" +
" \"contenttypekey\" : [ \"1234\", \"1235\" ]\n" +
" }\n" +
" } ]\n" +
" }\n" +
" }\n" +
" }\n" +
" }\n" +
"}";
final Set<CategoryKey> categoryFilter = new HashSet<CategoryKey>();
categoryFilter.add( new CategoryKey( 42 ) );
final Set<ContentTypeKey> contentTypeFilter = new HashSet<ContentTypeKey>();
contentTypeFilter.add( new ContentTypeKey( "1234" ) );
contentTypeFilter.add( new ContentTypeKey( "1235" ) );
ContentIndexQuery query = createContentQuery( categoryFilter, contentTypeFilter );
final Collection<GroupKey> filterGroups = new ArrayList<GroupKey>();
query.setSecurityFilter( filterGroups );
SearchSourceBuilder builder = getQueryTranslator().build( query );
compareStringsIgnoreFormatting( expected_search_result, builder.toString() );
}
}