Fix compatibility of step-functions matching on multiple lines

In pytest-bdd v8.0.0 it is no longer possible to match based on multiple
lines, which breaks essentially all steps that support docstrings. Solve
this by adding a wrapper-function for each of these instances, that
matches the docstring step, and calls the original function.

So, what used to be:

    @then(parse("the output should match\n{regex}"))
    @then(parse('the output should match "{regex}"'))
    def output_should_match(regex, cli_run):
        ...

Is now:

    @then(parse("the output should match"))
    def output_should_match_docstring(cli_run, docstring):
        output_should_match(docstring, cli_run)

    @then(parse('the output should match "{regex}"'))
    def output_should_match(regex, cli_run):
        ...

There is possibly a way around this that is much better than what I've
done here, but this is a start at least.
This commit is contained in:
Carl Smedstad 2024-11-16 18:28:35 +01:00
parent a3e55c5e0d
commit 4d99448cdd
No known key found for this signature in database
GPG key ID: 49C93367BA86290E
3 changed files with 82 additions and 43 deletions

View file

@ -13,6 +13,7 @@ from xml.etree import ElementTree as ET
from pytest_bdd import given
from pytest_bdd.parsers import parse
from pytest_bdd.parsers import re
from jrnl import __version__
from jrnl.time import __get_pdt_calendar
@ -21,7 +22,11 @@ from tests.lib.fixtures import NoKeyring
from tests.lib.fixtures import TestKeyring
@given(parse("we {editor_method} to the editor if opened\n{editor_input}"))
@given(re(r"we (?P<editor_method>\w+) to the editor if opened"))
def we_enter_editor_docstring(editor_method, editor_state, docstring):
we_enter_editor(editor_method, docstring, editor_state)
@given(parse("we {editor_method} nothing to the editor if opened"))
def we_enter_editor(editor_method, editor_input, editor_state):
file_method = editor_state["intent"]["method"]