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.
96 lines
3.5 KiB
96 lines
3.5 KiB
import unittest
|
|
from datetime import datetime
|
|
|
|
import dotdot
|
|
import fake_env
|
|
import fixtures
|
|
|
|
from pubs.repo import Repository, _base27, CiteKeyCollision, CiteKeyNotFound
|
|
from pubs.paper import Paper
|
|
from pubs import config
|
|
|
|
|
|
class TestRepo(fake_env.TestFakeFs):
|
|
|
|
def setUp(self):
|
|
super(TestRepo, self).setUp()
|
|
default_conf = config.load_default_conf()
|
|
self.repo = Repository(default_conf, create=True)
|
|
self.repo.push_paper(Paper.from_bibentry(fixtures.turing_bibentry))
|
|
|
|
|
|
class TestCitekeyGeneration(TestRepo):
|
|
|
|
def test_string_increment(self):
|
|
self.assertEqual(_base27(0), '')
|
|
for i in range(26):
|
|
self.assertEqual(_base27(i + 1), chr(97 + i))
|
|
self.assertEqual(_base27(26 + i + 1), 'a' + chr(97 + i))
|
|
|
|
def test_generated_key_is_unique(self):
|
|
self.repo.push_paper(Paper.from_bibentry(fixtures.doe_bibentry))
|
|
c = self.repo.unique_citekey('Doe2013', fixtures.doe_bibentry)
|
|
self.repo.push_paper(Paper.from_bibentry(fixtures.doe_bibentry,
|
|
citekey='Doe2013a'))
|
|
c = self.repo.unique_citekey('Doe2013', fixtures.doe_bibentry)
|
|
self.assertEqual(c, 'Doe2013b')
|
|
c = self.repo.unique_citekey('bla/bla', fixtures.doe_bibentry)
|
|
self.assertEqual(c, 'Doe2013b')
|
|
|
|
|
|
class TestPushPaper(TestRepo):
|
|
|
|
def test_raises_value_error_on_existing_key(self):
|
|
with self.assertRaises(CiteKeyCollision):
|
|
self.repo.push_paper(Paper.from_bibentry(fixtures.turing_bibentry))
|
|
|
|
def test_pushes_paper_bibdata(self):
|
|
orig = fixtures.doe_bibentry
|
|
self.repo.push_paper(Paper.from_bibentry(orig))
|
|
retrieved = self.repo.databroker.pull_bibentry('Doe2013')
|
|
self.assertEqual(orig, retrieved)
|
|
|
|
def test_pushes_paper_metadata(self):
|
|
orig = {'docfile': 'dummy', 'tags': set(['tag', 'another']),
|
|
'added': datetime(2012, 12, 12, 12, 12, 12, 12)}
|
|
self.repo.push_paper(Paper.from_bibentry(fixtures.doe_bibentry,
|
|
metadata=orig))
|
|
retrieved = self.repo.databroker.pull_metadata('Doe2013')
|
|
self.assertEqual(orig, retrieved)
|
|
|
|
def test_pushes_paper_metadata_set_added(self):
|
|
orig = {'docfile': 'dummy', 'tags': set(['tag', 'another'])}
|
|
now = datetime.now()
|
|
self.repo.push_paper(Paper.from_bibentry(fixtures.doe_bibentry,
|
|
metadata=orig))
|
|
retrieved = self.repo.databroker.pull_metadata('Doe2013')
|
|
self.assertIn('added', retrieved)
|
|
self.assertTrue(now < retrieved['added'])
|
|
|
|
|
|
class TestUpdatePaper(TestRepo):
|
|
|
|
def test_updates_same_key(self):
|
|
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):
|
|
paper = self.repo.pull_paper('turing1950computing')
|
|
self.repo.rename_paper(paper, 'Turing1950')
|
|
with self.assertRaises(CiteKeyNotFound):
|
|
self.repo.pull_paper('turing1950computing')
|
|
self.assertNotIn('turing1950computing', self.repo)
|
|
|
|
def test_update_new_key_updates(self):
|
|
paper = self.repo.pull_paper('turing1950computing')
|
|
self.repo.rename_paper(paper, 'Turing1950')
|
|
self.assertEqual(paper, self.repo.pull_paper('Turing1950'))
|
|
|
|
# TODO: should also check that associated files are updated
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|