diff options
Diffstat (limited to '')
-rw-r--r-- | tests/config_test.py | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/tests/config_test.py b/tests/config_test.py new file mode 100644 index 0000000..7b154ff --- /dev/null +++ b/tests/config_test.py @@ -0,0 +1,218 @@ +import re +import tempfile +from os import path +from typing import Dict, Optional + +import asciinema.config as cfg +from asciinema.config import Config + + +def create_config( + content: Optional[str] = None, env: Optional[Dict[str, str]] = None +) -> Config: + # avoid redefining `dir` builtin + dir_ = tempfile.mkdtemp() + + if content: + # avoid redefining `os.path` + path_ = f"{dir_}/config" + with open(path_, "wt", encoding="utf_8") as f: + f.write(content) + + return cfg.Config(dir_, env) + + +def read_install_id(install_id_path: str) -> str: + with open(install_id_path, "rt", encoding="utf_8") as f: + return f.read().strip() + + +def test_upgrade_no_config_file() -> None: + config = create_config() + config.upgrade() + install_id = read_install_id(config.install_id_path) + + assert re.match("^\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}", install_id) + assert install_id == config.install_id + assert not path.exists(config.config_file_path) + + # it must not change after another upgrade + + config.upgrade() + + assert read_install_id(config.install_id_path) == install_id + + +def test_upgrade_config_file_with_api_token() -> None: + config = create_config("[api]\ntoken = foo-bar-baz") + config.upgrade() + + assert read_install_id(config.install_id_path) == "foo-bar-baz" + assert config.install_id == "foo-bar-baz" + assert not path.exists(config.config_file_path) + + config.upgrade() + + assert read_install_id(config.install_id_path) == "foo-bar-baz" + + +def test_upgrade_config_file_with_api_token_and_more() -> None: + config = create_config( + "[api]\ntoken = foo-bar-baz\nurl = http://example.com" + ) + config.upgrade() + + assert read_install_id(config.install_id_path) == "foo-bar-baz" + assert config.install_id == "foo-bar-baz" + assert config.api_url == "http://example.com" + assert path.exists(config.config_file_path) + + config.upgrade() + + assert read_install_id(config.install_id_path) == "foo-bar-baz" + + +def test_upgrade_config_file_with_user_token() -> None: + config = create_config("[user]\ntoken = foo-bar-baz") + config.upgrade() + + assert read_install_id(config.install_id_path) == "foo-bar-baz" + assert config.install_id == "foo-bar-baz" + assert not path.exists(config.config_file_path) + + config.upgrade() + + assert read_install_id(config.install_id_path) == "foo-bar-baz" + + +def test_upgrade_config_file_with_user_token_and_more() -> None: + config = create_config( + "[user]\ntoken = foo-bar-baz\n[api]\nurl = http://example.com" + ) + config.upgrade() + + assert read_install_id(config.install_id_path) == "foo-bar-baz" + assert config.install_id == "foo-bar-baz" + assert config.api_url == "http://example.com" + assert path.exists(config.config_file_path) + + config.upgrade() + + assert read_install_id(config.install_id_path) == "foo-bar-baz" + + +def test_default_api_url() -> None: + config = create_config("") + assert config.api_url == "https://asciinema.org" + + +def test_default_record_stdin() -> None: + config = create_config("") + assert config.record_stdin is False + + +def test_default_record_command() -> None: + config = create_config("") + assert config.record_command is None + + +def test_default_record_env() -> None: + config = create_config("") + assert config.record_env == "SHELL,TERM" + + +def test_default_record_idle_time_limit() -> None: + config = create_config("") + assert config.record_idle_time_limit is None + + +def test_default_record_yes() -> None: + config = create_config("") + assert config.record_yes is False + + +def test_default_record_quiet() -> None: + config = create_config("") + assert config.record_quiet is False + + +def test_default_play_idle_time_limit() -> None: + config = create_config("") + assert config.play_idle_time_limit is None + + +def test_api_url() -> None: + config = create_config("[api]\nurl = http://the/url") + assert config.api_url == "http://the/url" + + +def test_api_url_when_override_set() -> None: + config = create_config( + "[api]\nurl = http://the/url", {"ASCIINEMA_API_URL": "http://the/url2"} + ) + assert config.api_url == "http://the/url2" + + +def test_record_command() -> None: + command = "bash -l" + config = create_config(f"[record]\ncommand = {command}") + assert config.record_command == command + + +def test_record_stdin() -> None: + config = create_config("[record]\nstdin = yes") + assert config.record_stdin is True + + +def test_record_env() -> None: + config = create_config("[record]\nenv = FOO,BAR") + assert config.record_env == "FOO,BAR" + + +def test_record_idle_time_limit() -> None: + config = create_config("[record]\nidle_time_limit = 2.35") + assert config.record_idle_time_limit == 2.35 + + config = create_config("[record]\nmaxwait = 2.35") + assert config.record_idle_time_limit == 2.35 + + +def test_record_yes() -> None: + yes = "yes" + config = create_config(f"[record]\nyes = {yes}") + assert config.record_yes is True + + +def test_record_quiet() -> None: + quiet = "yes" + config = create_config(f"[record]\nquiet = {quiet}") + assert config.record_quiet is True + + +def test_play_idle_time_limit() -> None: + config = create_config("[play]\nidle_time_limit = 2.35") + assert config.play_idle_time_limit == 2.35 + + config = create_config("[play]\nmaxwait = 2.35") + assert config.play_idle_time_limit == 2.35 + + +def test_notifications_enabled() -> None: + config = create_config("") + assert config.notifications_enabled is True + + config = create_config("[notifications]\nenabled = yes") + assert config.notifications_enabled is True + + config = create_config("[notifications]\nenabled = no") + assert config.notifications_enabled is False + + +def test_notifications_command() -> None: + config = create_config("") + assert config.notifications_command is None + + config = create_config( + '[notifications]\ncommand = tmux display-message "$TEXT"' + ) + assert config.notifications_command == 'tmux display-message "$TEXT"' |