FIXES test_repo.

Removes 'id' entry from bibdata.
Fixes bug introduced in repo.
main
Olivier Mangin 11 years ago
parent c299874146
commit e4a25abcfb

@ -24,6 +24,8 @@ class Paper(object):
self.bibdata = bibdata
_, self.bibentry = bibstruct.get_entry(self.bibdata)
if 'id' in self.bibentry:
self.bibentry.pop('id')
if self.metadata is None:
self.metadata = copy.deepcopy(DEFAULT_META)

@ -65,7 +65,7 @@ class Repository(object):
"""
bibstruct.check_citekey(paper.citekey)
if (not overwrite) and (self.databroker.exists(paper.citekey, both=False)
or (citekey in self)):
or (paper.citekey in self)):
raise CiteKeyCollision('citekey {} already in use'.format(paper.citekey))
self.databroker.push_bibdata(paper.citekey, paper.bibdata)

@ -1,16 +1,24 @@
import unittest
import tempfile
import shutil
import os
import dotdot
import fake_env
import fixtures
from pubs.repo import (Repository, _base27,
CiteKeyCollision)
from pubs.paper import PaperInRepo
from pubs import configs, files
from pubs.repo import Repository, _base27, CiteKeyCollision, InvalidReference
from pubs.paper import Paper
from pubs import configs
class TestRepo(fake_env.TestFakeFs):
def setUp(self):
super(TestRepo, self).setUp()
self.repo = Repository(configs.Config(), create=True)
self.repo.push_paper(Paper(fixtures.turing_bibdata))
class TestCitekeyGeneration(TestRepo):
class TestCitekeyGeneration(unittest.TestCase):
def test_string_increment(self):
self.assertEqual(_base27(0), '')
for i in range(26):
@ -18,164 +26,54 @@ class TestCitekeyGeneration(unittest.TestCase):
self.assertEqual(_base27(26 + i + 1), 'a' + chr(97 + i))
def test_generated_key_is_unique(self):
repo = Repository(configs.Config(), load=False)
repo.citekeys = ['Turing1950', 'Doe2003']
c = repo.generate_citekey(fixtures.turing1950)
repo.citekeys.append('Turing1950a')
c = repo.generate_citekey(fixtures.turing1950)
self.assertEqual(c, 'Turing1950b')
class TestRepo(unittest.TestCase):
def setUp(self):
self.tmpdir = tempfile.mkdtemp()
self.repo = Repository(configs.Config(pubs_dir=self.tmpdir), load=False)
self.repo.save()
self.repo.add_paper(fixtures.turing1950)
self.repo.push_paper(Paper(fixtures.doe_bibdata))
c = self.repo.unique_citekey('Doe2013')
self.repo.push_paper(Paper(fixtures.doe_bibdata, citekey='Doe2013a'))
c = self.repo.unique_citekey('Doe2013')
self.assertEqual(c, 'Doe2013b')
def tearDown(self):
shutil.rmtree(self.tmpdir)
class TestAddPaper(TestRepo):
class TestPushPaper(TestRepo):
def test_raises_value_error_on_existing_key(self):
with self.assertRaises(CiteKeyCollision):
self.repo.add_paper(fixtures.turing1950)
self.repo.push_paper(Paper(fixtures.turing_bibdata))
def test_saves_bib(self):
self.assertEqual(files.clean_path(self.tmpdir, BIB_DIR),
files.clean_path(self.repo.bib_dir))
self.assertTrue(os.path.exists(os.path.join(self.repo.bib_dir,
'Turing1950.bibyaml')))
def test_pushes_paper_bibdata(self):
orig = fixtures.doe_bibdata
self.repo.push_paper(Paper(orig))
retrieved = self.repo.databroker.pull_bibdata('Doe2013')
retrieved['Doe2013'].pop('id')
self.assertEquals(orig, retrieved)
def test_saves_meta(self):
self.assertEqual(files.clean_path(self.tmpdir, META_DIR),
files.clean_path(self.repo.meta_dir))
self.assertTrue(os.path.exists(os.path.join(self.repo.meta_dir,
'Turing1950.meta')))
def test_pushes_paper_metadata(self):
orig = {'docfile': 'dummy', 'tags': set(['tag', 'another'])}
self.repo.push_paper(Paper(fixtures.doe_bibdata, metadata=orig))
retrieved = self.repo.databroker.pull_metadata('Doe2013')
self.assertEquals(orig, retrieved)
class TestUpdatePaper(TestRepo):
def test_raises_value_error_on_unknown_paper(self):
with self.assertRaises(ValueError):
self.repo.save_paper(fixtures.doe2013)
with self.assertRaises(ValueError):
self.repo.save_paper(fixtures.doe2013, 'zou')
def test_error_on_existing_destination(self):
self.repo.add_paper(fixtures.doe2013)
with self.assertRaises(CiteKeyCollision):
self.repo.save_paper(fixtures.turing1950, old_citekey='Doe2013')
def test_updates_same_key(self):
new = self.repo.get_paper('Turing1950')
new.bibentry.fields['journal'] = u'Mind'
self.repo.save_paper(new)
self.assertEqual(new, self.repo.get_paper('Turing1950'))
def test_updates_same_key_with_old_arg(self):
new = self.repo.get_paper('Turing1950')
new.bibentry.fields['journal'] = u'Mind'
self.repo.save_paper(new, old_citekey='Turing1950')
self.assertEqual(new, self.repo.get_paper('Turing1950'))
new = self.repo.pull_paper('turing1950computing')
new.bibentry['year'] = '51'
self.repo.push_paper(new, overwrite=True)
self.assertEqual(new, self.repo.pull_paper('turing1950computing'))
def test_update_new_key_removes_old(self):
self.repo.add_paper(fixtures.doe2013)
fixtures.doe2013.update(key='JohnDoe2003')
self.repo.save_paper(fixtures.doe2013, old_citekey='Doe2013')
self.assertFalse('Doe2013' in self.repo)
paper = self.repo.pull_paper('turing1950computing')
self.repo.rename_paper(paper, 'Turing1950')
with self.assertRaises(InvalidReference):
self.repo.pull_paper('turing1950computing')
self.assertNotIn('turing1950computing', self.repo)
def test_update_new_key_updates(self):
# self.repo.rename(fixtures.doe2013, old_citekey='Turing1950')
fixtures.doe2013.citekey = 'Doe2013'
self.repo.add_paper(fixtures.doe2013)
self.assertTrue('Doe2013' in self.repo)
self.assertEqual(self.repo.get_paper('Doe2013'),
PaperInRepo.from_paper(fixtures.doe2013, self.repo))
def test_update_new_key_moves_doc(self):
self.repo.import_document('Turing1950',
os.path.join(os.path.dirname(__file__),
'data/pagerank.pdf'))
paper = self.repo.get_paper('Turing1950')
paper.update('Doe2003')
self.repo.save_paper(paper, old_citekey='Turing1950')
self.assertFalse(os.path.exists(os.path.join(
self.repo.doc_dir, 'Turing1950.pdf')))
self.assertTrue(os.path.exists(os.path.join(
self.repo.doc_dir, 'Doe2003.pdf')))
class TestSaveLoad(unittest.TestCase):
paper = self.repo.pull_paper('turing1950computing')
self.repo.rename_paper(paper, 'Turing1950')
self.assertEqual(paper, self.repo.pull_paper('Turing1950'))
def setUp(self):
self.tmpdir = tempfile.mkdtemp()
os.makedirs(os.path.join(self.tmpdir, 'bibdata'))
os.makedirs(os.path.join(self.tmpdir, 'meta'))
self.bibfile = os.path.join(self.tmpdir, 'bib.bibyaml')
with open(self.bibfile, 'w') as f:
f.write(BIB)
self.metafile = os.path.join(self.tmpdir, 'meta.meta')
with open(self.metafile, 'w') as f:
f.write(META)
self.dest_bibfile = os.path.join(self.tmpdir, 'written_bib.yaml')
self.dest_metafile = os.path.join(self.tmpdir, 'written_meta.yaml')
def test_load_valid(self):
p = Paper.load(self.bibfile, metapath=self.metafile)
self.assertEqual(fixtures.turing1950, p)
def test_save_fails_with_no_citekey(self):
p = Paper()
with self.assertRaises(ValueError):
p.save(self.dest_bibfile, self.dest_metafile)
def test_save_creates_bib(self):
fixtures.turing1950.save(self.dest_bibfile, self.dest_metafile)
self.assertTrue(os.path.exists(self.dest_bibfile))
def test_save_creates_meta(self):
fixtures.turing1950.save(self.dest_bibfile, self.dest_metafile)
self.assertTrue(os.path.exists(self.dest_metafile))
def test_save_right_bib(self):
fixtures.turing1950.save(self.dest_bibfile, self.dest_metafile)
with open(self.dest_bibfile, 'r') as f:
written = yaml.load(f)
ok = yaml.load(BIB)
self.assertEqual(written, ok)
def test_save_right_meta(self):
fixtures.turing1950.save(self.dest_bibfile, self.dest_metafile)
with open(self.dest_metafile, 'r') as f:
written = yaml.load(f)
ok = yaml.load(META)
self.assertEqual(written, ok)
def tearDown(self):
shutil.rmtree(self.tmpdir)
class TestCopy(unittest.TestCase):
def setUp(self):
self.orig = Paper()
self.orig.bibentry.fields['title'] = u'Nice title.'
self.orig.bibentry.fields['year'] = u'2013'
self.orig.bibentry.persons['author'] = [Person(u'John Doe')]
self.orig.citekey = self.orig.generate_citekey()
def test_copy_equal(self):
copy = self.orig.copy()
self.assertEqual(copy, self.orig)
def test_copy_can_be_changed(self):
copy = self.orig.copy()
copy.bibentry.fields['year'] = 2014
self.assertEqual(self.orig.bibentry.fields['year'], u'2013')
# TODO: should also check that associated files are updated
if __name__ == '__main__':

Loading…
Cancel
Save