You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
3.2 KiB

# -*- coding: utf-8 -*-
import unittest
import os
import dotdot
import fake_env
from pubs import content, filebroker, databroker, datacache
from pubs.config import conf
import str_fixtures
from pubs import endecoder
class TestDataBroker(fake_env.TestFakeFs):
def test_databroker(self):
ende = endecoder.EnDecoder()
page99_metadata = ende.decode_metadata(str_fixtures.metadata_raw0)
page99_bibentry = ende.decode_bibdata(str_fixtures.bibtex_raw0)
for db_class in [databroker.DataBroker, datacache.DataCache]:
self.reset_fs()
db = db_class('tmp', 'tmp/doc', create=True)
db.push_metadata('citekey1', page99_metadata)
self.assertFalse(db.exists('citekey1', meta_check=True))
self.assertFalse(db.exists('citekey1', meta_check=False))
db.push_bibentry('citekey1', page99_bibentry)
self.assertTrue(db.exists('citekey1', meta_check=False))
self.assertTrue(db.exists('citekey1', meta_check=True))
self.assertEqual(db.pull_metadata('citekey1'), page99_metadata)
pulled = db.pull_bibentry('citekey1')['Page99']
for key, value in pulled.items():
self.assertEqual(pulled[key], page99_bibentry['Page99'][key])
self.assertEqual(db.pull_bibentry('citekey1'), page99_bibentry)
def test_existing_data(self):
ende = endecoder.EnDecoder()
page99_bibentry = ende.decode_bibdata(str_fixtures.bibtex_raw0)
for db_class in [databroker.DataBroker, datacache.DataCache]:
self.reset_fs()
self.fs.add_real_directory(os.path.join(self.rootpath, 'testrepo'), read_only=False)
db = db_class('testrepo', 'testrepo/doc', create=False)
self.assertEqual(db.pull_bibentry('Page99'), page99_bibentry)
for citekey in ['10.1371_journal.pone.0038236',
'10.1371journal.pone.0063400',
'journal0063400']:
db.pull_bibentry(citekey)
db.pull_metadata(citekey)
with self.assertRaises(IOError):
db.pull_bibentry('citekey')
with self.assertRaises(IOError):
db.pull_metadata('citekey')
db.add_doc('Larry99', 'docsdir://Page99.pdf')
self.assertTrue(content.check_file('testrepo/doc/Page99.pdf', fail=False))
self.assertTrue(content.check_file('testrepo/doc/Larry99.pdf', fail=False))
11 years ago
db.remove_doc('docsdir://Page99.pdf')
def test_push_pull_cache(self):
db = databroker.DataBroker('tmp', 'tmp/doc', create=True)
data_in = {'a': 1}
db.push_cache('meta', data_in)
data_out = db.pull_cache('meta')
self.assertEqual(data_in, data_out)
def test_pull_cache_fails_on_version_mismatch(self):
db = databroker.DataBroker('tmp', 'tmp/doc', create=True)
data_in = {'a': 1}
db.push_cache('meta', data_in)
ver = databroker.__version__
databroker.__version__ = '0.0.0'
try:
with self.assertRaises(ValueError):
db.pull_cache('meta')
finally:
databroker.__version__ = ver
if __name__ == '__main__':
unittest.main()