diff options
| -rw-r--r-- | lesana/command.py | 19 | ||||
| -rwxr-xr-x | scripts/lesana | 21 | ||||
| -rw-r--r-- | tests/test_commands.py | 214 | 
3 files changed, 125 insertions, 129 deletions
diff --git a/lesana/command.py b/lesana/command.py index 8c0ac15..02c44e2 100644 --- a/lesana/command.py +++ b/lesana/command.py @@ -434,3 +434,22 @@ class Update(Command):              field=self.args.field,              value=self.args.value,          ) + + +class Lesana(hazwaz.MainCommand): +    """ +    Manage collections +    """ + +    commands = ( +        New(), +        Edit(), +        Show(), +        Index(), +        Search(), +        GetValues(), +        Update(), +        Export(), +        Init(), +        Remove(), +    ) diff --git a/scripts/lesana b/scripts/lesana index 5c84d56..c2d0eec 100755 --- a/scripts/lesana +++ b/scripts/lesana @@ -9,25 +9,6 @@ import hazwaz  import lesana.command -class Lesana(hazwaz.MainCommand): -    """ -    Manage collections -    """ - -    commands = ( -        lesana.command.New(), -        lesana.command.Edit(), -        lesana.command.Show(), -        lesana.command.Index(), -        lesana.command.Search(), -        lesana.command.GetValues(), -        lesana.command.Update(), -        lesana.command.Export(), -        lesana.command.Init(), -        lesana.command.Remove(), -    ) - -  if __name__ == "__main__":      # setup logging for lesana cli @@ -38,4 +19,4 @@ if __name__ == "__main__":      logger.addHandler(ch)      logger.setLevel(logging.INFO) -    Lesana().run() +    lesana.command.Lesana().run() diff --git a/tests/test_commands.py b/tests/test_commands.py index d52908a..044caa9 100644 --- a/tests/test_commands.py +++ b/tests/test_commands.py @@ -4,6 +4,8 @@ import os  import tempfile  import unittest +import hazwaz.unittest +  from lesana import command  from . import utils @@ -40,7 +42,7 @@ class CommandsMixin:          return stream -class testCommandsSimple(unittest.TestCase, CommandsMixin): +class testCommandsSimple(hazwaz.unittest.HazwazTestCase, CommandsMixin):      def setUp(self):          self.tmpdir = tempfile.TemporaryDirectory()          utils.copytree( @@ -48,66 +50,72 @@ class testCommandsSimple(unittest.TestCase, CommandsMixin):              self.tmpdir.name,              dirs_exist_ok=True,          ) +        self.lesana = command.Lesana() +        for cmd in self.lesana.commands: +            cmd.editors = [("true", "true")]          # re-index the collection before running each test          args = {              'collection': self.tmpdir.name,              "files": None,              "reset": True,          } -        self._run_command(command.Index(), args) +        self.run_with_argv(self.lesana, [ +            "lesana", +            "index", +            "-c", self.tmpdir.name, +            "--reset" +        ])      def tearDown(self):          self.tmpdir.cleanup()      def test_init(self): -        args = { -            'collection': self.tmpdir.name, -            'git': True, -        } -        streams = self._run_command(command.Init(), args) +        streams = self.run_with_argv(self.lesana, [ +            "lesana", +            "init", +            "-c", self.tmpdir.name, +        ])          self.assertEqual(streams['stdout'].getvalue(), '')          self.assertEqual(streams['stderr'].getvalue(), '')      def test_new(self): -        args = { -            'collection': self.tmpdir.name, -            'git': True, -        } -        streams = self._run_command(command.New(), args) +        streams = self.run_with_argv(self.lesana, [ +            "lesana", +            "new", +            "-c", self.tmpdir.name, +        ])          self.assertEqual(len(streams['stdout'].getvalue()), 33)          self.assertEqual(streams['stderr'].getvalue(), '')      def test_edit(self): -        args = { -            'collection': self.tmpdir.name, -            'git': True, -            'eid': '11189ee4', -        } -        streams = self._run_command(command.Edit(), args) -        self.assertTrue(args['eid'] in streams['stdout'].getvalue()) +        streams = self.run_with_argv(self.lesana, [ +            "lesana", +            "edit", +            "-c", self.tmpdir.name, +            "11189ee4", +        ]) +        self.assertTrue("11189ee4" in streams['stdout'].getvalue())          self.assertEqual(streams['stderr'].getvalue(), '')      def test_show(self): -        args = { -            'collection': self.tmpdir.name, -            'git': True, -            'eid': '11189ee4', -            'template': False, -        } -        streams = self._run_command(command.Show(), args) +        streams = self.run_with_argv(self.lesana, [ +            "lesana", +            "show", +            "-c", self.tmpdir.name, +            "11189ee4" +        ])          self.assertTrue(              'name: Another item' in streams['stdout'].getvalue()          )          self.assertEqual(streams['stderr'].getvalue(), '')      def test_index(self): -        args = { -            'collection': self.tmpdir.name, -            'git': True, -            'files': None, -            'reset': True, -        } -        streams = self._run_command(command.Index(), args) +        streams = self.run_with_argv(self.lesana, [ +            "lesana", +            "index", +            "-c", self.tmpdir.name, +            "--reset", +        ])          self.assertEqual(              streams['stdout'].getvalue(),              'Found and indexed 3 entries\n', @@ -115,32 +123,24 @@ class testCommandsSimple(unittest.TestCase, CommandsMixin):          self.assertEqual(streams['stderr'].getvalue(), '')      def test_search(self): -        args = { -            'collection': self.tmpdir.name, -            'git': True, -            'template': False, -            'query': 'Another', -            'offset': None, -            'pagesize': None, -            'sort': None, -            'expand_query_template': False, -            'all': False, -        } -        streams = self._run_command(command.Search(), args) +        streams = self.run_with_argv(self.lesana, [ +            "lesana", +            "search", +            "-c", self.tmpdir.name, +            "Another" +        ])          self.assertTrue(              '11189ee4' in streams['stdout'].getvalue()          )          self.assertEqual(streams['stderr'].getvalue(), '')      def test_get_values(self): -        args = { -            'collection': self.tmpdir.name, -            'git': True, -            'template': False, -            'query': '*', -            'field': 'position', -        } -        streams = self._run_command(command.GetValues(), args) +        streams = self.run_with_argv(self.lesana, [ +            "lesana", +            "get-values", +            "-c", self.tmpdir.name, +            "--field", "position", +        ])          self.assertIn('somewhere: 2', streams['stdout'].getvalue())          self.assertEqual(streams['stderr'].getvalue(), '') @@ -155,51 +155,51 @@ class testCommandsSimple(unittest.TestCase, CommandsMixin):              # then remove the cwd change from here              old_cwd = os.getcwd()              os.chdir(self.tmpdir.name) -            args = { -                'collection': self.tmpdir.name, -                'git': True, -                'template': 'templates/from_self.yaml', -                'query': 'Another', -                'destination': dest_tmpdir, -            } -            streams = self._run_command(command.Export(), args) +            streams = self.run_with_argv(self.lesana, [ +                "lesana", +                "export", +                "-c", self.tmpdir.name, +                "--query", "Another", +                dest_tmpdir, +                "templates/from_self.yaml", +            ])              os.chdir(old_cwd)              self.assertEqual(streams['stdout'].getvalue(), '')              self.assertEqual(streams['stderr'].getvalue(), '')      def test_remove(self): -        args = { -            'collection': self.tmpdir.name, -            'git': True, -            'entries': ['11189ee4'], -        } -        streams = self._run_command(command.Remove(), args) +        streams = self.run_with_argv(self.lesana, [ +            "lesana", +            "rm", +            "-c", self.tmpdir.name, +            "11189ee4" +        ])          self.assertEqual(streams['stdout'].getvalue(), '')          self.assertEqual(streams['stderr'].getvalue(), '')          # and check that the entry has been removed -        args = { -            'collection': self.tmpdir.name, -            'git': True, -            'eid': '11189ee4', -            'template': False, -        } -        streams = self._run_command(command.Show(), args) +        streams = self.run_with_argv(self.lesana, [ +            "lesana", +            "show", +            "-c", self.tmpdir.name, +            "11189ee4" +        ])          self.assertEqual(streams['stderr'].getvalue(), '') +        # TODO: check that the file is no longer there      def test_update(self): -        args = { -            'collection': self.tmpdir.name, -            'git': True, -            'query': 'Another', -            'field': 'position', -            'value': 'here', -        } -        streams = self._run_command(command.Update(), args) +        streams = self.run_with_argv(self.lesana, [ +            "lesana", +            "update", +            "-c", self.tmpdir.name, +            "--field", "position", +            "--value", "here", +            "Another" +        ])          self.assertEqual(streams['stdout'].getvalue(), '')          self.assertEqual(streams['stderr'].getvalue(), '') -class testCommandsComplex(unittest.TestCase, CommandsMixin): +class testCommandsComplex(hazwaz.unittest.HazwazTestCase, CommandsMixin):      def setUp(self):          self.tmpdir = tempfile.TemporaryDirectory()          utils.copytree( @@ -207,42 +207,38 @@ class testCommandsComplex(unittest.TestCase, CommandsMixin):              self.tmpdir.name,              dirs_exist_ok=True,          ) +        self.lesana = command.Lesana() +        for cmd in self.lesana.commands: +            cmd.editors = [("true", "true")]          # re-index the collection before running each test -        args = { -            'collection': self.tmpdir.name, -            "files": None, -            "reset": True, -        } -        self._run_command(command.Index(), args) +        self.run_with_argv(self.lesana, [ +            "lesana", +            "index", +            "-c", self.tmpdir.name, +            "--reset", +        ])      def tearDown(self):          self.tmpdir.cleanup()      def test_get_values_from_list(self): -        args = { -            'collection': self.tmpdir.name, -            'git': True, -            'template': False, -            'query': '*', -            'field': 'tags', -        } -        streams = self._run_command(command.GetValues(), args) +        streams = self.run_with_argv(self.lesana, [ +            "lesana", +            "get-values", +            "-c", self.tmpdir.name, +            "--field", "tags", +        ])          self.assertIn('this: 1', streams['stdout'].getvalue())          self.assertEqual(streams['stderr'].getvalue(), '')      def test_search_template(self): -        args = { -            'collection': self.tmpdir.name, -            'git': True, -            'template': False, -            'query': '{{ nice }}', -            'expand_query_template': True, -            'offset': None, -            'pagesize': None, -            'sort': None, -            'all': False, -        } -        streams = self._run_command(command.Search(), args) +        streams = self.run_with_argv(self.lesana, [ +            "lesana", +            "search", +            "-c", self.tmpdir.name, +            "--expand-query-template", +            "{{ nice }}" +        ])          self.assertIn('8e9fa1ed', streams['stdout'].getvalue())          self.assertIn('5084bc6e', streams['stdout'].getvalue())          self.assertEqual(streams['stderr'].getvalue(), '')  | 
