def setUp(self): SeecrTestCase.setUp(self) self.subject = OaiAddRecord() self.observer = CallTrace('observert') self.observer.getAllMetadataFormats = lambda: [] self.subject.addObserver(self.observer)
def setUp(self): SeecrTestCase.setUp(self) self.subject = OaiAddRecord() self.observer = CallTrace("observert") self.observer.getAllMetadataFormats = lambda: [] self.subject.addObserver(self.observer)
class OaiAddRecordTest(SeecrTestCase): def setUp(self): SeecrTestCase.setUp(self) self.subject = OaiAddRecord() self.observer = CallTrace('observert') self.observer.getAllMetadataFormats = lambda: [] self.subject.addObserver(self.observer) def testAdd(self): lxmlNode = parseLxml('<empty/>') consume(self.subject.add('id', 'partName', lxmlNode)) self.assertEqual(['updateMetadataFormat', 'addOaiRecord'], self.observer.calledMethodNames()) self.assertEqual('id', self.observer.calledMethods[1].kwargs['identifier']) self.assertEqual({ 'prefix': 'partName', 'schema': '', 'namespace': '' }, self.observer.calledMethods[0].kwargs) def testAddSetInfo(self): record = createElement('oai:record') header = createSubElement(record, 'oai:header') createSubElement(header, 'oai:setSpec', text='1') consume(self.subject.add('123', 'oai_dc', record)) self.assertEqual(['updateSet', 'updateMetadataFormat', 'addOaiRecord'], self.observer.calledMethodNames()) self.assertEqual('123', self.observer.calledMethods[2].kwargs['identifier']) self.assertEqual({ 'setSpec': '1', 'setName': '1' }, self.observer.calledMethods[0].kwargs) self.assertEqual( { 'prefix': 'oai_dc', 'schema': '', 'namespace': "http://www.openarchives.org/OAI/2.0/" }, self.observer.calledMethods[1].kwargs) def testAddSetInfoWithElementTree(self): oaiContainer = createElement('oai:PMH') record = createSubElement(oaiContainer, 'oai:record') header = createSubElement(record, 'oai:header') createSubElement(header, 'oai:setSpec', text='1') consume( self.subject.add('123', 'oai_dc', xpathFirst(oaiContainer, '/oai:PMH/oai:record'))) self.assertEqual(['updateSet', 'updateMetadataFormat', 'addOaiRecord'], self.observer.calledMethodNames()) self.assertEqual('123', self.observer.calledMethods[2].kwargs['identifier']) self.assertEqual({ 'setSpec': '1', 'setName': '1' }, self.observer.calledMethods[0].kwargs) self.assertEqual( { 'prefix': 'oai_dc', 'schema': '', 'namespace': "http://www.openarchives.org/OAI/2.0/" }, self.observer.calledMethods[1].kwargs) def testAddElementTree(self): header = parse( StringIO( '<header xmlns="http://www.openarchives.org/OAI/2.0/"><setSpec>1</setSpec></header>' )) consume(self.subject.add('123', 'oai_dc', header)) self.assertEqual(['updateSet', 'updateMetadataFormat', 'addOaiRecord'], self.observer.calledMethodNames()) self.assertEqual('123', self.observer.calledMethods[2].kwargs['identifier']) self.assertEqual({ 'setSpec': '1', 'setName': '1' }, self.observer.calledMethods[0].kwargs) self.assertEqual( { 'prefix': 'oai_dc', 'schema': '', 'namespace': "http://www.openarchives.org/OAI/2.0/" }, self.observer.calledMethods[1].kwargs) def testAddRecognizeNamespace(self): header = '<header xmlns="this.is.not.the.right.ns"><setSpec>%s</setSpec></header>' consume(self.subject.add('123', 'oai_dc', parseLxml(header % 1))) header = '<header xmlns="http://www.openarchives.org/OAI/2.0/"><setSpec>%s</setSpec></header>' consume(self.subject.add('124', 'oai_dc', parseLxml(header % 1))) self.assertEqual([ 'updateMetadataFormat', 'addOaiRecord', 'updateSet', 'updateMetadataFormat', 'addOaiRecord' ], self.observer.calledMethodNames()) self.assertEqual( { 'prefix': 'oai_dc', 'schema': '', 'namespace': 'this.is.not.the.right.ns' }, self.observer.calledMethods[0].kwargs) self.assertEqual( { 'prefix': 'oai_dc', 'schema': '', 'namespace': "http://www.openarchives.org/OAI/2.0/" }, self.observer.calledMethods[3].kwargs) def testMultipleHierarchicalSets(self): spec = "<setSpec>%s</setSpec>" header = '<header xmlns="http://www.openarchives.org/OAI/2.0/">%s</header>' consume( self.subject.add('124', 'oai_dc', parseLxml(header % (spec % '2:3' + spec % '3:4')))) self.assertEqual( ['updateSet', 'updateSet', 'updateMetadataFormat', 'addOaiRecord'], self.observer.calledMethodNames()) self.assertEqual('124', self.observer.calledMethods[3].kwargs['identifier']) self.assertEqual( { 'prefix': 'oai_dc', 'schema': '', 'namespace': "http://www.openarchives.org/OAI/2.0/" }, self.observer.calledMethods[2].kwargs) self.assertEqual({ 'setSpec': '2:3', 'setName': '2:3' }, self.observer.calledMethods[0].kwargs) self.assertEqual({ 'setSpec': '3:4', 'setName': '3:4' }, self.observer.calledMethods[1].kwargs) def testMetadataPrefixes(self): consume( self.subject.add( '456', 'oai_dc', parseLxml( '<oai_dc:dc xmlns:oai_dc="http://oai_dc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \ xsi:schemaLocation="http://oai_dc http://oai_dc/dc.xsd"/>'))) self.assertEqual(['updateMetadataFormat', 'addOaiRecord'], self.observer.calledMethodNames()) self.assertEqual( { 'prefix': 'oai_dc', 'schema': 'http://oai_dc/dc.xsd', 'namespace': 'http://oai_dc' }, self.observer.calledMethods[0].kwargs) consume( self.subject.add( '457', 'dc2', parseLxml('<oai_dc:dc xmlns:oai_dc="http://dc2"/>'))) self.assertEqual([ 'updateMetadataFormat', 'addOaiRecord', 'updateMetadataFormat', 'addOaiRecord' ], self.observer.calledMethodNames()) self.assertEqual( { 'prefix': 'dc2', 'schema': '', 'namespace': 'http://dc2' }, self.observer.calledMethods[2].kwargs) def testMetadataPrefixesFromRootTag(self): consume( self.subject.add( '456', 'oai_dc', parseLxml('''<oai_dc:dc xmlns:oai_dc="http://oai_dc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://other http://other.com/file.xsd http://oai_dc http://oai_dc/dc.xsd"> </oai_dc:dc>'''))) self.assertEqual( { 'prefix': 'oai_dc', 'schema': 'http://oai_dc/dc.xsd', 'namespace': 'http://oai_dc' }, self.observer.calledMethods[0].kwargs) def testIncompletePrefixInfo(self): consume(self.subject.add('457', 'dc2', parseLxml('<oai_dc/>'))) self.assertEqual(2, len(self.observer.calledMethods)) self.assertEqual({ 'prefix': 'dc2', 'schema': '', 'namespace': '' }, self.observer.calledMethods[0].kwargs) self.assertEqual( ['dc2'], self.observer.calledMethods[1].kwargs['metadataPrefixes'])
class OaiAddRecordTest(SeecrTestCase): def setUp(self): SeecrTestCase.setUp(self) self.subject = OaiAddRecord() self.observer = CallTrace("observert") self.observer.getAllMetadataFormats = lambda: [] self.subject.addObserver(self.observer) def testAdd(self): lxmlNode = parseLxml("<empty/>") consume(self.subject.add("id", "partName", lxmlNode)) self.assertEquals(["addOaiRecord"], self.observer.calledMethodNames()) self.assertEquals("id", self.observer.calledMethods[0].kwargs["identifier"]) self.assertEquals([("partName", "", "")], self.observer.calledMethods[0].kwargs["metadataFormats"]) self.assertEquals(set(), self.observer.calledMethods[0].kwargs["sets"]) def testAddSetInfo(self): record = createElement("oai:record") header = createSubElement(record, "oai:header") createSubElement(header, "oai:setSpec", text="1") consume(self.subject.add("123", "oai_dc", record)) self.assertEquals(["addOaiRecord"], self.observer.calledMethodNames()) self.assertEquals("123", self.observer.calledMethods[0].kwargs["identifier"]) self.assertEquals(set([("1", "1")]), self.observer.calledMethods[0].kwargs["sets"]) self.assertEquals( [("oai_dc", "", "http://www.openarchives.org/OAI/2.0/")], self.observer.calledMethods[0].kwargs["metadataFormats"], ) def testAddSetInfoWithElementTree(self): oaiContainer = createElement("oai:PMH") record = createSubElement(oaiContainer, "oai:record") header = createSubElement(record, "oai:header") createSubElement(header, "oai:setSpec", text="1") consume(self.subject.add("123", "oai_dc", xpathFirst(oaiContainer, "/oai:PMH/oai:record"))) self.assertEquals(["addOaiRecord"], self.observer.calledMethodNames()) self.assertEquals("123", self.observer.calledMethods[0].kwargs["identifier"]) self.assertEquals(set([("1", "1")]), self.observer.calledMethods[0].kwargs["sets"]) self.assertEquals( [("oai_dc", "", "http://www.openarchives.org/OAI/2.0/")], self.observer.calledMethods[0].kwargs["metadataFormats"], ) def testAddElementTree(self): header = parse(StringIO('<header xmlns="http://www.openarchives.org/OAI/2.0/"><setSpec>1</setSpec></header>')) consume(self.subject.add("123", "oai_dc", header)) self.assertEquals(["addOaiRecord"], self.observer.calledMethodNames()) self.assertEquals("123", self.observer.calledMethods[0].kwargs["identifier"]) self.assertEquals(set([("1", "1")]), self.observer.calledMethods[0].kwargs["sets"]) self.assertEquals( [("oai_dc", "", "http://www.openarchives.org/OAI/2.0/")], self.observer.calledMethods[0].kwargs["metadataFormats"], ) def testAddRecognizeNamespace(self): header = '<header xmlns="this.is.not.the.right.ns"><setSpec>%s</setSpec></header>' consume(self.subject.add("123", "oai_dc", parseLxml(header % 1))) header = '<header xmlns="http://www.openarchives.org/OAI/2.0/"><setSpec>%s</setSpec></header>' consume(self.subject.add("124", "oai_dc", parseLxml(header % 1))) self.assertEquals(["addOaiRecord", "addOaiRecord"], self.observer.calledMethodNames()) self.assertEquals( [("oai_dc", "", "this.is.not.the.right.ns")], self.observer.calledMethods[0].kwargs["metadataFormats"] ) self.assertEquals( [("oai_dc", "", "http://www.openarchives.org/OAI/2.0/")], self.observer.calledMethods[1].kwargs["metadataFormats"], ) def testMultipleHierarchicalSets(self): spec = "<setSpec>%s</setSpec>" header = '<header xmlns="http://www.openarchives.org/OAI/2.0/">%s</header>' consume(self.subject.add("124", "oai_dc", parseLxml(header % (spec % "2:3" + spec % "3:4")))) self.assertEquals("124", self.observer.calledMethods[0].kwargs["identifier"]) self.assertEquals( [("oai_dc", "", "http://www.openarchives.org/OAI/2.0/")], self.observer.calledMethods[0].kwargs["metadataFormats"], ) self.assertEquals(set([("2:3", "2:3"), ("3:4", "3:4")]), self.observer.calledMethods[0].kwargs["sets"]) def testMetadataPrefixes(self): consume( self.subject.add( "456", "oai_dc", parseLxml( '<oai_dc:dc xmlns:oai_dc="http://oai_dc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \ xsi:schemaLocation="http://oai_dc http://oai_dc/dc.xsd"/>' ), ) ) self.assertEquals( [("oai_dc", "http://oai_dc/dc.xsd", "http://oai_dc")], self.observer.calledMethods[0].kwargs["metadataFormats"], ) consume(self.subject.add("457", "dc2", parseLxml('<oai_dc:dc xmlns:oai_dc="http://dc2"/>'))) self.assertEquals([("dc2", "", "http://dc2")], self.observer.calledMethods[1].kwargs["metadataFormats"]) def testMetadataPrefixesFromRootTag(self): consume( self.subject.add( "456", "oai_dc", parseLxml( """<oai_dc:dc xmlns:oai_dc="http://oai_dc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://other http://other.com/file.xsd http://oai_dc http://oai_dc/dc.xsd"> </oai_dc:dc>""" ), ) ) self.assertEquals( [("oai_dc", "http://oai_dc/dc.xsd", "http://oai_dc")], self.observer.calledMethods[0].kwargs["metadataFormats"], ) def testIncompletePrefixInfo(self): consume(self.subject.add("457", "dc2", parseLxml("<oai_dc/>"))) self.assertEquals([("dc2", "", "")], self.observer.calledMethods[0].kwargs["metadataFormats"])