From 369142d641394b2204ab1d2558b7f5df7b96ee39 Mon Sep 17 00:00:00 2001 From: apainintheneck Date: Sat, 4 Jun 2022 10:52:49 -0700 Subject: [PATCH 1/6] Fixed error related to display_format in config file Now _display_search_results tries to source the export arg from the config file before dispaying search results. --- jrnl/jrnl.py | 14 +++++++------- tests/unit/test_display.py | 1 + 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/jrnl/jrnl.py b/jrnl/jrnl.py index 1c536a37d..efdf06891 100644 --- a/jrnl/jrnl.py +++ b/jrnl/jrnl.py @@ -373,20 +373,20 @@ def _change_time_search_results(args, journal, old_entries, no_prompt=False, **k def _display_search_results(args, journal, **kwargs): - if args.short or args.export == "short": + # Get export format from config file if not provided at the command line + args.export = args.export or kwargs["config"].get("display_format") + + if args.tags: + print(plugins.get_exporter("tags").export(journal)) + + elif 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)) - elif args.export: exporter = plugins.get_exporter(args.export) print(exporter.export(journal, args.filename)) - elif kwargs["config"].get("display_format"): - exporter = plugins.get_exporter(kwargs["config"]["display_format"]) - print(exporter.export(journal, args.filename)) else: print(journal.pprint()) diff --git a/tests/unit/test_display.py b/tests/unit/test_display.py index 921d1631f..58f4c9c04 100644 --- a/tests/unit/test_display.py +++ b/tests/unit/test_display.py @@ -16,6 +16,7 @@ def test_export_format(mock_args, export_format): test_journal = jrnl.Journal.Journal mock_args.export = export_format + mock_args.tags = None #fmt: off # see: https://github.com/psf/black/issues/664 with mock.patch("builtins.print") as mock_spy_print, \ From 289a1986e2b748a31751dc84d75d84656eab401a Mon Sep 17 00:00:00 2001 From: Micah Jerome Ellison Date: Sat, 4 Jun 2022 13:46:42 -0700 Subject: [PATCH 2/6] Add BDD test for original bug --- tests/bdd/features/format.feature | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/bdd/features/format.feature b/tests/bdd/features/format.feature index 3f0decb22..9de288896 100644 --- a/tests/bdd/features/format.feature +++ b/tests/bdd/features/format.feature @@ -560,3 +560,19 @@ Feature: Custom formats | basic_encrypted.yaml | | basic_folder.yaml | | basic_dayone.yaml | + + + Scenario Outline: display_format short and pretty do not crash if specified as config values + Given we use the config "" + And we use the password "test" if prompted + When we run "jrnl --config-override display_format short -1" + Then we should get no error + When we run "jrnl --config-override display_format pretty -1" + Then we should get no error + + Examples: configs + | config_file | + | basic_onefile.yaml | + | basic_encrypted.yaml | + | basic_folder.yaml | + | basic_dayone.yaml | From f9e406a99b31dad2b888ef5915a54f4eb048684f Mon Sep 17 00:00:00 2001 From: Jonathan Wren Date: Sat, 4 Jun 2022 15:00:41 -0700 Subject: [PATCH 3/6] update unit test --- tests/unit/test_display.py | 56 ++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 17 deletions(-) diff --git a/tests/unit/test_display.py b/tests/unit/test_display.py index 58f4c9c04..b4be5a226 100644 --- a/tests/unit/test_display.py +++ b/tests/unit/test_display.py @@ -3,24 +3,46 @@ import pytest +import random +import string import jrnl from jrnl.jrnl import _display_search_results +from jrnl.args import parse_args +@pytest.fixture +def random_string(): + return ''.join(random.choices(string.ascii_uppercase + string.digits, k=25)) -# 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 - mock_args.tags = None - #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 + +@pytest.mark.parametrize("export_format", ["pretty", "short"]) +@mock.patch("builtins.print") +@mock.patch("jrnl.Journal.Journal.pprint") +def test_display_search_results_pretty_short(mock_pprint, mock_print, export_format): + mock_args = parse_args(["--format", export_format]) + test_journal = mock.Mock(wraps=jrnl.Journal.Journal) + + _display_search_results(mock_args, test_journal) + + mock_print.assert_called_once_with(mock_pprint.return_value) + + +@pytest.mark.parametrize( + "export_format", ["markdown", "json", "xml", "yaml", "fancy", "dates"] +) +@mock.patch("jrnl.plugins.get_exporter") +@mock.patch("builtins.print") +def test_display_search_results_builtin_plugins( + mock_print, mock_exporter, export_format, random_string +): + test_filename = random_string + mock_args = parse_args(["--format", export_format, "--file", test_filename]) + + test_journal = mock.Mock(wraps=jrnl.Journal.Journal) + mock_export = mock.Mock() + mock_exporter.return_value.export = mock_export + + _display_search_results(mock_args, test_journal) + + mock_exporter.assert_called_once_with(export_format) + mock_export.assert_called_once_with(test_journal, test_filename) + mock_print.assert_called_once_with(mock_export.return_value) From 840106008b5da2e82319f9efbf2b90a11063763b Mon Sep 17 00:00:00 2001 From: Jonathan Wren Date: Sat, 4 Jun 2022 15:02:30 -0700 Subject: [PATCH 4/6] rename unit test file to match structure --- tests/unit/{test_display.py => test_jrnl.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename tests/unit/{test_display.py => test_jrnl.py} (100%) diff --git a/tests/unit/test_display.py b/tests/unit/test_jrnl.py similarity index 100% rename from tests/unit/test_display.py rename to tests/unit/test_jrnl.py From ff9d8615fbe787ada779512ad628dd65c240195c Mon Sep 17 00:00:00 2001 From: Jonathan Wren Date: Sat, 4 Jun 2022 15:04:14 -0700 Subject: [PATCH 5/6] run formatter --- tests/unit/test_jrnl.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/unit/test_jrnl.py b/tests/unit/test_jrnl.py index b4be5a226..29cc1e946 100644 --- a/tests/unit/test_jrnl.py +++ b/tests/unit/test_jrnl.py @@ -9,9 +9,10 @@ from jrnl.jrnl import _display_search_results from jrnl.args import parse_args + @pytest.fixture def random_string(): - return ''.join(random.choices(string.ascii_uppercase + string.digits, k=25)) + return "".join(random.choices(string.ascii_uppercase + string.digits, k=25)) @pytest.mark.parametrize("export_format", ["pretty", "short"]) From 2b939d587d78cbd6a5df889fd912c5c1c0eb6bbf Mon Sep 17 00:00:00 2001 From: Jonathan Wren Date: Sat, 4 Jun 2022 15:06:49 -0700 Subject: [PATCH 6/6] remove unused import statement --- tests/unit/test_jrnl.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/unit/test_jrnl.py b/tests/unit/test_jrnl.py index 29cc1e946..f87f6dadc 100644 --- a/tests/unit/test_jrnl.py +++ b/tests/unit/test_jrnl.py @@ -1,4 +1,3 @@ -import argparse from unittest import mock import pytest