edu.unc.lib.dl.cdr.sword.managers.ContainerManagerTest.java Source code

Java tutorial

Introduction

Here is the source code for edu.unc.lib.dl.cdr.sword.managers.ContainerManagerTest.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.cdr.sword.managers;

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

import java.io.File;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.io.FileUtils;
import org.junit.Assert;
import org.junit.Test;
import org.swordapp.server.AuthCredentials;
import org.swordapp.server.DepositReceipt;
import org.swordapp.server.SwordAuthException;
import org.swordapp.server.SwordError;

import edu.unc.lib.dl.acl.service.AccessControlService;
import edu.unc.lib.dl.acl.util.AccessGroupSet;
import edu.unc.lib.dl.acl.util.GroupsThreadStore;
import edu.unc.lib.dl.acl.util.ObjectAccessControlsBean;
import edu.unc.lib.dl.acl.util.Permission;
import edu.unc.lib.dl.cdr.sword.server.SwordConfigurationImpl;
import edu.unc.lib.dl.cdr.sword.server.managers.ContainerManagerImpl;
import edu.unc.lib.dl.cdr.sword.server.util.DepositReportingUtil;
import edu.unc.lib.dl.fedora.AccessClient;
import edu.unc.lib.dl.fedora.PID;
import edu.unc.lib.dl.fedora.types.MIMETypedStream;
import edu.unc.lib.dl.util.ContentModelHelper;
import edu.unc.lib.dl.util.TripleStoreQueryService;

public class ContainerManagerTest extends Assert {

    private SwordConfigurationImpl config;

    public ContainerManagerTest() {
        config = new SwordConfigurationImpl();
        config.setBasePath("http://localhost");
        config.setSwordPath("http://localhost/sword");
        config.setAdminDepositor("admin");
    }

    @Test
    public void getEntryCredentials() throws Exception {
        DepositReceipt resultReceipt = mock(DepositReceipt.class);

        DepositReportingUtil depositReportingUtil = mock(DepositReportingUtil.class);
        when(depositReportingUtil.retrieveDepositReceipt(any(PID.class), any(SwordConfigurationImpl.class)))
                .thenReturn(resultReceipt);

        PID pid = new PID("uuid:test");

        TripleStoreQueryService tripleStoreQueryService = mock(TripleStoreQueryService.class);

        Map<String, String> disseminations = new HashMap<String, String>();
        disseminations.put(pid.getURI() + "/" + ContentModelHelper.Datastream.MD_DESCRIPTIVE.getName(), "text/xml");
        disseminations.put(pid.getURI() + "/" + ContentModelHelper.Datastream.DATA_FILE.getName(), "image/jpg");

        when(tripleStoreQueryService.fetchDisseminatorMimetypes(any(PID.class))).thenReturn(disseminations);

        File modsFile = new File("src/test/resources/modsDocument.xml");
        byte[] modsBytes = FileUtils.readFileToByteArray(modsFile);
        MIMETypedStream mimeStream = new MIMETypedStream();
        mimeStream.setStream(modsBytes);

        GroupsThreadStore.storeGroups(new AccessGroupSet());
        AccessControlService aclService = mock(AccessControlService.class);
        ObjectAccessControlsBean objectACLs = mock(ObjectAccessControlsBean.class);
        when(objectACLs.hasPermission(any(AccessGroupSet.class), any(Permission.class))).thenReturn(true);
        when(aclService.getObjectAccessControls(any(PID.class))).thenReturn(objectACLs);

        AccessClient accessClient = mock(AccessClient.class);
        when(accessClient.getDatastreamDissemination(any(PID.class),
                eq(ContentModelHelper.Datastream.MD_DESCRIPTIVE.getName()), anyString())).thenReturn(mimeStream);

        ContainerManagerImpl containerManager = new ContainerManagerImpl();
        containerManager.setDepositReportingUtil(depositReportingUtil);
        containerManager.setTripleStoreQueryService(tripleStoreQueryService);
        containerManager.setAccessClient(accessClient);
        containerManager.setAclService(aclService);

        String editIRI = "http://localhost" + SwordConfigurationImpl.EDIT_PATH + "/" + pid.getPid();

        AuthCredentials auth = new AuthCredentials("testuser", "", null);

        // Check to make sure that not finding the user's onyen is not the end of the world
        when(objectACLs.hasPermission(any(AccessGroupSet.class), any(Permission.class))).thenReturn(true);
        try {
            DepositReceipt receipt = containerManager.getEntry(editIRI, null, auth, config);
            assertNotNull(receipt);
        } catch (SwordAuthException e) {
            fail();
        }

        when(objectACLs.hasPermission(any(AccessGroupSet.class), any(Permission.class))).thenReturn(false);
        try {
            containerManager.getEntry(editIRI, null, auth, config);
            fail();
        } catch (SwordError e) {
            //pass
        }
        GroupsThreadStore.clearGroups();
    }
}