test: add tests for Application class

Need more attention here. Very difficult to test the keyboard interaction with questionary. Going to try using pexpect soon to hopefully add better coverage.
This commit is contained in:
Nathaniel Landau
2023-01-23 00:31:08 +00:00
parent 3fd6866760
commit b7735760e9
6 changed files with 67 additions and 5 deletions

View File

@@ -132,7 +132,7 @@ def clean_dictionary(dictionary: dict[str, Any]) -> dict[str, Any]:
return new_dict
def clear_screen() -> None:
def clear_screen() -> None: # pragma: no cover
"""Clears the screen."""
# for windows
_ = system("cls") if name == "nt" else system("clear")

View File

@@ -34,8 +34,6 @@ class Application:
]
)
clear_screen()
def load_vault(self, path_filter: str = None) -> None:
"""Load the vault.
@@ -47,6 +45,7 @@ class Application:
def main_app(self) -> None: # noqa: C901
"""Questions for the main application."""
clear_screen()
self.load_vault()
while True:

View File

@@ -53,7 +53,7 @@ class Vault:
self.metadata.add_metadata(_note.inline_metadata.dict)
self.metadata.add_metadata({_note.inline_tags.metadata_key: _note.inline_tags.list})
def __rich_repr__(self) -> rich.repr.Result:
def __rich_repr__(self) -> rich.repr.Result: # pragma: no cover
"""Define rich representation of Vault."""
yield "vault_path", self.vault_path
yield "dry_run", self.dry_run

18
tests/application_test.py Normal file
View File

@@ -0,0 +1,18 @@
# type: ignore
"""Tests for the application module."""
from obsidian_metadata._config import Config
from obsidian_metadata.models.application import Application
def test_load_vault(test_vault) -> None:
"""Test application."""
vault_path = test_vault
config = Config(config_path="tests/fixtures/test_vault_config.toml", vault_path=vault_path)
app = Application(config=config, dry_run=False)
app.load_vault()
assert app.dry_run is False
assert app.config == config
assert app.vault.num_notes() == 2

View File

@@ -4,7 +4,8 @@
from typer.testing import CliRunner
from obsidian_metadata.cli import app
from tests.helpers import Regex
from .helpers import KeyInputs, Regex # noqa: F401
runner = CliRunner()
@@ -14,3 +15,29 @@ def test_version() -> None:
result = runner.invoke(app, ["--version"])
assert result.exit_code == 0
assert result.output == Regex(r"obsidian_metadata: v\d+\.\d+\.\d+$")
def test_application(test_vault, tmp_path) -> None:
"""Test the application."""
vault_path = test_vault
config_path = tmp_path / "config.toml"
result = runner.invoke(
app,
["--vault-path", vault_path, "--config-file", config_path],
# input=KeyInputs.DOWN + KeyInputs.DOWN + KeyInputs.DOWN + KeyInputs.ENTER, # noqa: ERA001
)
banner = r"""
___ _ _ _ _
/ _ \| |__ ___(_) __| (_) __ _ _ __
| | | | '_ \/ __| |/ _` | |/ _` | '_ \
| |_| | |_) \__ \ | (_| | | (_| | | | |
\___/|_.__/|___/_|\__,_|_|\__,_|_| |_|
| \/ | ___| |_ __ _ __| | __ _| |_ __ _
| |\/| |/ _ \ __/ _` |/ _` |/ _` | __/ _` |
| | | | __/ || (_| | (_| | (_| | || (_| |
|_| |_|\___|\__\__,_|\__,_|\__,_|\__\__,_|
"""
assert banner in result.output
assert result.exit_code == 1

View File

@@ -4,6 +4,24 @@
import re
class KeyInputs:
"""Key inputs for testing."""
DOWN = "\x1b[B"
UP = "\x1b[A"
LEFT = "\x1b[D"
RIGHT = "\x1b[C"
ENTER = "\r"
ESCAPE = "\x1b"
CONTROLC = "\x03"
BACK = "\x7f"
SPACE = " "
TAB = "\x09"
ONE = "1"
TWO = "2"
THREE = "3"
class Regex:
"""Assert that a given string meets some expectations.