From bf0bab9455ead702b0782cc208ebbd522919c31f Mon Sep 17 00:00:00 2001 From: "martin f. krafft" Date: Wed, 23 Aug 2023 16:38:08 +1200 Subject: [PATCH] buildmimetree.py: file IO outside do_massage --- .config/neomutt/buildmimetree.py | 69 +++++++++++++++++++------------- 1 file changed, 42 insertions(+), 27 deletions(-) diff --git a/.config/neomutt/buildmimetree.py b/.config/neomutt/buildmimetree.py index fe85167..d033bda 100755 --- a/.config/neomutt/buildmimetree.py +++ b/.config/neomutt/buildmimetree.py @@ -317,7 +317,8 @@ def do_setup( def do_massage( - maildraft, + draft_f, + draftpath, cmd_f, *, extensions=None, @@ -344,10 +345,7 @@ def do_massage( cmds.flush() extensions = extensions.split(",") if extensions else [] - with open(maildraft, "r") as draft_f: - tree = converter( - draft_f.read(), pathlib.Path(maildraft), extensions=extensions - ) + tree = converter(draft_f.read(), draftpath, extensions=extensions) mimetree = MIMETreeDFWalker(debug=debug_walk) @@ -435,9 +433,12 @@ if __name__ == "__main__": do_setup(args.extensions, debug_commands=args.debug_commands) elif args.mode == "massage": - with open(args.cmdpath, "w") as cmd_f: + with open(args.MAILDRAFT, "r") as draft_f, open( + args.cmdpath, "w" + ) as cmd_f: do_massage( - args.MAILDRAFT, + draft_f, + pathlib.Path(args.MAILDRAFT), cmd_f, extensions=args.extensions, debug_commands=args.debug_commands, @@ -449,6 +450,7 @@ if __name__ == "__main__": try: import pytest + from io import StringIO class Tests: @pytest.fixture @@ -595,31 +597,44 @@ try: assert lines[2].endswith(f'{const2},{const1}"') assert lines[4].endswith(const1) - def test_do_massage_basic(self, const1, capsys): - def converter(maildraft, extensions): - return Part("text", "plain", "/dev/null", orig=True) + @pytest.fixture + def string_io(self, const1, text=None): + return StringIO(text or const1) - do_massage(maildraft=const1, cmd_f=sys.stdout, converter=converter) - captured = capsys.readouterr() - assert ( - captured.out.strip() - == """\ - set editor="$my_editor" - set edit_headers="$my_edit_headers" - unset my_editor - unset my_edit_headers - source 'rm -f pytest_internal_file|' - unset my_mdwn_postprocess_cmd_file - """.replace( - " ", "" - ).strip() + def test_do_massage_basic(self, const1, string_io, capsys): + def converter(drafttext, draftpath, extensions): + return Part("text", "plain", draftpath, orig=True) + + do_massage( + draft_f=string_io, + draftpath=const1, + cmd_f=sys.stdout, + converter=converter, ) - def test_do_massage_fulltree(self, const1, basic_mime_tree, capsys): - def converter(maildraft, extensions): + captured = capsys.readouterr() + lines = captured.out.splitlines() + assert '="$my_editor"' in lines.pop(0) + assert '="$my_edit_headers"' in lines.pop(0) + assert "unset my_editor" == lines.pop(0) + assert "unset my_edit_headers" == lines.pop(0) + assert "update-encoding" in lines.pop(0) + assert "source 'rm -f " in lines.pop(0) + assert "unset my_mdwn_postprocess_cmd_file" == lines.pop(0) + + def test_do_massage_fulltree( + self, string_io, const1, basic_mime_tree, capsys + ): + def converter(drafttext, draftpath, extensions): return basic_mime_tree - do_massage(maildraft=const1, cmd_f=sys.stdout, converter=converter) + do_massage( + draft_f=string_io, + draftpath=const1, + cmd_f=sys.stdout, + converter=converter, + ) + captured = capsys.readouterr() lines = captured.out.splitlines()[4:][::-1] assert "Related" in lines.pop() -- 2.39.5