From 328f2a6d5e6354555cb73aaf0d26987d19db3d7d Mon Sep 17 00:00:00 2001 From: Olivier Mangin Date: Thu, 25 Jan 2018 22:21:15 -0500 Subject: [PATCH] Adds more checks and better error message against empty citekeys. --- pubs/bibstruct.py | 2 ++ tests/str_fixtures.py | 11 +++++++++++ tests/test_paper.py | 4 ++++ tests/test_usecase.py | 8 ++++++++ 4 files changed, 25 insertions(+) diff --git a/pubs/bibstruct.py b/pubs/bibstruct.py index a9dc7c7..cd2528f 100644 --- a/pubs/bibstruct.py +++ b/pubs/bibstruct.py @@ -22,6 +22,8 @@ def str2citekey(s): return key def check_citekey(citekey): + if citekey is None or not citekey.strip(): + raise ValueError(u"Empty citekeys are not valid") # TODO This is not the right way to test that (17/12/2012) if ustr(citekey) != str2citekey(citekey): raise ValueError(u"Invalid `{}` citekey; ".format(citekey) + diff --git a/tests/str_fixtures.py b/tests/str_fixtures.py index 5b9f6f7..2036943 100644 --- a/tests/str_fixtures.py +++ b/tests/str_fixtures.py @@ -58,6 +58,17 @@ tags: [AI, computer] added: '2013-11-14 13:14:20' """ +# Should not parse (see #113) +bibtex_no_citekey = """@Manual{, + title = {R: A Language and Environment for Statistical Computing}, + author = {{R Core Team}}, + organization = {R Foundation for Statistical Computing}, + address = {Vienna, Austria}, + year = {2017}, + url = {https://www.R-project.org/}, +} +""" + sample_conf = """ [main] diff --git a/tests/test_paper.py b/tests/test_paper.py index cd2c94e..9c78554 100644 --- a/tests/test_paper.py +++ b/tests/test_paper.py @@ -42,6 +42,10 @@ class TestAttributes(unittest.TestCase): self.assertEqual(self.p.tags, set()) self.p.remove_tag('ranking') + def test_fails_with_empty_citekey(self): + with self.assertRaises(ValueError): + Paper(" ", fixtures.doe_bibdata) + if __name__ == '__main__': unittest.main() diff --git a/tests/test_usecase.py b/tests/test_usecase.py index 0b27780..0960a21 100644 --- a/tests/test_usecase.py +++ b/tests/test_usecase.py @@ -331,6 +331,14 @@ class TestAdd(URLContentTestCase): ] self.execute_cmds(cmds) + def test_add_no_citekey_fails(self): + # See #113 + cmds = ['pubs init', + ('pubs add', [str_fixtures.bibtex_no_citekey]), + ] + with self.assertRaises(FakeSystemExit): + self.execute_cmds(cmds) + class TestList(DataCommandTestCase):