From a3f4f6b944984fae22d2eab8813caf5765095baf Mon Sep 17 00:00:00 2001 From: Suhas Date: Sat, 6 Mar 2021 13:47:03 -0500 Subject: [PATCH] Fix bug that prevented --format pretty and --format short from working (#1177) --- features/format.feature | 26 ++++++++++++++++++++++++++ features/steps/core.py | 6 ++++++ features/steps/export_steps.py | 2 +- jrnl/jrnl.py | 5 ++++- jrnl/plugins/__init__.py | 2 ++ tests/test_color.py | 17 +++++++++++++++++ tests/test_display.py | 23 +++++++++++++++++++++++ 7 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 tests/test_color.py create mode 100644 tests/test_display.py diff --git a/features/format.feature b/features/format.feature index 4981f685..7bdaac4d 100644 --- a/features/format.feature +++ b/features/format.feature @@ -1,5 +1,31 @@ Feature: Custom formats + Scenario Outline: Short printing via --format flag + Given We use the config ".yaml" + And we use the password "test" if prompted + When we run "jrnl --format short -3" + Then we should get no error + + Examples: configs + | config | + | basic_onefile | + | basic_encrypted | + | basic_folder | + | basic_dayone | + + Scenario Outline: Pretty Printing aka the Default + Given We use the config ".yaml" + And we use the password "test" if prompted + When we run "jrnl --format pretty -3" + Then we should get no error + + Examples: configs + | config | + | basic_onefile | + | basic_encrypted | + | basic_folder | + | basic_dayone | + Scenario Outline: JSON format Given we use the config ".yaml" And we use the password "test" if prompted diff --git a/features/steps/core.py b/features/steps/core.py index f471acfb..ac5d8950 100644 --- a/features/steps/core.py +++ b/features/steps/core.py @@ -407,6 +407,12 @@ def all_input_was_used(context): def run(context, command, text=""): text = text or context.text or "" + if "config_path" in context and context.config_path is not None: + with open(context.config_path) as f: + context.jrnl_config = yaml.load(f, Loader=yaml.FullLoader) + else: + context.jrnl_config = None + if "cache_dir" in context and context.cache_dir is not None: cache_dir = os.path.join("features", "cache", context.cache_dir) command = command.format(cache_dir=cache_dir) diff --git a/features/steps/export_steps.py b/features/steps/export_steps.py index f885591c..3df86237 100644 --- a/features/steps/export_steps.py +++ b/features/steps/export_steps.py @@ -1,13 +1,13 @@ # Copyright (C) 2012-2021 jrnl contributors # License: https://www.gnu.org/licenses/gpl-3.0.html + import json import os import shutil import random import string from xml.etree import ElementTree - from behave import given from behave import then diff --git a/jrnl/jrnl.py b/jrnl/jrnl.py index 383cceee..cf2b3bbb 100644 --- a/jrnl/jrnl.py +++ b/jrnl/jrnl.py @@ -323,9 +323,12 @@ def _delete_search_results(journal, old_entries, **kwargs): def _display_search_results(args, journal, **kwargs): - if args.short: + if args.short or args.export == "short": print(journal.pprint(short=True)) + elif args.export == "pretty": + print(journal.pprint()) + elif args.tags: print(plugins.get_exporter("tags").export(journal)) diff --git a/jrnl/plugins/__init__.py b/jrnl/plugins/__init__.py index ad174f0b..3eb4d5a2 100644 --- a/jrnl/plugins/__init__.py +++ b/jrnl/plugins/__init__.py @@ -27,6 +27,8 @@ __exporters = [ __importers = [JRNLImporter] __exporter_types = {name: plugin for plugin in __exporters for name in plugin.names} +__exporter_types["pretty"] = None +__exporter_types["short"] = None __importer_types = {name: plugin for plugin in __importers for name in plugin.names} EXPORT_FORMATS = sorted(__exporter_types.keys()) diff --git a/tests/test_color.py b/tests/test_color.py new file mode 100644 index 00000000..14dc7938 --- /dev/null +++ b/tests/test_color.py @@ -0,0 +1,17 @@ +import pytest + +from jrnl.color import colorize +from colorama import Fore, Style + + +@pytest.fixture() +def data_fixture(): + string = "Zwei peanuts walked into a bar" + yield string + + +def test_colorize(data_fixture): + string = data_fixture + colorized_string = colorize(string, "BLUE", True) + + assert colorized_string == Style.BRIGHT + Fore.BLUE + string + Style.RESET_ALL diff --git a/tests/test_display.py b/tests/test_display.py new file mode 100644 index 00000000..72a9c451 --- /dev/null +++ b/tests/test_display.py @@ -0,0 +1,23 @@ +import argparse +import jrnl +import pytest +from unittest import mock +from jrnl.jrnl import _display_search_results + + +# fmt: off +# see: https://github.com/psf/black/issues/664 +@pytest.mark.parametrize("export_format", [ "pretty", "short","markdown"]) +#fmt: on +@mock.patch.object(argparse, "Namespace", return_value={"export": "markdown", "filename": "irrele.vant"}) +def test_export_format(mock_args, export_format): + + test_journal = jrnl.Journal.Journal + mock_args.export = export_format + #fmt: off + # see: https://github.com/psf/black/issues/664 + with mock.patch("builtins.print") as mock_spy_print, \ + mock.patch('jrnl.Journal.Journal.pprint') as mock_pprint: + _display_search_results(mock_args, test_journal) + mock_spy_print.assert_called_once_with(mock_pprint()) + #fmt: on