Package org.drools.guvnor.server

Source Code of org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest

/*
* Copyright 2011 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.guvnor.server;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.inject.Inject;

import org.drools.core.util.DateUtils;
import org.drools.guvnor.client.common.AssetFormats;
import org.drools.guvnor.client.rpc.AssetPageRequest;
import org.drools.guvnor.client.rpc.AssetPageRow;
import org.drools.guvnor.client.rpc.MetaDataQuery;
import org.drools.guvnor.client.rpc.PageResponse;
import org.drools.guvnor.client.rpc.QueryMetadataPageRequest;
import org.drools.guvnor.client.rpc.QueryPageRequest;
import org.drools.guvnor.client.rpc.QueryPageRow;
import org.drools.guvnor.server.security.RoleBasedPermission;
import org.drools.guvnor.server.security.RoleBasedPermissionManager;
import org.drools.guvnor.server.security.RoleBasedPermissionResolver;
import org.drools.guvnor.server.security.RoleBasedPermissionStore;
import org.drools.guvnor.server.security.RoleType;
import org.drools.guvnor.server.test.GuvnorIntegrationTest;
import org.drools.repository.AssetItem;
import org.drools.repository.CategoryItem;
import org.drools.repository.ModuleItem;
import org.drools.type.DateFormatsImpl;
import org.junit.Test;

public class RepositoryQueryAndFindIntegrationTest extends GuvnorIntegrationTest {

    @Inject
    private RoleBasedPermissionStore    roleBasedPermissionStore;

    @Inject
    private RoleBasedPermissionManager  roleBasedPermissionManager;

    @Inject
    private RoleBasedPermissionResolver roleBasedPermissionResolver;

    @Test
    public void testQueryFullTextPagedResults() throws Exception {

        final int PAGE_SIZE = 2;

        String categoryName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextPagedResultsCategory";
        String categoryDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextPagedResultsCategoryDescription";
        repositoryCategoryService.createCategory( "/",
                                                  categoryName,
                                                  categoryDescription );

        String packageName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextPagedResultsPackage";
        String packageDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextPagedResultsPackageDescription";
        repositoryPackageService.createModule( packageName,
                                                packageDescription,
                                                "package" );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextPagedResults.testTextRule1",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextPagedResults.testTextRule1Description",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextPagedResults.testTextRule2",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextPagedResults.testTextRule2Description",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextPagedResults.testTextRule3",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextPagedResults.testTextRule3Description",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        QueryPageRequest request = new QueryPageRequest( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextPagedResults.testTextRule*",
                                                         false,
                                                         0,
                                                         PAGE_SIZE );
        PageResponse<QueryPageRow> response;
        response = serviceImplementation.queryFullText( request );

        assertNotNull( response );
        assertNotNull( response.getPageRowList() );
        assertEquals( 0,
                      response.getStartRowIndex() );
        assertEquals( PAGE_SIZE,
                      response.getPageRowList().size() );
        assertFalse( response.isLastPage() );

        request.setStartRowIndex( PAGE_SIZE );
        response = serviceImplementation.queryFullText( request );

        assertNotNull( response );
        assertNotNull( response.getPageRowList() );
        assertEquals( PAGE_SIZE,
                      response.getStartRowIndex() );
        assertEquals( 1,
                      response.getPageRowList().size() );
        assertTrue( response.isLastPage() );
    }

    @Test
    public void testQueryFullTextFullResults() throws Exception {

        String categoryName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsCategory";
        String categoryDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsCategoryDescription";
        repositoryCategoryService.createCategory( "/",
                                                  categoryName,
                                                  categoryDescription );

        String packageName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsPackage";
        String packageDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsPackageDescription";
        repositoryPackageService.createModule( packageName,
                                                packageDescription,
                                                "package" );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResults.testTextRule1",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResults.testTextRule1Description",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResults.testTextRule2",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResults.testTextRule2Description",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResults.testTextRule3",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResults.testTextRule3Description",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        QueryPageRequest request = new QueryPageRequest( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResults.testTextRule*",
                                                         false,
                                                         0,
                                                         null );
        PageResponse<QueryPageRow> response;
        response = serviceImplementation.queryFullText( request );

        assertNotNull( response );
        assertNotNull( response.getPageRowList() );
        assertEquals( 0,
                      response.getStartRowIndex() );
        assertEquals( 3,
                      response.getPageRowList().size() );
        assertTrue( response.isLastPage() );
    }

    @Test
    public void testQueryFullTextFullResultsWithAnalystPermission() throws Exception {
        CategoryItem rootCategory = rulesRepository.loadCategory( "/" );
        String categoryName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermissionCategory";
        String categoryDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermissionCategoryDescription";
        CategoryItem cat = rootCategory.addCategory( categoryName,
                                                     categoryDescription );

        String subCategory1Name = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermissionCat1";
        cat.addCategory( subCategory1Name,
                         "yeah" );
        String subCategory2Name = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermissionCat2";
        cat.addCategory( subCategory2Name,
                         "yeah" );

        logoutAs( ADMIN_USERNAME );
        final String USERNAME = "queryAndFindUser";
        loginAs( USERNAME );

        roleBasedPermissionResolver.setEnableRoleBasedAuthorization( true );
        roleBasedPermissionStore.addRoleBasedPermissionForTesting( USERNAME,
                                                                   new RoleBasedPermission( USERNAME,
                                                                                            RoleType.ANALYST.getName(),
                                                                                            null,
                                                                                            categoryName + "/" + subCategory1Name ) );
        roleBasedPermissionManager.create(); // HACK flushes the permission cache

        try {

            final int PAGE_SIZE = 2;

            String packageName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermissionPackage";
            String packageDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermissionPackageDescription";
            ModuleItem pkg = rulesRepository.createModule( packageName,
                                                             packageDescription );

            AssetItem asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermission.asset1",
                                            "",
                                            categoryName + "/" + subCategory1Name,
                                            null );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermission.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermission.numberwang" );
            asset.checkin( "" );

            asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermission.asset2",
                                  "",
                                  categoryName + "/" + subCategory1Name,
                                  null );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermission.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermission.numberwang" );
            asset.checkin( "" );

            asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermission.asset3",
                                  "",
                                  categoryName + "/" + subCategory2Name,
                                  null );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermission.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermission.numberwang" );
            asset.checkin( "" );

            asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermission.asset4",
                                  "",
                                  categoryName + "/" + subCategory2Name,
                                  null );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermission.asset4" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermission.numberwang" );
            asset.checkin( "" );

            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermission.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermission.numberwang" );
            asset.checkin( "" );

            asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermission.asset5",
                                  "",
                                  categoryName + "/" + subCategory1Name,
                                  null );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermission.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermission.numberwang" );
            asset.checkin( "" );

            QueryPageRequest request = new QueryPageRequest( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextFullResultsWithAnalystPermission.asset*",
                                                             false,
                                                             0,
                                                             PAGE_SIZE );

            PageResponse<QueryPageRow> response = serviceImplementation.queryFullText( request );

            assertNotNull( response );
            assertNotNull( response.getPageRowList() );
            assertEquals( 0,
                          response.getStartRowIndex() );
            assertEquals( PAGE_SIZE,
                          response.getPageRowList().size() );
            assertEquals( false,
                          response.isTotalRowSizeExact() );
            assertFalse( response.isLastPage() );

            request.setStartRowIndex( PAGE_SIZE );
            response = repositoryAssetService.quickFindAsset( request );

            assertNotNull( response );
            assertNotNull( response.getPageRowList() );
            assertEquals( PAGE_SIZE,
                          response.getStartRowIndex() );
            assertEquals( 1,
                          response.getPageRowList().size() );
            assertEquals( true,
                          response.isTotalRowSizeExact() );
            assertEquals( 3,
                          response.getTotalRowSize() );
            assertTrue( response.isLastPage() );
        } finally {
            roleBasedPermissionResolver.setEnableRoleBasedAuthorization( false );
            roleBasedPermissionStore.clearAllRoleBasedPermissionsForTesting( USERNAME );
            try {
                logoutAs( USERNAME );
                loginAs( ADMIN_USERNAME );
            } catch ( IllegalStateException ise ) {
                //TODO logoutAs(USERNAME) throws an exception causing the test to fail
                System.err.println( ise.getMessage() );
            }
        }
    }

    @Test
    public void testQuickFindAssetPagedResults() throws Exception {

        final int PAGE_SIZE = 2;

        String categoryName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetPagedResultsCategory";
        String categoryDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetPagedResultsCategoryDescription";
        repositoryCategoryService.createCategory( "/",
                                                  categoryName,
                                                  categoryDescription );

        String packageName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetPagedResultsPackage";
        String packageDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetPagedResultsPackageDescription";
        repositoryPackageService.createModule( packageName,
                                                packageDescription,
                                                "package" );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetPagedResults.testTextRule1",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetPagedResults.testTextRule1Description",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetPagedResults.testTextRule2",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetPagedResults.testTextRule2Description",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetPagedResults.testTextRule3",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetPagedResults.testTextRule3Description",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        QueryPageRequest request = new QueryPageRequest( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetPagedResults.testTextRule*",
                                                         false,
                                                         0,
                                                         PAGE_SIZE );
        PageResponse<QueryPageRow> response;

        response = repositoryAssetService.quickFindAsset( request );

        assertNotNull( response );
        assertNotNull( response.getPageRowList() );
        assertEquals( 0,
                      response.getStartRowIndex() );
        assertEquals( PAGE_SIZE,
                      response.getPageRowList().size() );
        assertFalse( response.isLastPage() );

        request.setStartRowIndex( PAGE_SIZE );
        response = serviceImplementation.queryFullText( request );

        assertNotNull( response );
        assertNotNull( response.getPageRowList() );
        assertEquals( PAGE_SIZE,
                      response.getStartRowIndex() );
        assertEquals( 1,
                      response.getPageRowList().size() );
        assertTrue( response.isLastPage() );
    }

    @Test
    public void testQuickFindAssetFullResults() throws Exception {

        String categoryName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetFullResultsCategory";
        String categoryDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetFullResultsCategoryDescription";
        repositoryCategoryService.createCategory( "/",
                                                  categoryName,
                                                  categoryDescription );

        String packageName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetFullResultsPackage";
        String packageDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetFullResultsPackageDescription";
        repositoryPackageService.createModule( packageName,
                                                packageDescription,
                                                "package" );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetFullResults.testTextRule1",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetFullResults.testTextRule1Description",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetFullResults.testTextRule2",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetFullResults.testTextRule2Description",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetFullResults.testTextRule3",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetFullResults.testTextRule3Description",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        QueryPageRequest request = new QueryPageRequest( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetFullResults.testTextRule*",
                                                         false,
                                                         0,
                                                         null );
        PageResponse<QueryPageRow> response;

        response = repositoryAssetService.quickFindAsset( request );

        assertNotNull( response );
        assertNotNull( response.getPageRowList() );
        assertEquals( 0,
                      response.getStartRowIndex() );
        assertEquals( 3,
                      response.getPageRowList().size() );
        assertTrue( response.isLastPage() );
    }

    @Test
    public void testQuickFindAssetWithAnalystPermission() throws Exception {

        CategoryItem rootCategory = rulesRepository.loadCategory( "/" );
        String categoryName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermissionCategory";
        String categoryDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermissionCategoryDescription";
        CategoryItem cat = rootCategory.addCategory( categoryName,
                                                     categoryDescription );

        String subCategory1Name = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermissionCat1";
        cat.addCategory( subCategory1Name,
                         "yeah" );
        String subCategory2Name = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermissionCat2";
        cat.addCategory( subCategory2Name,
                         "yeah" );

        logoutAs( ADMIN_USERNAME );
        final String USERNAME = "queryAndFindUser";
        loginAs( USERNAME );

        roleBasedPermissionResolver.setEnableRoleBasedAuthorization( true );
        roleBasedPermissionStore.addRoleBasedPermissionForTesting( USERNAME,
                                                                   new RoleBasedPermission( USERNAME,
                                                                                            RoleType.ANALYST.getName(),
                                                                                            null,
                                                                                            categoryName + "/" + subCategory1Name ) );
        roleBasedPermissionManager.create(); // HACK flushes the permission cache

        try {
            final int PAGE_SIZE = 2;

            String packageName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermissionPackage";
            String packageDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermissionPackageDescription";
            ModuleItem pkg = rulesRepository.createModule( packageName,
                                                             packageDescription );

            AssetItem asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermission.asset1",
                                            "",
                                            categoryName + "/" + subCategory1Name,
                                            null );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermission.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermission.numberwang" );
            asset.checkin( "" );

            asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermission.asset2",
                                  "",
                                  categoryName + "/" + subCategory2Name,
                                  null );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermission.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermission.numberwang" );
            asset.checkin( "" );

            asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermission.asset3",
                                  "",
                                  categoryName + "/" + subCategory2Name,
                                  null );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermission.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermission.numberwang" );
            asset.checkin( "" );

            asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermission.asset4",
                                  "",
                                  categoryName + "/" + subCategory1Name,
                                  null );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermission.asset4" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermission.numberwang" );
            asset.checkin( "" );

            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermission.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermission.numberwang" );
            asset.checkin( "" );

            asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermission.asset5",
                                  "",
                                  categoryName + "/" + subCategory1Name,
                                  null );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermission.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermission.numberwang" );
            asset.checkin( "" );

            QueryPageRequest request = new QueryPageRequest( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetWithAnalystPermission.asset*",
                                                             false,
                                                             0,
                                                             PAGE_SIZE );

            PageResponse<QueryPageRow> response = repositoryAssetService.quickFindAsset( request );

            assertNotNull( response );
            assertNotNull( response.getPageRowList() );
            assertEquals( 0,
                          response.getStartRowIndex() );
            assertEquals( PAGE_SIZE,
                          response.getPageRowList().size() );
            assertEquals( false,
                          response.isTotalRowSizeExact() );
            assertFalse( response.isLastPage() );

            request.setStartRowIndex( PAGE_SIZE );
            response = repositoryAssetService.quickFindAsset( request );

            assertNotNull( response );
            assertNotNull( response.getPageRowList() );
            assertEquals( PAGE_SIZE,
                          response.getStartRowIndex() );
            assertEquals( 1,
                          response.getPageRowList().size() );
            assertEquals( true,
                          response.isTotalRowSizeExact() );
            assertEquals( 3,
                          response.getTotalRowSize() );
            assertTrue( response.isLastPage() );
        } finally {
            roleBasedPermissionResolver.setEnableRoleBasedAuthorization( false );
            roleBasedPermissionStore.clearAllRoleBasedPermissionsForTesting( USERNAME );
            try {
                logoutAs( USERNAME );
                loginAs( ADMIN_USERNAME );
            } catch ( IllegalStateException ise ) {
                //TODO logoutAs(USERNAME) throws an exception causing the test to fail
                System.err.println( ise.getMessage() );
            }
        }
    }

    @Test
    public void testQueryMetaDataPagedResults() throws Exception {

        final int PAGE_SIZE = 2;

        String packageName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsPackage";
        String packageDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsPackageDescription";
        ModuleItem pkg = rulesRepository.createModule( packageName,
                                                         packageDescription );

        AssetItem[] assets = new AssetItem[3];
        for ( int i = 0; i < assets.length; i++ ) {
            AssetItem asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResults.testMetaDataSearchAsset" + i,
                                            "" );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResults.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResults.numberwang" + i );
            asset.checkin( "" );
        }

        MetaDataQuery[] qr = new MetaDataQuery[2];
        qr[0] = new MetaDataQuery();
        qr[0].attribute = AssetItem.SUBJECT_PROPERTY_NAME;
        qr[0].valueList = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResults.wang, org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResults.testMetaDataSearch";
        qr[1] = new MetaDataQuery();
        qr[1].attribute = AssetItem.SOURCE_PROPERTY_NAME;
        qr[1].valueList = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResults.numberwan*";

        List<MetaDataQuery> metadata = Arrays.asList( qr );
        QueryMetadataPageRequest request = new QueryMetadataPageRequest( metadata,
                                                                         DateUtils.parseDate( "10-Jul-1974",
                                                                                              new DateFormatsImpl() ),
                                                                         null,
                                                                         null,
                                                                         null,
                                                                         false,
                                                                         0,
                                                                         PAGE_SIZE );

        PageResponse<QueryPageRow> response;
        response = serviceImplementation.queryMetaData( request );

        assertNotNull( response );
        assertNotNull( response.getPageRowList() );
        assertEquals( 0,
                      response.getStartRowIndex() );
        assertEquals( PAGE_SIZE,
                      response.getPageRowList().size() );
        assertFalse( response.isLastPage() );

        request.setStartRowIndex( PAGE_SIZE );
        response = serviceImplementation.queryMetaData( request );

        assertNotNull( response );
        assertNotNull( response.getPageRowList() );
        assertEquals( PAGE_SIZE,
                      response.getStartRowIndex() );
        assertEquals( 1,
                      response.getPageRowList().size() );
        assertTrue( response.isLastPage() );
    }

    @Test
    public void testQueryMetaDataPagedResultsWithAnalystPermission() throws Exception {

        CategoryItem rootCategory = rulesRepository.loadCategory( "/" );
        String categoryName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionCategory";
        String categoryDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionCategoryDescription";
        CategoryItem cat = rootCategory.addCategory( categoryName,
                                                     categoryDescription );

        String subCategory1Name = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionCat1";
        cat.addCategory( subCategory1Name,
                         "yeah" );
        String subCategory2Name = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionCat2";
        cat.addCategory( subCategory2Name,
                         "yeah" );

        logoutAs( ADMIN_USERNAME );
        final String USERNAME = "queryAndFindUser";
        loginAs( USERNAME );

        roleBasedPermissionResolver.setEnableRoleBasedAuthorization( true );
        roleBasedPermissionStore.addRoleBasedPermissionForTesting( USERNAME,
                                                                   new RoleBasedPermission( USERNAME,
                                                                                            RoleType.ANALYST.getName(),
                                                                                            null,
                                                                                            categoryName + "/" + subCategory1Name ) );
        roleBasedPermissionManager.create(); // HACK flushes the permission cache

        try {
            final int PAGE_SIZE = 2;

            String packageName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionPackage";
            String packageDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionPackageDescription";
            ModuleItem pkg = rulesRepository.createModule( packageName,
                                                             packageDescription );

            AssetItem asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermission.testMetaDataSearchAsset1",
                                            "",
                                            categoryName + "/" + subCategory1Name,
                                            null );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermission.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermission.numberwang" );
            asset.checkin( "" );

            asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermission.testMetaDataSearchAsset2",
                                  "",
                                  categoryName + "/" + subCategory2Name,
                                  null );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermission.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermission.numberwang" );
            asset.checkin( "" );

            asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermission.testMetaDataSearchAsset3",
                                  "",
                                  categoryName + "/" + subCategory1Name,
                                  null );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermission.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermission.numberwang" );
            asset.checkin( "" );

            asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermission.testMetaDataSearchAsset4",
                                  "",
                                  categoryName + "/" + subCategory2Name,
                                  null );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermission.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermission.numberwang" );
            asset.checkin( "" );

            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermission.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermission.numberwang" );
            asset.checkin( "" );

            asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermission.testMetaDataSearchAsset5",
                                  "",
                                  categoryName + "/" + subCategory1Name,
                                  null );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermission.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermission.numberwang" );
            asset.checkin( "" );

            MetaDataQuery[] qr = new MetaDataQuery[2];
            qr[0] = new MetaDataQuery();
            qr[0].attribute = AssetItem.SUBJECT_PROPERTY_NAME;
            qr[0].valueList = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermission.wang, org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermission.testMetaDataSearch";
            qr[1] = new MetaDataQuery();
            qr[1].attribute = AssetItem.SOURCE_PROPERTY_NAME;
            qr[1].valueList = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermission.numberwan*";

            List<MetaDataQuery> metadata = Arrays.asList( qr );
            QueryMetadataPageRequest request = new QueryMetadataPageRequest( metadata,
                                                                             DateUtils.parseDate( "10-Jul-1974",
                                                                                                  new DateFormatsImpl() ),
                                                                             null,
                                                                             null,
                                                                             null,
                                                                             false,
                                                                             0,
                                                                             PAGE_SIZE );

            PageResponse<QueryPageRow> response;
            response = serviceImplementation.queryMetaData( request );

            assertNotNull( response );
            assertNotNull( response.getPageRowList() );
            assertEquals( 0,
                          response.getStartRowIndex() );
            assertEquals( PAGE_SIZE,
                          response.getPageRowList().size() );
            assertEquals( false,
                          response.isTotalRowSizeExact() );
            assertFalse( response.isLastPage() );

            request.setStartRowIndex( PAGE_SIZE );
            response = serviceImplementation.queryMetaData( request );

            assertNotNull( response );
            assertNotNull( response.getPageRowList() );
            assertEquals( PAGE_SIZE,
                          response.getStartRowIndex() );
            assertEquals( 1,
                          response.getPageRowList().size() );
            assertEquals( true,
                          response.isTotalRowSizeExact() );
            assertEquals( 3,
                          response.getTotalRowSize() );
            assertTrue( response.isLastPage() );
        } finally {
            roleBasedPermissionResolver.setEnableRoleBasedAuthorization( false );
            roleBasedPermissionStore.clearAllRoleBasedPermissionsForTesting( USERNAME );
            try {
                logoutAs( USERNAME );
                loginAs( ADMIN_USERNAME );
            } catch ( IllegalStateException ise ) {
                //TODO logoutAs(USERNAME) throws an exception causing the test to fail
                System.err.println( ise.getMessage() );
            }
        }
    }

    @Test
    public void testQueryMetaDataPagedResultsWithAnalystPermissionRootCategory() throws Exception {

        CategoryItem rootCategory = rulesRepository.loadCategory( "/" );
        String categoryName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRootCategoryCategory";
        String categoryDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRootCategoryCategoryDescription";
        CategoryItem cat = rootCategory.addCategory( categoryName,
                                                     categoryDescription );

        String subCategory1Name = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRootCategoryCat1";
        cat.addCategory( subCategory1Name,
                         "yeah" );
        String subCategory2Name = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRootCategoryCat2";
        cat.addCategory( subCategory2Name,
                         "yeah" );

        logoutAs( ADMIN_USERNAME );
        final String USERNAME = "queryAndFindUser";
        loginAs( USERNAME );

        roleBasedPermissionResolver.setEnableRoleBasedAuthorization( true );
        roleBasedPermissionStore.addRoleBasedPermissionForTesting( USERNAME,
                                                                   new RoleBasedPermission( USERNAME,
                                                                                            RoleType.ANALYST.getName(),
                                                                                            null,
                                                                                            categoryName + "/" + subCategory1Name ) );
        roleBasedPermissionManager.create(); // HACK flushes the permission cache

        try {
            final int PAGE_SIZE = 2;

            String packageName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRootPackage";
            String packageDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRootPackageDescription";
            ModuleItem pkg = rulesRepository.createModule( packageName,
                                                             packageDescription );

            AssetItem asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRoot.testMetaDataSearchAsset1",
                                            "",
                                            categoryName + "/" + subCategory1Name,
                                            null );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRoot.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRoot.numberwang" );
            asset.checkin( "" );

            asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRoot.testMetaDataSearchAsset2",
                                  "",
                                  categoryName,
                                  null );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRoot.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRoot.numberwang" );
            asset.checkin( "" );

            asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRoot.testMetaDataSearchAsset3",
                                  "",
                                  categoryName + "/" + subCategory1Name,
                                  null );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRoot.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRoot.numberwang" );
            asset.checkin( "" );

            asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRoot.testMetaDataSearchAsset4",
                                  "",
                                  categoryName + "/" + subCategory2Name,
                                  null );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRoot.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRoot.numberwang" );
            asset.checkin( "" );

            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRoot.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRoot.numberwang" );
            asset.checkin( "" );

            asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRoot.testMetaDataSearchAsset5",
                                  "",
                                  categoryName + "/" + subCategory1Name,
                                  null );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRoot.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRoot.numberwang" );
            asset.checkin( "" );

            MetaDataQuery[] qr = new MetaDataQuery[2];
            qr[0] = new MetaDataQuery();
            qr[0].attribute = AssetItem.SUBJECT_PROPERTY_NAME;
            qr[0].valueList = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRoot.wang, org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRoot.testMetaDataSearch";
            qr[1] = new MetaDataQuery();
            qr[1].attribute = AssetItem.SOURCE_PROPERTY_NAME;
            qr[1].valueList = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataPagedResultsWithAnalystPermissionRoot.numberwan*";

            List<MetaDataQuery> metadata = Arrays.asList( qr );
            QueryMetadataPageRequest request = new QueryMetadataPageRequest( metadata,
                                                                             DateUtils.parseDate( "10-Jul-1974",
                                                                                                  new DateFormatsImpl() ),
                                                                             null,
                                                                             null,
                                                                             null,
                                                                             false,
                                                                             0,
                                                                             PAGE_SIZE );

            PageResponse<QueryPageRow> response;
            response = serviceImplementation.queryMetaData( request );

            assertNotNull( response );
            assertNotNull( response.getPageRowList() );
            assertEquals( 0,
                          response.getStartRowIndex() );
            assertEquals( PAGE_SIZE,
                          response.getPageRowList().size() );
            assertEquals( false,
                          response.isTotalRowSizeExact() );
            assertFalse( response.isLastPage() );

            request.setStartRowIndex( PAGE_SIZE );
            response = serviceImplementation.queryMetaData( request );

            assertNotNull( response );
            assertNotNull( response.getPageRowList() );
            assertEquals( PAGE_SIZE,
                          response.getStartRowIndex() );
            assertEquals( 1,
                          response.getPageRowList().size() );
            assertEquals( true,
                          response.isTotalRowSizeExact() );
            assertEquals( 3,
                          response.getTotalRowSize() );
            assertTrue( response.isLastPage() );
        } finally {
            roleBasedPermissionResolver.setEnableRoleBasedAuthorization( false );
            roleBasedPermissionStore.clearAllRoleBasedPermissionsForTesting( USERNAME );
            try {
                logoutAs( USERNAME );
                loginAs( ADMIN_USERNAME );
            } catch ( IllegalStateException ise ) {
                //TODO logoutAs(USERNAME) throws an exception causing the test to fail
                System.err.println( ise.getMessage() );
            }
        }
    }

    @Test
    public void testQueryMetaDataFullResults() throws Exception {

        String packageName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataFullResultsPackage";
        String packageDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataFullResultsPackageDescription";
        ModuleItem pkg = rulesRepository.createModule( packageName,
                                                         packageDescription );

        AssetItem[] assets = new AssetItem[3];
        for ( int i = 0; i < assets.length; i++ ) {
            AssetItem asset = pkg.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataFullResults.testMetaDataSearchAsset" + i,
                                            "" );
            asset.updateSubject( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataFullResults.testMetaDataSearch" );
            asset.updateExternalSource( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataFullResults.numberwang" + i );
            asset.checkin( "" );
        }

        MetaDataQuery[] qr = new MetaDataQuery[2];
        qr[0] = new MetaDataQuery();
        qr[0].attribute = AssetItem.SUBJECT_PROPERTY_NAME;
        qr[0].valueList = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataFullResults.wang, org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataFullResults.testMetaDataSearch";
        qr[1] = new MetaDataQuery();
        qr[1].attribute = AssetItem.SOURCE_PROPERTY_NAME;
        qr[1].valueList = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryMetaDataFullResults.numberwan*";

        List<MetaDataQuery> metadata = Arrays.asList( qr );
        QueryMetadataPageRequest request = new QueryMetadataPageRequest( metadata,
                                                                         DateUtils.parseDate( "10-Jul-1974",
                                                                                              new DateFormatsImpl() ),
                                                                         null,
                                                                         null,
                                                                         null,
                                                                         false,
                                                                         0,
                                                                         null );

        PageResponse<QueryPageRow> response;
        response = serviceImplementation.queryMetaData( request );

        assertNotNull( response );
        assertNotNull( response.getPageRowList() );
        assertEquals( 0,
                      response.getStartRowIndex() );
        assertEquals( 3,
                      response.getPageRowList().size() );
        assertTrue( response.isLastPage() );
    }

    @Test
    public void testFindAssetPagePagedResults() throws Exception {

        final int PAGE_SIZE = 2;

        String categoryName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPagePagedResultsCategory";
        String categoryDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPagePagedResultsCategoryDescription";
        repositoryCategoryService.createCategory( "/",
                                                  categoryName,
                                                  categoryDescription );

        String packageName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPagePagedResultsPackage";
        String packageDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPagePagedResultsPackageDescription";
        ModuleItem packageItem = rulesRepository.createModule( packageName,
                                                                 packageDescription,
                                                                 "package" );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPagePagedResults.testTextRule1",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPagePagedResults.testTextRule1Description",
                                             categoryName,
                                             packageName,
                                             AssetFormats.BUSINESS_RULE );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPagePagedResults.testTextRule2",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPagePagedResults.testTextRule2Description",
                                             categoryName,
                                             packageName,
                                             AssetFormats.BUSINESS_RULE );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPagePagedResults.testTextRule3",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPagePagedResults.testTextRule3Description",
                                             categoryName,
                                             packageName,
                                             AssetFormats.BUSINESS_RULE );

        List<String> formats = new ArrayList<String>();
        formats.add( AssetFormats.BUSINESS_RULE );
        AssetPageRequest request = new AssetPageRequest( packageItem.getUUID(),
                                                         formats,
                                                         null,
                                                         0,
                                                         PAGE_SIZE );

        PageResponse<AssetPageRow> response;
        response = repositoryAssetService.findAssetPage( request );

        assertNotNull( response );
        assertNotNull( response.getPageRowList() );
        assertEquals( 0,
                      response.getStartRowIndex() );
        assertEquals( PAGE_SIZE,
                      response.getPageRowList().size() );
        assertFalse( response.isLastPage() );

        request.setStartRowIndex( PAGE_SIZE );
        response = repositoryAssetService.findAssetPage( request );

        assertNotNull( response );
        assertNotNull( response.getPageRowList() );
        assertEquals( PAGE_SIZE,
                      response.getStartRowIndex() );
        assertEquals( 1,
                      response.getPageRowList().size() );
        assertTrue( response.isLastPage() );
    }

    @Test
    public void testFindAssetPageFullResults() throws Exception {

        String categoryName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPageFullResultsCategory";
        String categoryDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPageFullResultsCategoryDescription";
        repositoryCategoryService.createCategory( "/",
                                                  categoryName,
                                                  categoryDescription );

        String packageName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPageFullResultsPackage";
        String packageDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPageFullResultsPackageDescription";
        ModuleItem packageItem = rulesRepository.createModule( packageName,
                                                                 packageDescription,
                                                                 "package" );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPageFullResults.testTextRule1",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPageFullResults.testTextRule1Description",
                                             categoryName,
                                             packageName,
                                             AssetFormats.BUSINESS_RULE );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPageFullResults.testTextRule2",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPageFullResults.testTextRule2Description",
                                             categoryName,
                                             packageName,
                                             AssetFormats.BUSINESS_RULE );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPageFullResults.testTextRule3",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPageFullResults.testTextRule3Description",
                                             categoryName,
                                             packageName,
                                             AssetFormats.BUSINESS_RULE );

        List<String> formats = new ArrayList<String>();
        formats.add( AssetFormats.BUSINESS_RULE );
        AssetPageRequest request = new AssetPageRequest( packageItem.getUUID(),
                                                         formats,
                                                         null,
                                                         0,
                                                         null );

        PageResponse<AssetPageRow> response;
        response = repositoryAssetService.findAssetPage( request );

        assertNotNull( response );
        assertNotNull( response.getPageRowList() );
        assertEquals( 0,
                      response.getStartRowIndex() );
        assertEquals( 3,
                      response.getPageRowList().size() );
        assertTrue( response.isLastPage() );
    }

    @Test
    public void testFindAssetPageUnregisteredAssetFormats() throws Exception {

        String packageName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPageUnregisteredAssetFormatsPackage";
        String packageDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPageUnregisteredAssetFormatsPackageDescription";
        ModuleItem packageItem = rulesRepository.createModule( packageName,
                                                                 packageDescription );

        AssetItem as;
        as = packageItem.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPageUnregisteredAssetFormats.assetWithKnownFormat",
                                   "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPageUnregisteredAssetFormats.assetWithKnownFormatDescription" );
        as.updateFormat( AssetFormats.DRL );
        as.checkin( "" );

        as = packageItem.addAsset( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPageUnregisteredAssetFormats.assetWithUnknownFormat",
                                   "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testFindAssetPageUnregisteredAssetFormats.assetWithUnknownFormatDescription" );
        as.updateFormat( "something_silly" );
        as.checkin( "" );

        List<String> formats = new ArrayList<String>();
        formats.add( AssetFormats.DRL );
        AssetPageRequest request = new AssetPageRequest( packageItem.getUUID(),
                                                         formats,
                                                         null,
                                                         0,
                                                         null );

        PageResponse<AssetPageRow> response;
        response = repositoryAssetService.findAssetPage( request );

        assertEquals( 1,
                      response.getPageRowList().size() );
    }

    @Test
    public void testQuickFindAssetCaseInsensitiveFullResults() throws Exception {

        String categoryName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitiveFullResultsCategory";
        String categoryDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitiveFullResultsCategoryDescription";
        repositoryCategoryService.createCategory( "/",
                                                  categoryName,
                                                  categoryDescription );

        String packageName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitiveFullResultsPackage";
        String packageDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitiveFullResultsPackageDescription";
        repositoryPackageService.createModule( packageName,
                                                packageDescription,
                                                "package" );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitiveFullResults.testTextRule",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitiveFullResults.testTextRuleDescription",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitiveFullResults.TESTTEXTRULE",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitiveFullResults.TESTTEXTRULEDescription",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitiveFullResults.tEsTtExTrUlE",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitiveFullResults.tEsTtExTrUlEDescription",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        QueryPageRequest request = new QueryPageRequest( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitiveFullResults.testTextRule",
                                                         false,
                                                         false,
                                                         0,
                                                         null );
        PageResponse<QueryPageRow> response;

        response = repositoryAssetService.quickFindAsset( request );

        assertNotNull( response );
        assertNotNull( response.getPageRowList() );
        assertEquals( 0,
                      response.getStartRowIndex() );
        assertEquals( 3,
                      response.getPageRowList().size() );
        assertTrue( response.isLastPage() );
    }

    @Test
    public void testQuickFindAssetCaseInsensitivePagedResults() throws Exception {

        final int PAGE_SIZE = 2;

        String categoryName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitivePagedResultsCategory";
        String categoryDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitivePagedResultsCategoryDescription";
        repositoryCategoryService.createCategory( "/",
                                                  categoryName,
                                                  categoryDescription );

        String packageName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitivePagedResultsPackage";
        String packageDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitivePagedResultsPackageDescription";
        repositoryPackageService.createModule( packageName,
                                                packageDescription,
                                                "package" );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitivePagedResults.testTextRule",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitivePagedResults.testTextRuleDescription",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitivePagedResults.TESTTEXTRULE",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitivePagedResults.TESTTEXTRULEDescription",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitivePagedResults.tEsTtExTrUlE",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitivePagedResults.tEsTtExTrUlEDescription",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        QueryPageRequest request = new QueryPageRequest( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQuickFindAssetCaseInsensitivePagedResults.testTextRule",
                                                         false,
                                                         false,
                                                         0,
                                                         PAGE_SIZE );
        PageResponse<QueryPageRow> response;

        response = repositoryAssetService.quickFindAsset( request );

        assertNotNull( response );
        assertNotNull( response.getPageRowList() );
        assertEquals( 0,
                      response.getStartRowIndex() );
        assertEquals( PAGE_SIZE,
                      response.getPageRowList().size() );
        assertFalse( response.isLastPage() );

        request.setStartRowIndex( PAGE_SIZE );
        response = repositoryAssetService.quickFindAsset( request );

        assertNotNull( response );
        assertNotNull( response.getPageRowList() );
        assertEquals( PAGE_SIZE,
                      response.getStartRowIndex() );
        assertEquals( 1,
                      response.getPageRowList().size() );
        assertTrue( response.isLastPage() );
    }

    @Test
    public void testQueryFullTextCaseInsensitiveFullResults() throws Exception {

        String categoryName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitiveFullResultsCategory";
        String categoryDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitiveFullResultsCategoryDescription";
        repositoryCategoryService.createCategory( "/",
                                                  categoryName,
                                                  categoryDescription );

        String packageName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitiveFullResultsPackage";
        String packageDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitiveFullResultsPackageDescription";
        repositoryPackageService.createModule( packageName,
                                                packageDescription,
                                                "package" );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitiveFullResults.testTextRule",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitiveFullResults.testTextRuleDescription",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitiveFullResults.TESTTEXTRULE",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitiveFullResults.TESTTEXTRULEDescription",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitiveFullResults.tEsTtExTrUlE",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitiveFullResults.tEsTtExTrUlEDescription",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        QueryPageRequest request = new QueryPageRequest( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitiveFullResults.testTextRule",
                                                         false,
                                                         false,
                                                         0,
                                                         null );
        PageResponse<QueryPageRow> response;
        response = serviceImplementation.queryFullText( request );

        assertNotNull( response );
        assertNotNull( response.getPageRowList() );
        assertTrue( response.getStartRowIndex() == 0 );
        assertTrue( response.getPageRowList().size() == 3 );
        assertTrue( response.isLastPage() );
    }

    @Test
    public void testQueryFullTextCaseInsensitivePagedResults() throws Exception {

        final int PAGE_SIZE = 2;

        String categoryName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitivePagedResultsCategory";
        String categoryDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitivePagedResultsCategoryDescription";
        repositoryCategoryService.createCategory( "/",
                                                  categoryName,
                                                  categoryDescription );

        String packageName = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitivePagedResultsPackage";
        String packageDescription = "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitivePagedResultsPackageDescription";
        repositoryPackageService.createModule( packageName,
                                                packageDescription,
                                                "package" );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitivePagedResults.testTextRule",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitivePagedResults.testTextRuleDescription",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitivePagedResults.TESTTEXTRULE",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitivePagedResults.TESTTEXTRULEDescription",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        serviceImplementation.createNewRule( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitivePagedResults.tEsTtExTrUlE",
                                             "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitivePagedResults.tEsTtExTrUlEDescription",
                                             categoryName,
                                             packageName,
                                             AssetFormats.DRL );

        QueryPageRequest request = new QueryPageRequest( "org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest.testQueryFullTextCaseInsensitivePagedResults.testTextRule*",
                                                         false,
                                                         false,
                                                         0,
                                                         PAGE_SIZE );
        PageResponse<QueryPageRow> response;
        response = serviceImplementation.queryFullText( request );

        assertNotNull( response );
        assertNotNull( response.getPageRowList() );
        assertEquals( 0,
                      response.getStartRowIndex() );
        assertEquals( PAGE_SIZE,
                      response.getPageRowList().size() );
        assertFalse( response.isLastPage() );

        request.setStartRowIndex( PAGE_SIZE );
        response = serviceImplementation.queryFullText( request );

        assertNotNull( response );
        assertNotNull( response.getPageRowList() );
        assertEquals( PAGE_SIZE,
                      response.getStartRowIndex() );
        assertEquals( 1,
                      response.getPageRowList().size() );
        assertTrue( response.isLastPage() );
    }

}
TOP

Related Classes of org.drools.guvnor.server.RepositoryQueryAndFindIntegrationTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.