FIXES test_repo.
Removes 'id' entry from bibdata. Fixes bug introduced in repo.
This commit is contained in:
parent
c299874146
commit
e4a25abcfb
@ -24,6 +24,8 @@ class Paper(object):
|
|||||||
self.bibdata = bibdata
|
self.bibdata = bibdata
|
||||||
|
|
||||||
_, self.bibentry = bibstruct.get_entry(self.bibdata)
|
_, self.bibentry = bibstruct.get_entry(self.bibdata)
|
||||||
|
if 'id' in self.bibentry:
|
||||||
|
self.bibentry.pop('id')
|
||||||
|
|
||||||
if self.metadata is None:
|
if self.metadata is None:
|
||||||
self.metadata = copy.deepcopy(DEFAULT_META)
|
self.metadata = copy.deepcopy(DEFAULT_META)
|
||||||
|
@ -65,7 +65,7 @@ class Repository(object):
|
|||||||
"""
|
"""
|
||||||
bibstruct.check_citekey(paper.citekey)
|
bibstruct.check_citekey(paper.citekey)
|
||||||
if (not overwrite) and (self.databroker.exists(paper.citekey, both=False)
|
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))
|
raise CiteKeyCollision('citekey {} already in use'.format(paper.citekey))
|
||||||
|
|
||||||
self.databroker.push_bibdata(paper.citekey, paper.bibdata)
|
self.databroker.push_bibdata(paper.citekey, paper.bibdata)
|
||||||
|
@ -1,16 +1,24 @@
|
|||||||
import unittest
|
import unittest
|
||||||
import tempfile
|
|
||||||
import shutil
|
|
||||||
import os
|
|
||||||
|
|
||||||
|
import dotdot
|
||||||
|
import fake_env
|
||||||
import fixtures
|
import fixtures
|
||||||
from pubs.repo import (Repository, _base27,
|
|
||||||
CiteKeyCollision)
|
from pubs.repo import Repository, _base27, CiteKeyCollision, InvalidReference
|
||||||
from pubs.paper import PaperInRepo
|
from pubs.paper import Paper
|
||||||
from pubs import configs, files
|
from pubs import configs
|
||||||
|
|
||||||
|
|
||||||
class TestCitekeyGeneration(unittest.TestCase):
|
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):
|
||||||
|
|
||||||
def test_string_increment(self):
|
def test_string_increment(self):
|
||||||
self.assertEqual(_base27(0), '')
|
self.assertEqual(_base27(0), '')
|
||||||
for i in range(26):
|
for i in range(26):
|
||||||
@ -18,164 +26,54 @@ class TestCitekeyGeneration(unittest.TestCase):
|
|||||||
self.assertEqual(_base27(26 + i + 1), 'a' + chr(97 + i))
|
self.assertEqual(_base27(26 + i + 1), 'a' + chr(97 + i))
|
||||||
|
|
||||||
def test_generated_key_is_unique(self):
|
def test_generated_key_is_unique(self):
|
||||||
repo = Repository(configs.Config(), load=False)
|
self.repo.push_paper(Paper(fixtures.doe_bibdata))
|
||||||
repo.citekeys = ['Turing1950', 'Doe2003']
|
c = self.repo.unique_citekey('Doe2013')
|
||||||
c = repo.generate_citekey(fixtures.turing1950)
|
self.repo.push_paper(Paper(fixtures.doe_bibdata, citekey='Doe2013a'))
|
||||||
repo.citekeys.append('Turing1950a')
|
c = self.repo.unique_citekey('Doe2013')
|
||||||
c = repo.generate_citekey(fixtures.turing1950)
|
self.assertEqual(c, 'Doe2013b')
|
||||||
self.assertEqual(c, 'Turing1950b')
|
|
||||||
|
|
||||||
|
|
||||||
class TestRepo(unittest.TestCase):
|
class TestPushPaper(TestRepo):
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
def tearDown(self):
|
|
||||||
shutil.rmtree(self.tmpdir)
|
|
||||||
|
|
||||||
|
|
||||||
class TestAddPaper(TestRepo):
|
|
||||||
|
|
||||||
def test_raises_value_error_on_existing_key(self):
|
def test_raises_value_error_on_existing_key(self):
|
||||||
with self.assertRaises(CiteKeyCollision):
|
with self.assertRaises(CiteKeyCollision):
|
||||||
self.repo.add_paper(fixtures.turing1950)
|
self.repo.push_paper(Paper(fixtures.turing_bibdata))
|
||||||
|
|
||||||
def test_saves_bib(self):
|
def test_pushes_paper_bibdata(self):
|
||||||
self.assertEqual(files.clean_path(self.tmpdir, BIB_DIR),
|
orig = fixtures.doe_bibdata
|
||||||
files.clean_path(self.repo.bib_dir))
|
self.repo.push_paper(Paper(orig))
|
||||||
self.assertTrue(os.path.exists(os.path.join(self.repo.bib_dir,
|
retrieved = self.repo.databroker.pull_bibdata('Doe2013')
|
||||||
'Turing1950.bibyaml')))
|
retrieved['Doe2013'].pop('id')
|
||||||
|
self.assertEquals(orig, retrieved)
|
||||||
|
|
||||||
def test_saves_meta(self):
|
def test_pushes_paper_metadata(self):
|
||||||
self.assertEqual(files.clean_path(self.tmpdir, META_DIR),
|
orig = {'docfile': 'dummy', 'tags': set(['tag', 'another'])}
|
||||||
files.clean_path(self.repo.meta_dir))
|
self.repo.push_paper(Paper(fixtures.doe_bibdata, metadata=orig))
|
||||||
self.assertTrue(os.path.exists(os.path.join(self.repo.meta_dir,
|
retrieved = self.repo.databroker.pull_metadata('Doe2013')
|
||||||
'Turing1950.meta')))
|
self.assertEquals(orig, retrieved)
|
||||||
|
|
||||||
|
|
||||||
class TestUpdatePaper(TestRepo):
|
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):
|
def test_updates_same_key(self):
|
||||||
new = self.repo.get_paper('Turing1950')
|
new = self.repo.pull_paper('turing1950computing')
|
||||||
new.bibentry.fields['journal'] = u'Mind'
|
new.bibentry['year'] = '51'
|
||||||
self.repo.save_paper(new)
|
self.repo.push_paper(new, overwrite=True)
|
||||||
self.assertEqual(new, self.repo.get_paper('Turing1950'))
|
self.assertEqual(new, self.repo.pull_paper('turing1950computing'))
|
||||||
|
|
||||||
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'))
|
|
||||||
|
|
||||||
def test_update_new_key_removes_old(self):
|
def test_update_new_key_removes_old(self):
|
||||||
self.repo.add_paper(fixtures.doe2013)
|
paper = self.repo.pull_paper('turing1950computing')
|
||||||
fixtures.doe2013.update(key='JohnDoe2003')
|
self.repo.rename_paper(paper, 'Turing1950')
|
||||||
self.repo.save_paper(fixtures.doe2013, old_citekey='Doe2013')
|
with self.assertRaises(InvalidReference):
|
||||||
self.assertFalse('Doe2013' in self.repo)
|
self.repo.pull_paper('turing1950computing')
|
||||||
|
self.assertNotIn('turing1950computing', self.repo)
|
||||||
|
|
||||||
def test_update_new_key_updates(self):
|
def test_update_new_key_updates(self):
|
||||||
# self.repo.rename(fixtures.doe2013, old_citekey='Turing1950')
|
paper = self.repo.pull_paper('turing1950computing')
|
||||||
fixtures.doe2013.citekey = 'Doe2013'
|
self.repo.rename_paper(paper, 'Turing1950')
|
||||||
self.repo.add_paper(fixtures.doe2013)
|
self.assertEqual(paper, self.repo.pull_paper('Turing1950'))
|
||||||
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):
|
# TODO: should also check that associated files are updated
|
||||||
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):
|
|
||||||
|
|
||||||
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')
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
Loading…
x
Reference in New Issue
Block a user