/* The contents of this file are subject to the license and copyright terms * detailed in the license directory at the root of the source tree (also * available online at http://fedora-commons.org/license/). */ package fedora.server.resourceIndex; import org.junit.Test; import fedora.server.storage.types.Datastream; import fedora.server.storage.types.DigitalObject; import fedora.server.storage.types.ObjectBuilder; /** * Tests modifying objects in the RI, with respect to their datastreams. Note: * All tests run at RI level 1 unless otherwise noted. * * @author Chris Wilper * @author Stephen Bayliss */ public class ResourceIndexModDSIntegrationTest extends ResourceIndexIntegrationTest { /** * Add a datastream to an existing object. */ @Test public void testModObjOnceAddDS() throws Exception { DigitalObject original = getTestObject("test:1", "test1"); DigitalObject modified = ObjectBuilder.deepCopy(original); addEDatastream(modified, "DS1"); doModifyTest(1, original, modified); } /** * Delete a datastream from an existing object. */ @Test public void testModObjOnceDelDS() throws Exception { DigitalObject original = getTestObject("test:1", "test1"); addEDatastream(original, "DS1"); DigitalObject modified = ObjectBuilder.deepCopy(original); for (Datastream d : modified.datastreams("DS1")) { modified.removeDatastreamVersion(d); } doModifyTest(1, original, modified); } /** * Add a datastream and delete another from an existing object. */ @Test public void testModObjOnceAddOneDSDelAnother() throws Exception { DigitalObject original = getTestObject("test:1", "test1"); addEDatastream(original, "DS1"); DigitalObject modified = ObjectBuilder.deepCopy(original); addEDatastream(modified, "DS2"); for (Datastream d : modified.datastreams("DS1")) { modified.removeDatastreamVersion(d); } doModifyTest(1, original, modified); } /** * Add a Dublin Core field to the DC datastream of an existing object. */ @Test public void testModObjOnceAddOneDCField() throws Exception { DigitalObject original = getTestObject("test:1", "test1"); addXDatastream(original, "DC", getDC("<dc:title>test</dc:title>")); DigitalObject modified = ObjectBuilder.deepCopy(original); addXDatastream(modified, "DC", getDC("<dc:title>test</dc:title>\n" + "<dc:identifier>id</dc:identifier>")); doModifyTest(1, original, modified); } /** * Delete a Dublin Core field from the DC datastream of an existing object. */ @Test public void testModObjOnceDelOneDCField() throws Exception { DigitalObject original = getTestObject("test:1", "test1"); addXDatastream(original, "DC", getDC("<dc:title>test</dc:title>\n" + "<dc:identifier>id</dc:identifier>")); DigitalObject modified = ObjectBuilder.deepCopy(original); addXDatastream(modified, "DC", getDC("<dc:title>test</dc:title>")); doModifyTest(1, original, modified); } /** * Add a Dublin Core field and delete another from the DC datastream of an * existing object. */ @Test public void testModObjOnceAddOneDCFieldDelAnother() throws Exception { DigitalObject original = getTestObject("test:1", "test1"); addXDatastream(original, "DC", getDC("<dc:title>test</dc:title>")); DigitalObject modified = ObjectBuilder.deepCopy(original); addXDatastream(modified, "DC", getDC("<dc:identifier>id</dc:identifier>")); doModifyTest(1, original, modified); } /** * Add a relation to the RELS-EXT datastream of an existing object. */ @Test public void testModObjOnceAddOneRELSEXTField() throws Exception { String rel1 = "<foo:bar rdf:resource=\"http://example.org/baz\"/>"; String rel2 = "<foo:bar rdf:resource=\"http://example.org/quux\"/>"; DigitalObject original = getTestObject("test:1", "test1"); addXDatastream(original, "RELS-EXT", ObjectBuilder.getRELSEXT("test:1", rel1)); DigitalObject modified = ObjectBuilder.deepCopy(original); addXDatastream(modified, "RELS-EXT", ObjectBuilder.getRELSEXT("test:1", rel1 + "\n" + rel2)); doModifyTest(1, original, modified); } /** * Delete a relation from the RELS-EXT datastream of an existing object. */ @Test public void testModObjOnceDelOneRELSEXTField() throws Exception { String rel1 = "<foo:bar rdf:resource=\"http://example.org/baz\"/>"; String rel2 = "<foo:bar rdf:resource=\"http://example.org/quux\"/>"; DigitalObject original = getTestObject("test:1", "test1"); addXDatastream(original, "RELS-EXT", ObjectBuilder.getRELSEXT("test:1", rel1 + "\n" + rel2)); DigitalObject modified = ObjectBuilder.deepCopy(original); addXDatastream(modified, "RELS-EXT", ObjectBuilder.getRELSEXT("test:1", rel1)); doModifyTest(1, original, modified); } /** * Add a relation and delete another from the RELS-EXT datastream of an * existing object. */ @Test public void testModObjOnceAddOneRELSEXTFieldDelAnother() throws Exception { String rel1 = "<foo:bar rdf:resource=\"http://example.org/baz\"/>"; String rel2 = "<foo:bar rdf:resource=\"http://example.org/quux\"/>"; DigitalObject original = getTestObject("test:1", "test1"); addXDatastream(original, "RELS-EXT", ObjectBuilder.getRELSEXT("test:1", rel1)); DigitalObject modified = ObjectBuilder.deepCopy(original); addXDatastream(modified, "RELS-EXT", ObjectBuilder.getRELSEXT("test:1", rel2)); doModifyTest(1, original, modified); } /** * Add relations to the RELS-INT datastream of an existing object. */ @Test public void testModObjOnceAddOneRELSINTField() throws Exception { String rel1 = "<foo:bar rdf:resource=\"http://example.org/baz\"/>"; String rel2 = "<foo:qux>quux</foo:qux>"; String rel3 = "<foo:corge rdf:resource=\"http://example.org/grault\"/>"; String rel4 = "<foo:garply rdf:resource=\"http://example.org/waldo\"/>"; DigitalObject original = getTestObject("test:1", "test1"); addXDatastream(original, "RELS-INT", ObjectBuilder.getRELSINT("test:1", rel1, rel2)); DigitalObject modified = ObjectBuilder.deepCopy(original); addXDatastream(modified, "RELS-INT", ObjectBuilder.getRELSINT("test:1", rel1 + "\n" + rel3, rel2 + "\n" + rel4)); doModifyTest(1, original, modified); } /** * Delete a relation from the RELS-INT datastream of an existing object. */ @Test public void testModObjOnceDelOneRELSINTField() throws Exception { String rel1 = "<foo:bar rdf:resource=\"http://example.org/baz\"/>"; String rel2 = "<foo:qux>quux</foo:qux>"; String rel3 = "<foo:corge rdf:resource=\"http://example.org/grault\"/>"; String rel4 = "<foo:garply rdf:resource=\"http://example.org/waldo\"/>"; DigitalObject original = getTestObject("test:1", "test1"); addXDatastream(original, "RELS-INT", ObjectBuilder.getRELSINT("test:1", rel1 + "\n" + rel3, rel2 + "\n" + rel4)); DigitalObject modified = ObjectBuilder.deepCopy(original); addXDatastream(modified, "RELS-INT", ObjectBuilder.getRELSINT("test:1", rel1, rel2)); doModifyTest(1, original, modified); } /** * Add a relation and delete another from the RELS-EXT datastream of an * existing object. */ @Test public void testModObjOnceAddOneRELSINTFieldDelAnother() throws Exception { String rel1 = "<foo:bar rdf:resource=\"http://example.org/baz\"/>"; String rel2 = "<foo:qux>quux</foo:qux>"; String rel3 = "<foo:corge rdf:resource=\"http://example.org/grault\"/>"; String rel4 = "<foo:garply rdf:resource=\"http://example.org/waldo\"/>"; DigitalObject original = getTestObject("test:1", "test1"); addXDatastream(original, "RELS-INT", ObjectBuilder.getRELSINT("test:1", rel1, rel2)); DigitalObject modified = ObjectBuilder.deepCopy(original); addXDatastream(modified, "RELS-INT", ObjectBuilder.getRELSINT("test:1", rel3, rel4)); doModifyTest(1, original, modified); } // Supports legacy test runners public static junit.framework.Test suite() { return new junit.framework.JUnit4TestAdapter(ResourceIndexModDSIntegrationTest.class); } }