diff --git a/tests/test_cli.py b/tests/test_cli.py index c707edfc..5b268a9f 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -21,7 +21,6 @@ def test_list(tmpdir, runner, create): result = runner.invoke(cli, ['list'], catch_exceptions=False) assert not result.exception assert not result.output.strip() - create( 'test.ics', 'SUMMARY:harhar\n' @@ -911,3 +910,43 @@ def test_duplicate_list(tmpdir, runner): assert result.exit_code == exceptions.AlreadyExists.EXIT_CODE assert result.output.strip() == \ 'More than one list has the same identity: personal.' + + +def test_show_description(tmpdir, runner, create): + create( + 'test.ics', + 'SUMMARY:harhar\n' + 'DESCRIPTION:Parnidi\n' + ) + + result = runner.invoke(cli, ['show', '1']) + assert 'Parnidi' in result.output + + +def test_description(runner): + result = runner.invoke(cli, [ + 'new', '-l', 'default', '--description', 'Takshila', 'Event Test' + ]) + + assert 'Takshila' in result.output + + +def test_edit_description(runner, todos, todo_factory): + todo_factory(summary='harhar', description='Parnidi') + + result = runner.invoke(cli, ['edit', '1', '--description', 'Kimple']) + + assert not result.exception + assert 'Kimple' in result.output + + +def test_filter_description(runner, create, todos, todo_factory): + todo_factory(summary='harhar', description='Takshila') + create( + 'test.ics', + 'SUMMARY:manika\n' + 'DESCRIPTION:Shubik' + ) + result = runner.invoke(cli, ['list']) + + assert 'Shubik' in result.output diff --git a/todoman/cli.py b/todoman/cli.py index 135d69f1..25e70965 100644 --- a/todoman/cli.py +++ b/todoman/cli.py @@ -143,6 +143,7 @@ def _todo_property_options(command): click.option( '--priority', default='', callback=_validate_priority_param, help=('The priority for this todo'))(command) + click.option('--description', help=('The description of todo.'))(command) click.option('--location', help=('The location where ' 'this todo takes place.'))(command) click.option( @@ -156,7 +157,8 @@ def _todo_property_options(command): @functools.wraps(command) def command_wrap(*a, **kw): kw['todo_properties'] = {key: kw.pop(key) for key in - ('due', 'start', 'location', 'priority')} + ('due', 'start', 'location', 'priority', + 'description')} return command(*a, **kw) return command_wrap @@ -466,6 +468,8 @@ def move(ctx, list, ids): @cli.command() @pass_ctx @click.argument('lists', nargs=-1, callback=_validate_lists_param) +@click.option('--description', + help='Only show tasks with description containg TEXT') @click.option('--location', help='Only show tasks with location containg TEXT') @click.option('--category', help='Only show tasks with category containg TEXT') @click.option('--grep', help='Only show tasks with message containg TEXT') diff --git a/todoman/model.py b/todoman/model.py index 0819e2a9..ef579b4e 100644 --- a/todoman/model.py +++ b/todoman/model.py @@ -603,7 +603,8 @@ def add_vtodo(self, todo, file_path, id=None): return rv - def todos(self, lists=(), priority=None, location='', category='', grep='', + def todos(self, lists=(), priority=None, location='', + description='', category='', grep='', sort=(), reverse=True, due=None, start=None, startable=False, status=('NEEDS-ACTION', 'IN-PROCESS',)): """ @@ -617,6 +618,8 @@ def todos(self, lists=(), priority=None, location='', category='', grep='', -created_at :param list lists: Only return todos for these lists. + :param str description: Only return todos with a description + containing this string. :param str location: Only return todos with a location containing this string. :param str category: Only return todos with a category containing this @@ -652,6 +655,9 @@ def todos(self, lists=(), priority=None, location='', category='', grep='', if priority: extra_where.append('AND PRIORITY > 0 AND PRIORITY <= ?') params.append('{}'.format(priority)) + if description: + extra_where.append('AND description LIKE ?') + params.append('%{}%'.format(description)) if location: extra_where.append('AND location LIKE ?') params.append('%{}%'.format(location))