def testAddDelete(self):
        env = Environment(root=self.harvesterDataDir)
        open(join(self.httpDataDir, 'oai-testAddDelete'), 'w').write(TESTADDDELETE_ADD)

        repo = env.addRepository(name="repo-addDelete", 
            baseUrl="http://localhost:%s/oai-testAddDelete" % self.httpPortNumber, 
            metadataPrefix="rdf", 
            setSpec="aset", 
            active=True, 
            apiKey=self.apiKeyForTestUser)
        self.assertTrue(repo.active)

        self.assertQuery(0, "testAddDelete")
        process(self.config) 

        repo = env.getRepository(name=repo.name)  # reload for state change
        self.assertFalse(repo.active)
        repo.active = True
        repo.save()
        self.assertQuery(1, "testAddDelete")

        open(join(self.httpDataDir, 'oai-testAddDelete'), 'w').write(TESTADDDELETE_DELETE)
        process(self.config) 
        self.assertQuery(0, "testAddDelete")
class EnvironmentTest(SeecrTestCase):
    
    def setUp(self):
        SeecrTestCase.setUp(self)
        self.env = Environment(root=join(self.tempdir, 'db'))

    def testCreateDir(self):
        self.assertTrue(isdir(self.env._root))

    def testWriteFile(self):
        self.assertFalse(isfile(join(self.env._root, "example_repo", 'config.json')))
        self.env.addRepository(name="example_repo", baseUrl="http://example.org/oai", metadataPrefix="oai_dc", setSpec="aset", active=True, apiKey="an api key")
        self.assertTrue(isfile(join(self.env._root, "example_repo", 'config.json')))

    def testGetReadFile(self):
        repo = self.env.addRepository(name="example_repo", baseUrl="http://example.org/oai", metadataPrefix="oai_dc", setSpec="aset", active=True, apiKey="an api key")
        repo2 = self.env.getRepository(name='example_repo')

        self.assertEquals(repo, repo2)
        self.assertEquals(repo.active, repo2.active)

    def testRepositories(self):
        self.assertEquals([], list(self.env.getRepositories()))
        repository = self.env.addRepository(name="test", baseUrl="test", metadataPrefix="test", setSpec="test", active=True, apiKey="inspiration")
        repositories = list(self.env.getRepositories())
        self.assertEquals([repository], repositories)

    def testRepositoriesOnlyWhenThereIsAConfig(self):
        self.assertEquals([], list(self.env.getRepositories()))
        open(join(self.tempdir, "db", "junk"), 'w').write("")
        self.assertEquals([], list(self.env.getRepositories()))

    def testDefaultValues(self):
        repository = self.env.addRepository(name="test")
        self.assertEquals('', repository.baseUrl)
        self.assertEquals('', repository.metadataPrefix)
        self.assertEquals('', repository.setSpec)
        self.assertEquals('', repository.apiKey)
        self.assertEquals(False, repository.active)

    def testDeleteRepository(self):
        repository = self.env.addRepository(name="test")
        repositories = list(self.env.getRepositories())
        self.assertEquals([repository], repositories)
        self.env.deleteRepository(name="test")
        repositories = list(self.env.getRepositories())
        self.assertEquals([], repositories)

    def testHarvestStatePersistent(self):
        repository = self.env.addRepository(name='test')
        repository.resumptionToken = 'xyz'
        repository.lastHarvest = 12345
        repository.save()
        repositoryRevisited = self.env.getRepository(name='test')
        self.assertEquals('xyz', repositoryRevisited.resumptionToken)
        self.assertEquals(12345, repositoryRevisited.lastHarvest)

    def testErrorLog(self):
        repository = self.env.addRepository(name='test')
        self.assertEquals("", repository.readErrorLog())

        repository.logException(Exception("boo"))
        self.assertEquals("boo", repository.readErrorLog())