mirror of
https://github.com/jrnl-org/jrnl.git
synced 2025-06-28 05:26:13 +02:00
Improve handling of mocking logic in pytest (#1382)
* WIP * fix handling of user input (stdin, input, getpass) * take out redundant pytest step * fix handling of 'we should' statements * fix test that doesn't use a config file * fix another test that uses stdin Co-authored-by: Micah Jerome Ellison <micah.jerome.ellison@gmail.com> * remove .tool-versions file per PR feedback * add comment to clarify why disembodied variables are here Co-authored-by: Micah Jerome Ellison <micah.jerome.ellison@gmail.com>
This commit is contained in:
parent
3518e37087
commit
2ab485de8c
16 changed files with 259 additions and 197 deletions
|
@ -11,7 +11,6 @@ from unittest.mock import MagicMock
|
|||
from unittest.mock import patch
|
||||
from xml.etree import ElementTree
|
||||
|
||||
from keyring import set_keyring
|
||||
from pytest_bdd import given
|
||||
from pytest_bdd.parsers import parse
|
||||
|
||||
|
@ -20,6 +19,7 @@ from jrnl.time import __get_pdt_calendar
|
|||
|
||||
from .fixtures import FailedKeyring
|
||||
from .fixtures import TestKeyring
|
||||
from .helpers import get_fixture
|
||||
|
||||
|
||||
@given(parse("we {editor_method} to the editor if opened\n{editor_input}"))
|
||||
|
@ -36,9 +36,8 @@ def we_enter_editor(editor_method, editor_input, editor_state):
|
|||
editor_state["intent"] = {"method": file_method, "input": editor_input}
|
||||
|
||||
|
||||
@given(parse('now is "<date_str>"'))
|
||||
@given(parse('now is "{date_str}"'))
|
||||
def now_is_str(date_str, mocks):
|
||||
def now_is_str(date_str, mock_factories):
|
||||
class DatetimeMagicMock(MagicMock):
|
||||
# needed because jrnl does some reflection on datetime
|
||||
def __instancecheck__(self, subclass):
|
||||
|
@ -63,8 +62,8 @@ def now_is_str(date_str, mocks):
|
|||
date_str_input, mocked_now()
|
||||
)
|
||||
|
||||
mocks["datetime"] = patch("datetime.datetime", new=datetime_mock)
|
||||
mocks["calendar_parse"] = patch(
|
||||
mock_factories["datetime"] = lambda: patch("datetime.datetime", new=datetime_mock)
|
||||
mock_factories["calendar_parse"] = lambda: patch(
|
||||
"jrnl.time.__get_pdt_calendar", return_value=calendar_mock
|
||||
)
|
||||
|
||||
|
@ -73,17 +72,22 @@ def now_is_str(date_str, mocks):
|
|||
@given(parse("we have a {keyring_type} keyring"), target_fixture="keyring")
|
||||
def we_have_type_of_keyring(keyring_type):
|
||||
if keyring_type == "failed":
|
||||
set_keyring(FailedKeyring())
|
||||
return FailedKeyring()
|
||||
else:
|
||||
set_keyring(TestKeyring())
|
||||
return TestKeyring()
|
||||
|
||||
|
||||
@given(parse('we use the config "{config_file}"'), target_fixture="config_path")
|
||||
@given('we use the config "<config_file>"', target_fixture="config_path")
|
||||
def we_use_the_config(config_file, temp_dir, working_dir):
|
||||
@given(parse("we use no config"), target_fixture="config_path")
|
||||
def we_use_the_config(request, temp_dir, working_dir):
|
||||
config_file = get_fixture(request, "config_file")
|
||||
|
||||
# Move into temp dir as cwd
|
||||
os.chdir(temp_dir.name)
|
||||
|
||||
if not config_file:
|
||||
return os.path.join(temp_dir.name, "non_existing_config.yaml")
|
||||
|
||||
# Copy the config file over
|
||||
config_source = os.path.join(working_dir, "data", "configs", config_file)
|
||||
config_dest = os.path.join(temp_dir.name, config_file)
|
||||
|
@ -106,7 +110,6 @@ def we_use_the_config(config_file, temp_dir, working_dir):
|
|||
|
||||
|
||||
@given(parse('the config "{config_file}" exists'), target_fixture="config_path")
|
||||
@given('the config "<config_file>" exists', target_fixture="config_path")
|
||||
def config_exists(config_file, temp_dir, working_dir):
|
||||
config_source = os.path.join(working_dir, "data", "configs", config_file)
|
||||
config_dest = os.path.join(temp_dir.name, config_file)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue