@Test public void testNormalOperations() throws Exception { FedoraObjectUIPProcessor processor = new FedoraObjectUIPProcessor(); AccessControlService aclService = mock(AccessControlService.class); when(aclService.hasAccess( any(PID.class), any(AccessGroupSet.class), eq(Permission.editAccessControl))) .thenReturn(true); processor.setAclService(aclService); InputStream entryPart = new FileInputStream(new File("src/test/resources/atompub/metadataUnpublish.xml")); Abdera abdera = new Abdera(); Parser parser = abdera.getParser(); Document<Entry> entryDoc = parser.parse(entryPart); Entry entry = entryDoc.getRoot(); Map<String, org.jdom2.Element> originalMap = new HashMap<String, org.jdom2.Element>(); org.jdom2.Element rdfElement = new org.jdom2.Element("RDF", JDOMNamespaceUtil.RDF_NS); org.jdom2.Element descElement = new org.jdom2.Element("Description", JDOMNamespaceUtil.RDF_NS); rdfElement.addContent(descElement); org.jdom2.Element relElement = new org.jdom2.Element( ContentModelHelper.CDRProperty.isPublished.getPredicate(), JDOMNamespaceUtil.CDR_NS); relElement.setText("yes"); descElement.addContent(relElement); relElement = new org.jdom2.Element( ContentModelHelper.CDRProperty.embargoUntil.getPredicate(), JDOMNamespaceUtil.CDR_ACL_NS); relElement.setText("2013-02-01"); descElement.addContent(relElement); relElement = new org.jdom2.Element( ContentModelHelper.FedoraProperty.hasModel.name(), JDOMNamespaceUtil.FEDORA_MODEL_NS); relElement.setText(ContentModelHelper.Model.SIMPLE.name()); descElement.addContent(relElement); originalMap.put(ContentModelHelper.Datastream.RELS_EXT.getName(), rdfElement); Map<String, org.jdom2.Element> datastreamMap = AtomPubMetadataParserUtil.extractDatastreams(entry); MetadataUIP uip = mock(MetadataUIP.class); when(uip.getPID()).thenReturn(new PID("uuid:test/ACL")); when(uip.getOperation()).thenReturn(UpdateOperation.REPLACE); when(uip.getOriginalData()).thenReturn(originalMap); when(uip.getModifiedData()).thenReturn(originalMap); when(uip.getIncomingData()).thenReturn(datastreamMap); when(uip.getModifiedFiles()).thenReturn(getModifiedFiles(originalMap)); UIPUpdatePipeline pipeline = mock(UIPUpdatePipeline.class); when(pipeline.processUIP(any(UpdateInformationPackage.class))).thenReturn(uip); processor.setPipeline(pipeline); processor.setVirtualDatastreamMap(new HashMap<String, Datastream>()); DigitalObjectManager digitalObjectManager = mock(DigitalObjectManager.class); processor.setDigitalObjectManager(digitalObjectManager); processor.setOperationsMessageSender(mock(OperationsMessageSender.class)); processor.process(uip); }
@Test public void invalidDatastreamAndMissingContent() throws Exception { AccessClient accessClient = mock(AccessClient.class); when(accessClient.getDatastreamDissemination(any(PID.class), anyString(), anyString())) .thenReturn(null); UIPUpdatePipeline pipeline = mock(UIPUpdatePipeline.class); DigitalObjectManager digitalObjectManager = mock(DigitalObjectManager.class); FedoraObjectUIPProcessor uipProcessor = new FedoraObjectUIPProcessor(); uipProcessor.setAccessClient(accessClient); uipProcessor.setDigitalObjectManager(digitalObjectManager); uipProcessor.setPipeline(pipeline); PID pid = new PID("uuid:test"); Map<String, File> modifiedFiles = new HashMap<String, File>(); modifiedFiles.put(ContentModelHelper.Datastream.MD_DESCRIPTIVE.getName(), mock(File.class)); modifiedFiles.put(ContentModelHelper.Datastream.MD_TECHNICAL.getName(), null); modifiedFiles.put(ContentModelHelper.Datastream.AUDIT.getName(), mock(File.class)); modifiedFiles.put("INVALID", mock(File.class)); FedoraObjectUIP uip = mock(FedoraObjectUIP.class); when(uip.getModifiedFiles()).thenReturn(modifiedFiles); when(uip.getPID()).thenReturn(pid); when(uip.getUser()).thenReturn("testuser"); when(uip.getOperation()).thenReturn(UpdateOperation.ADD); when(pipeline.processUIP(uip)).thenReturn(uip); uipProcessor.process(uip); verify(uip, times(1)).getModifiedFiles(); verify(uip, times(1)).storeOriginalDatastreams(any(AccessClient.class)); verify(digitalObjectManager, times(2)) .addOrReplaceDatastream( any(PID.class), any(Datastream.class), any(File.class), anyString(), anyString(), anyString()); verify(digitalObjectManager, times(1)) .addOrReplaceDatastream( any(PID.class), eq(Datastream.AUDIT), any(File.class), anyString(), anyString(), anyString()); verify(digitalObjectManager, times(1)) .addOrReplaceDatastream( any(PID.class), eq(Datastream.MD_DESCRIPTIVE), any(File.class), anyString(), anyString(), anyString()); // Check reaction to null modified files, shouldn't do any updates when(uip.getModifiedFiles()).thenReturn(null); uipProcessor.process(uip); verify(digitalObjectManager, times(2)) .addOrReplaceDatastream( any(PID.class), any(Datastream.class), any(File.class), anyString(), anyString(), anyString()); }