def test_0harvester_url_error(self):
     self.harv = MetadataHarvester()
     self.harv.config = "{}"
     harvest_job = HarvestJob()
     harvest_job.source = HarvestSource()
     harvest_job.source.title = "Test"
     harvest_job.source.url = "http://foo"
     harvest_job.source.type = "Metadata"
     urllib2.urlopen = realopen
     self.assert_(self.harv.gather_stage(harvest_job) == None)
 def test_harvester_1gather_ddi(self):
     self.harv = MetadataHarvester()
     self.harv.config = "{}"
     harvest_job = HarvestJob()
     harvest_job.source = HarvestSource()
     harvest_job.source.title = "Test"
     harvest_job.source.url = "http://foo"
     harvest_job.source.type = "Metadata"
     urllib2.urlopen = mock.Mock(side_effect=self._side_effect_ddi_datas)
     self.gathered = self.harv.gather_stage(harvest_job)
     self.assert_(len(self.gathered) == 1)
     self.assert_(isinstance(self.harv.harvester, DDIHarvester))
 def test_harvester_4gather_oaipmh(self):
     self.harv = MetadataHarvester()
     self.harv.config = "{}"
     harvest_job = HarvestJob()
     harvest_job.source = HarvestSource()
     harvest_job.source.title = "Test"
     harvest_job.source.url = "http://foo"
     harvest_job.source.type = "Metadata"
     client = CKANServer()
     metadata_registry = metadata.MetadataRegistry()
     metadata_registry.registerReader('oai_dc', oai_dc_reader)
     metadata_registry.registerWriter('oai_dc', oai_dc_writer)
     serv = BatchingServer(client, metadata_registry=metadata_registry)
     oaipmh.client.Client = mock.Mock(return_value=ServerClient(serv, metadata_registry))
     self.gathered = self.harv.gather_stage(harvest_job)
     self.assert_(len(self.gathered) > 1)
     self.assert_(isinstance(self.harv.harvester, OAIPMHHarvester))
 def test_harvester(self):
     harv = MetadataHarvester()
     self.assert_(harv)
     self.assert_(isinstance(harv.info(), dict))
class TestUniversalHarvester(unittest.TestCase, FunctionalTestCase):

    num_side_effect = 1
    gathered = None
    harv = None

    @classmethod
    def setup_class(self):
        CreateTestData.create()
        setup()

    @classmethod
    def teardown_class(self):
        Session.remove()

    def test_harvester(self):
        harv = MetadataHarvester()
        self.assert_(harv)
        self.assert_(isinstance(harv.info(), dict))

    def test_0harvester_url_error(self):
        self.harv = MetadataHarvester()
        self.harv.config = "{}"
        harvest_job = HarvestJob()
        harvest_job.source = HarvestSource()
        harvest_job.source.title = "Test"
        harvest_job.source.url = "http://foo"
        harvest_job.source.type = "Metadata"
        urllib2.urlopen = realopen
        self.assert_(self.harv.gather_stage(harvest_job) == None)

    def _side_effect_ddi_datas(self, foo):
        if self.num_side_effect == 1:
            self.num_side_effect = 2
            return StringIO(testdata.test_ddi_data)
        if self.num_side_effect == 2:
            self.num_side_effect = 1
            return StringIO(testdata.test_ddi_data)

    def test_harvester_1gather_ddi(self):
        self.harv = MetadataHarvester()
        self.harv.config = "{}"
        harvest_job = HarvestJob()
        harvest_job.source = HarvestSource()
        harvest_job.source.title = "Test"
        harvest_job.source.url = "http://foo"
        harvest_job.source.type = "Metadata"
        urllib2.urlopen = mock.Mock(side_effect=self._side_effect_ddi_datas)
        self.gathered = self.harv.gather_stage(harvest_job)
        self.assert_(len(self.gathered) == 1)
        self.assert_(isinstance(self.harv.harvester, DDIHarvester))

    def test_harvester_2fetch_ddi(self):
        self.test_harvester_1gather_ddi()
        harvobj = HarvestObject.get(self.gathered[0])
        urllib2.urlopen = mock.Mock(return_value=StringIO(testdata.test_ddi_xml))
        self.assert_(self.harv.fetch_stage(harvobj))

    def test_harvester_3import_ddi(self):
        self.test_harvester_1gather_ddi()
        self.test_harvester_2fetch_ddi()
        harvest_object = HarvestObject.get(self.gathered[0])
        self.assert_(self.harv.import_stage(harvest_object))

    def test_harvester_4gather_oaipmh(self):
        self.harv = MetadataHarvester()
        self.harv.config = "{}"
        harvest_job = HarvestJob()
        harvest_job.source = HarvestSource()
        harvest_job.source.title = "Test"
        harvest_job.source.url = "http://foo"
        harvest_job.source.type = "Metadata"
        client = CKANServer()
        metadata_registry = metadata.MetadataRegistry()
        metadata_registry.registerReader('oai_dc', oai_dc_reader)
        metadata_registry.registerWriter('oai_dc', oai_dc_writer)
        serv = BatchingServer(client, metadata_registry=metadata_registry)
        oaipmh.client.Client = mock.Mock(return_value=ServerClient(serv, metadata_registry))
        self.gathered = self.harv.gather_stage(harvest_job)
        self.assert_(len(self.gathered) > 1)
        self.assert_(isinstance(self.harv.harvester, OAIPMHHarvester))

    def test_harvester_5fetch_oaipmh(self):
        self.test_harvester_4gather_oaipmh()
        harvest_object = HarvestObject.get(self.gathered[0])
        self.assert_(self.harv.fetch_stage(harvest_object))

    def test_harvester_6import_oaipmh(self):
        self.test_harvester_4gather_oaipmh()
        self.test_harvester_5fetch_oaipmh()
        harvest_object = HarvestObject.get(self.gathered[0])
        self.assert_(self.harv.import_stage(harvest_object))