edu.unc.lib.dl.data.ingest.solr.action.DeleteSolrTreeTest.java Source code

Java tutorial

Introduction

Here is the source code for edu.unc.lib.dl.data.ingest.solr.action.DeleteSolrTreeTest.java

Source

/**
 * Copyright 2008 The University of North Carolina at Chapel Hill
 *
 * 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 edu.unc.lib.dl.data.ingest.solr.action;

import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;

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

import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;

import edu.unc.lib.dl.acl.util.AccessGroupSet;
import edu.unc.lib.dl.data.ingest.solr.SolrUpdateRequest;
import edu.unc.lib.dl.search.solr.model.BriefObjectMetadataBean;
import edu.unc.lib.dl.search.solr.model.CutoffFacet;
import edu.unc.lib.dl.search.solr.model.SimpleIdRequest;
import edu.unc.lib.dl.search.solr.service.SolrSearchService;
import edu.unc.lib.dl.search.solr.util.SearchFieldKeys;
import edu.unc.lib.dl.search.solr.util.SearchSettings;
import edu.unc.lib.dl.search.solr.util.SolrSettings;
import edu.unc.lib.dl.util.IndexingActionType;

public class DeleteSolrTreeTest extends BaseEmbeddedSolrTest {

    @Mock
    private SearchSettings searchSettings;
    @Mock
    private SolrSettings solrSettings;
    @Mock
    private SolrSearchService solrSearchService;

    private DeleteSolrTreeAction action;

    @Mock
    private BriefObjectMetadataBean metadata;

    @Before
    public void setup() throws SolrServerException, IOException {
        initMocks(this);

        when(searchSettings.getResourceTypeCollection()).thenReturn("Collection");
        when(searchSettings.getResourceTypeFolder()).thenReturn("Folder");

        when(solrSettings.getFieldName(eq(SearchFieldKeys.ANCESTOR_PATH.name()))).thenReturn("ancestorPath");
        when(solrSettings.getFieldName(eq(SearchFieldKeys.ID.name()))).thenReturn("id");

        when(solrSearchService.getObjectById(any(SimpleIdRequest.class))).thenReturn(metadata);

        action = new DeleteSolrTreeAction();

        action.setSolrUpdateDriver(driver);
        action.setSolrSettings(solrSettings);
        action.setSearchSettings(searchSettings);
        action.setSolrSearchService(solrSearchService);
        action.setAccessGroups(new AccessGroupSet("admin"));
        action.setSolrSearchService(solrSearchService);

        server.add(populate());
        server.commit();
    }

    @Test
    public void deleteTree() throws Exception {

        when(metadata.getId()).thenReturn("uuid:2");
        when(metadata.getAncestorPath()).thenReturn(Arrays.asList("1,uuid:1,Collections"));
        when(metadata.getResourceType()).thenReturn("Collection");
        CutoffFacet path = mock(CutoffFacet.class);
        when(path.getSearchValue()).thenReturn("2,uuid:2");
        when(metadata.getPath()).thenReturn(path);

        action.performAction(new SolrUpdateRequest("uuid:2", IndexingActionType.DELETE_SOLR_TREE));
        server.commit();

        SolrDocumentList docListAfter = getDocumentList();

        assertEquals(2, docListAfter.getNumFound());

        for (SolrDocument docAfter : docListAfter) {
            String id = (String) docAfter.getFieldValue("id");
            if ("uuid:2".equals(id) || "uuid:6".equals(id))
                fail("Object was not deleted: " + id);
        }
    }

    @Test
    public void deleteNonexistent() throws Exception {

        when(solrSearchService.getObjectById(any(SimpleIdRequest.class))).thenReturn(null);

        action.performAction(new SolrUpdateRequest("uuid:doesnotexist", IndexingActionType.DELETE_SOLR_TREE));
        server.commit();

        SolrDocumentList docListAfter = getDocumentList();

        assertEquals(4, docListAfter.getNumFound());
    }

    @Test
    public void deleteSimple() throws Exception {

        when(metadata.getResourceType()).thenReturn("File");

        action.performAction(new SolrUpdateRequest("uuid:6", IndexingActionType.DELETE_SOLR_TREE));
        server.commit();

        SolrDocumentList docListAfter = getDocumentList();

        assertEquals("One object should have been removed", 3, docListAfter.getNumFound());

        for (SolrDocument docAfter : docListAfter) {
            String id = (String) docAfter.getFieldValue("id");
            if ("uuid:6".equals(id))
                fail("Object was not deleted: " + id);
        }
    }

    @Test
    public void deleteEverything() throws Exception {

        action.performAction(
                new SolrUpdateRequest(AbstractIndexingAction.TARGET_ALL, IndexingActionType.DELETE_SOLR_TREE));
        server.commit();

        SolrDocumentList docListAfter = getDocumentList();

        assertEquals("Index should be empty", 0, docListAfter.getNumFound());
    }

    protected List<SolrInputDocument> populate() {
        List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();

        SolrInputDocument newDoc = new SolrInputDocument();
        newDoc.addField("title", "Collections");
        newDoc.addField("id", "uuid:1");
        newDoc.addField("rollup", "uuid:1");
        newDoc.addField("roleGroup", "public admin");
        newDoc.addField("readGroup", "public");
        newDoc.addField("adminGroup", "admin");
        newDoc.addField("ancestorNames", "/Collections");
        newDoc.addField("resourceType", "Folder");
        docs.add(newDoc);

        newDoc = new SolrInputDocument();
        newDoc.addField("title", "A collection");
        newDoc.addField("id", "uuid:2");
        newDoc.addField("rollup", "uuid:2");
        newDoc.addField("roleGroup", "public admin");
        newDoc.addField("readGroup", "public");
        newDoc.addField("adminGroup", "admin");
        newDoc.addField("ancestorNames", "/Collections/A_collection");
        newDoc.addField("ancestorPath", Arrays.asList("1,uuid:1,Collections"));
        newDoc.addField("resourceType", "Collection");
        docs.add(newDoc);

        newDoc = new SolrInputDocument();
        newDoc.addField("title", "File");
        newDoc.addField("id", "uuid:6");
        newDoc.addField("rollup", "uuid:6");
        newDoc.addField("roleGroup", "public admin");
        newDoc.addField("readGroup", "public");
        newDoc.addField("adminGroup", "admin");
        newDoc.addField("ancestorNames", "/Collections/A_collection");
        newDoc.addField("ancestorPath", Arrays.asList("1,uuid:1,Collections", "2,uuid:2,A collection"));
        newDoc.addField("resourceType", "File");
        docs.add(newDoc);

        newDoc = new SolrInputDocument();
        newDoc.addField("title", "Second collection");
        newDoc.addField("id", "uuid:3");
        newDoc.addField("rollup", "uuid:3");
        newDoc.addField("roleGroup", "public admin");
        newDoc.addField("readGroup", "public");
        newDoc.addField("adminGroup", "admin");
        newDoc.addField("ancestorNames", "/Collections/Second_collection");
        newDoc.addField("ancestorPath", Arrays.asList("1,uuid:1,Collections"));
        newDoc.addField("resourceType", "Collection");
        docs.add(newDoc);

        return docs;
    }
}