/* * InstallItemTest.java * * Copyright (c) 2002-2009, The DSpace Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of the DSpace Foundation nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. */ package org.dspace.content; import mockit.*; import org.dspace.authorize.AuthorizeManager; import org.dspace.core.Constants; import org.dspace.core.Context; import java.io.FileInputStream; import java.io.File; import java.sql.SQLException; import org.dspace.AbstractUnitTest; import org.apache.log4j.Logger; import org.junit.*; import static org.junit.Assert.* ; import static org.hamcrest.CoreMatchers.*; /** * Unit Tests for class InstallItem * @author pvillega */ public class InstallItemTest extends AbstractUnitTest { /** log4j category */ private static final Logger log = Logger.getLogger(InstallItemTest.class); /** * This method will be run before every test as per @Before. It will * initialize resources required for the tests. * * Other methods can be annotated with @Before here or in subclasses * but no execution order is guaranteed */ @Before @Override public void init() { super.init(); } /** * This method will be run after every test as per @After. It will * clean resources initialized by the @Before methods. * * Other methods can be annotated with @After here or in subclasses * but no execution order is guaranteed */ @After @Override public void destroy() { super.destroy(); } /** * Test of installItem method, of class InstallItem. */ @Test public void testInstallItem_Context_InProgressSubmission() throws Exception { context.turnOffAuthorisationSystem(); Collection col = Collection.create(context); WorkspaceItem is = WorkspaceItem.create(context, col, false); Item result = InstallItem.installItem(context, is); context.restoreAuthSystemState(); assertThat("testInstallItem_Context_InProgressSubmission 0", result, equalTo(is.getItem())); } /** * Test of installItem method (with a valid handle), of class InstallItem. */ @Test public void testInstallItem_validHandle() throws Exception { context.turnOffAuthorisationSystem(); String handle = "1345/567"; Collection col = Collection.create(context); WorkspaceItem is = WorkspaceItem.create(context, col, false); //Test assigning a specified handle to an item // (this handle should not already be used by system, as it doesn't start with "1234567689" prefix) Item result = InstallItem.installItem(context, is, handle); context.restoreAuthSystemState(); assertThat("testInstallItem_validHandle", result, equalTo(is.getItem())); assertThat("testInstallItem_validHandle", result.getHandle(), equalTo(handle)); } /** * Test of installItem method (with an invalid handle), of class InstallItem. */ @Test(expected=SQLException.class) public void testInstallItem_invalidHandle() throws Exception { //Default to Full-Admin rights new NonStrictExpectations() { AuthorizeManager authManager; { AuthorizeManager.authorizeActionBoolean((Context) any, (Community) any, Constants.ADD); result = false; AuthorizeManager.isAdmin((Context) any); result = true; } }; String handle = "1345/567"; Collection col = Collection.create(context); WorkspaceItem is = WorkspaceItem.create(context, col, false); WorkspaceItem is2 = WorkspaceItem.create(context, col, false); //Test assigning the same Handle to two different items // this should throw an exception Item result1 = InstallItem.installItem(context, is, handle); Item result2 = InstallItem.installItem(context, is2, handle); fail("Exception expected"); } /** * Test of restoreItem method, of class InstallItem. */ @Test public void testRestoreItem() throws Exception { context.turnOffAuthorisationSystem(); String handle = "1345/567"; Collection col = Collection.create(context); WorkspaceItem is = WorkspaceItem.create(context, col, false); //get current date DCDate now = DCDate.getCurrent(); String dayAndTime = now.toString(); //parse out just the date, remove the time (format: yyyy-mm-ddT00:00:00Z) String date = dayAndTime.substring(0, dayAndTime.indexOf("T")); //Build the beginning of a dummy provenance message //(restoreItem should NEVER insert a provenance message with today's date) String provDescriptionBegins = "Made available in DSpace on " + date; Item result = InstallItem.restoreItem(context, is, handle); context.restoreAuthSystemState(); //Make sure restore worked assertThat("testRestoreItem 0", result, equalTo(is.getItem())); //Make sure that restore did NOT insert a new provenance message with today's date DCValue[] provMsgValues = result.getMetadata("dc", "description", "provenance", Item.ANY); int i = 1; for(DCValue val : provMsgValues) { assertFalse("testRestoreItem " + i, val.value.startsWith(provDescriptionBegins)); i++; } } /** * Test of getBitstreamProvenanceMessage method, of class InstallItem. */ @Test public void testGetBitstreamProvenanceMessage() throws Exception { File f = new File(testProps.get("test.bitstream").toString()); context.turnOffAuthorisationSystem(); Item item = Item.create(context); context.commit(); Bitstream one = item.createSingleBitstream(new FileInputStream(f)); one.setName("one"); context.commit(); Bitstream two = item.createSingleBitstream(new FileInputStream(f)); two.setName("two"); context.commit(); context.restoreAuthSystemState(); // Create provenance description String testMessage = "No. of bitstreams: 2\n"; testMessage += "one: " + one.getSize() + " bytes, checksum: " + one.getChecksum() + " (" + one.getChecksumAlgorithm() + ")\n"; testMessage += "two: " + two.getSize() + " bytes, checksum: " + two.getChecksum() + " (" + two.getChecksumAlgorithm() + ")\n"; assertThat("testGetBitstreamProvenanceMessage 0", InstallItem.getBitstreamProvenanceMessage(item), equalTo(testMessage)); } }