def setUp(self):
     self.repo = Repository(FEDORA_ROOT, FEDORA_USER, FEDORA_PASSWORD)
     # NOTE: queries require RI flush=True or test objects will not show up in RI
     self.repo.risearch.RISEARCH_FLUSH_ON_QUERY = True
     self.opener = self.repo.opener
     self.api = ApiFacade(self.opener)
     fixtures = getattr(self, 'fixtures', [])
     for fixture in fixtures:
         self.ingestFixture(fixture)
class FedoraTestCase(unittest.TestCase):
    def __init__(self, *args, **kwargs):
        unittest.TestCase.__init__(self, *args, **kwargs)
        self.fedora_fixtures_ingested = []

    def setUp(self):
        self.repo = Repository(FEDORA_ROOT, FEDORA_USER, FEDORA_PASSWORD)
        # NOTE: queries require RI flush=True or test objects will not show up in RI
        self.repo.risearch.RISEARCH_FLUSH_ON_QUERY = True
        self.opener = self.repo.opener
        self.api = ApiFacade(self.opener)
        fixtures = getattr(self, 'fixtures', [])
        for fixture in fixtures:
            self.ingestFixture(fixture)

    def tearDown(self):
        for pid in self.fedora_fixtures_ingested:
            self.repo.purge_object(pid)

    def getNextPid(self):
        pidspace = getattr(self, 'pidspace', None)
        return self.repo.get_next_pid(namespace=pidspace)

    def loadFixtureData(self, fname):
        data = load_fixture_data(fname)
        # if pidspace is specified, get a new pid from fedora and set it as the pid in the xml 
        if hasattr(self, 'pidspace'):
            xml = xmlmap.load_xmlobject_from_string(data, _MinimalFoxml)            
            xml.pid = self.getNextPid()
            return xml.serialize()
        else:
            return data

    def ingestFixture(self, fname):
        object = self.loadFixtureData(fname)
        pid = self.repo.ingest(object)
        if pid:
            # we'd like this always to be true. if ingest fails we should
            # throw an exception. that probably hasn't been thoroughly
            # tested yet, though, so we'll check it until it has been.
            self.append_test_pid(pid)

    def append_test_pid(self, pid):
            self.fedora_fixtures_ingested.append(pid)
 def test_badhostname(self):
     self.ingestFixture('object-with-pid.foxml')
     pid = self.fedora_fixtures_ingested[0]
     repo = Repository('http://bogus.host.name.foo:8080/fedora/')
     # TODO: currently just a URLError; make test more specific if we add more specific exceptions
     self.assertRaises(Exception, list, repo.find_objects(pid=pid))
 def test_nonssl(self):
     self.ingestFixture('object-with-pid.foxml')
     pid = self.fedora_fixtures_ingested[0]
     repo = Repository(FEDORA_ROOT_NONSSL)
     found = list(repo.find_objects(pid=pid))
     self.assertEqual(1, len(found))