diff --git a/papers/papers b/papers/papers index eeed970..1cc68db 100755 --- a/papers/papers +++ b/papers/papers @@ -1,5 +1,5 @@ #!/usr/bin/env python2 # -*- coding:utf-8 -*- -import papers_cmd +from papers import papers_cmd papers_cmd.execute() \ No newline at end of file diff --git a/papers/papers_cmd.py b/papers/papers_cmd.py index 210b3cc..eb59bff 100644 --- a/papers/papers_cmd.py +++ b/papers/papers_cmd.py @@ -26,24 +26,25 @@ cmds = collections.OrderedDict([ ('update', commands.update_cmd), ]) -config = configs.read_config() -ui = UI(config) -# Extend with plugin commands -plugin.load_plugins(config, ui, configs.get_plugins(config)) -for p in plugin.get_plugins().values(): - cmds.update(collections.OrderedDict([(p.name, p)])) -# +def execute(raw_args = sys.argv): + config = configs.read_config() + ui = UI(config) -parser = argparse.ArgumentParser(description="research papers repository") -subparsers = parser.add_subparsers(title="valid commands", dest="command") + # Extend with plugin commands + plugin.load_plugins(config, ui, configs.get_plugins(config)) + for p in plugin.get_plugins().values(): + cmds.update(collections.OrderedDict([(p.name, p)])) -for cmd_mod in cmds.values(): - subparser = cmd_mod.parser(subparsers, config) # why do we return the subparser ? + parser = argparse.ArgumentParser(description="research papers repository") + subparsers = parser.add_subparsers(title="valid commands", dest="command") + + for cmd_mod in cmds.values(): + subparser = cmd_mod.parser(subparsers, config) # why do we return the subparser ? -def execute(raw_args = sys.argv): args = parser.parse_args(raw_args[1:]) args.config = config + args.ui = ui cmd = args.command del args.command diff --git a/tests/test_usecase.py b/tests/test_usecase.py index e62fc46..56b6740 100644 --- a/tests/test_usecase.py +++ b/tests/test_usecase.py @@ -4,33 +4,75 @@ import pkgutil import testenv import fake_filesystem +import fake_filesystem_shutil -import papers -from papers import papers_cmd +real_os = os +real_open = open + +fake_os, fake_open, fake_shutil = None, None + +def _create_fake_fs(): + global fake_os, fake_open, fake_shutil -def create_fake_fs(): fake_fs = fake_filesystem.FakeFilesystem() fake_os = fake_filesystem.FakeOsModule(fake_fs) fake_open = fake_filesystem.FakeFileOpen(fake_fs) - fake_fs.CreateFile('/Users/fabien/bla') + fake_shutil = fake_filesystem_shutil.FakeShutilModule(fake_fs) + + fake_fs.CreateDirectory(fake_os.path.expanduser('~')) __builtins__['open'] = fake_open __builtins__['file'] = fake_open - for importer, modname, ispkg in pkgutil.walk_packages(path=papers.__path__, - prefix=papers.__name__+'.', - onerror=lambda x: None): + sys.modules['os'] = fake_os + sys.modules['shutil'] = fake_shutil + + import papers + for importer, modname, ispkg in pkgutil.walk_packages( + path=papers.__path__, + prefix=papers.__name__+'.', + onerror=lambda x: None): md = __import__(modname, fromlist = 'dummy') md.os = fake_os + md.shutil = fake_shutil + return fake_fs -class TestUseCases(unittest.TestCase): +class TestInit(unittest.TestCase): def test_init(self): - create_fake_fs() - papers_md.execute_papers('papers init -p paper_test2'.split()) - - def test_init(self): - create_fake_fs() + fs = _create_fake_fs() + from papers import papers_cmd papers_cmd.execute('papers init -p paper_test2'.split()) + self.assertEqual(set(fake_os.listdir('/paper_test2/')), {'bibdata', 'doc', 'meta', 'papers.yaml'}) + +class TestAdd(unittest.TestCase): + + def test_add(self): + + fs = _create_fake_fs() + from papers import papers_cmd + papers_cmd.execute('papers init'.split()) + + with real_open('data/pagerank.bib', 'r') as f: + fs.CreateFile('/data/page.bib', contents = f.read()) + with real_open('data/pagerank.pdf', 'r') as f: + fs.CreateFile('/data/page.pdf', contents = f.read()) + + papers_cmd.execute('papers add -b /data/page.bib -d /data/page.pdf'.split()) + + +class TestAdd2(unittest.TestCase): + def test_add2(self): + + fs = _create_fake_fs() + from papers import papers_cmd + papers_cmd.execute('papers init -p /not_default'.split()) + + with real_open('data/pagerank.bib', 'r') as f: + fs.CreateFile('/data/page.bib', contents = f.read()) + with real_open('data/pagerank.pdf', 'r') as f: + fs.CreateFile('/data/page.pdf', contents = f.read()) + + papers_cmd.execute('papers add -b /data/page.bib -d /data/page.pdf'.split())