Files
tembo/tests/test_cli/test_cli.py
2021-11-04 00:01:38 +00:00

150 lines
3.8 KiB
Python

import importlib
import os
import pytest
import tembo.exceptions
import tembo.cli
from tembo.cli.cli import (
_new_verify_name_exists,
_new_get_config_scope,
_new_show_example,
)
def test_cli_page_is_saved_success():
pass
def test_new_verify_name_exists_success(shared_datadir):
# arrange
os.environ["TEMBO_CONFIG"] = str(shared_datadir / "config" / "success")
importlib.reload(tembo.cli)
# act
verified_name = _new_verify_name_exists("some_scope")
# assert
assert verified_name is None
# cleanup
del os.environ["TEMBO_CONFIG"]
def test_new_verify_name_exists_scope_not_found(shared_datadir):
# arrange
os.environ["TEMBO_CONFIG"] = str(shared_datadir / "config" / "success")
importlib.reload(tembo.cli)
from tembo.cli.cli import _new_verify_name_exists
# act
with pytest.raises(tembo.exceptions.ScopeNotFound) as scope_not_found:
_new_verify_name_exists("some_missing_scope")
# assert
assert (
str(scope_not_found.value)
== "Command some_missing_scope not found in config.yml"
)
# cleanup
del os.environ["TEMBO_CONFIG"]
def test_new_verify_name_exists_empty_config(shared_datadir):
# arrange
os.environ["TEMBO_CONFIG"] = str(shared_datadir / "config" / "empty")
importlib.reload(tembo.cli)
from tembo.cli.cli import _new_verify_name_exists
# act
with pytest.raises(tembo.exceptions.EmptyConfigYML) as empty_config_yml:
_new_verify_name_exists("some_missing_scope")
# assert
assert (
str(empty_config_yml.value)
== f'Config.yml found in {os.environ["TEMBO_CONFIG"]} is empty'
)
# cleanup
del os.environ["TEMBO_CONFIG"]
def test_new_verify_name_exists_missing_config(shared_datadir):
# arrange
os.environ["TEMBO_CONFIG"] = str(shared_datadir / "config" / "missing")
importlib.reload(tembo.cli)
from tembo.cli.cli import _new_verify_name_exists
# act
with pytest.raises(tembo.exceptions.MissingConfigYML) as missing_config_yml:
_new_verify_name_exists("some_missing_scope")
# assert
assert (
str(missing_config_yml.value)
== f'No config.yml found in {os.environ["TEMBO_CONFIG"]}'
)
# cleanup
del os.environ["TEMBO_CONFIG"]
def test_new_get_config_scope_success(shared_datadir):
# arrange
os.environ["TEMBO_CONFIG"] = str(shared_datadir / "config" / "optional_keys")
importlib.reload(tembo.cli)
# act
config_scope = _new_get_config_scope("some_scope")
# assert
assert config_scope == {
"name": "some_scope",
"path": "some_scope",
"filename": "{name}",
"extension": "md",
"example": None,
"template_filename": None,
}
def test_new_get_config_scope_key_not_found(shared_datadir):
# arrange
os.environ["TEMBO_CONFIG"] = str(shared_datadir / "config" / "missing_keys")
importlib.reload(tembo.cli)
# act
with pytest.raises(
tembo.exceptions.MandatoryKeyNotFound
) as mandatory_key_not_found:
config_scope = _new_get_config_scope("some_scope")
# assert
assert (
str(mandatory_key_not_found.value) == "Key 'filename' not found in config.yml"
)
@pytest.mark.parametrize(
"path,message",
[
("success", "[TEMBO] Example for some_scope: tembo new some_scope 🐘\n"),
("optional_keys", "[TEMBO] No example in config.yml 🐘\n"),
],
)
def test_new_show_example(path, message, shared_datadir, capsys):
# arrange
os.environ["TEMBO_CONFIG"] = str(shared_datadir / "config" / path)
importlib.reload(tembo.cli)
config_scope = _new_get_config_scope("some_scope")
# act
with pytest.raises(SystemExit) as system_exit:
_new_show_example(True, config_scope)
# assert
assert capsys.readouterr().out == message
assert system_exit.value.code == 0