diff --git a/tests/test_arg_opts.py b/tests/test_arg_opts.py new file mode 100644 index 0000000..f0ecf7d --- /dev/null +++ b/tests/test_arg_opts.py @@ -0,0 +1,131 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import sys +import pytest +from src import boot + + +@pytest.fixture(autouse=True) +def argv_cleanup(): + """ + Clean up the command line arguments before each test. + """ + boot.init_opts() + argv_backup = sys.argv + sys.argv = ['syncplay'] + yield + sys.argv = argv_backup + + +def test_args_empty(): + """ + Test command line arguments in the empty case. + """ + options = boot.load_from_args() + assert isinstance(options, dict) and not options + + +@pytest.mark.parametrize( + 'name, arg_tag', + [ + ('port', '--port'), + ('max_username', '--max-username'), + ('max_chat_message', '--max-chat-message'), + ], +) +def test_args_single_int(name: str, arg_tag: str): + """ + Test command line arguments for single integer option. + """ + sys.argv += [arg_tag, '0'] + assert boot.load_from_args() == {name: 0} + + sys.argv += [arg_tag, '42'] + assert boot.load_from_args() == {name: 42} + + +@pytest.mark.parametrize( + 'name, arg_tag', + [ + ('config', '--config'), + ('password', '--password'), + ('motd', '--motd'), + ('salt', '--salt'), + ('listen_ipv4', '--listen-ipv4'), + ('listen_ipv6', '--listen-ipv6'), + ], +) +def test_args_single_str(name: str, arg_tag: str): + """ + Test command line arguments for single string option. + """ + sys.argv += [arg_tag, ''] + assert boot.load_from_args() == {name: ''} + + sys.argv += [arg_tag, 'TeSt \n0123456789\t'] + assert boot.load_from_args() == {name: 'TeSt \n0123456789\t'} + + +@pytest.mark.parametrize( + 'name, arg_tag', + [ + ('random_salt', '--random-salt'), + ('isolate_rooms', '--isolate-rooms'), + ('disable_chat', '--disable-chat'), + ('disable_ready', '--disable-ready'), + ('enable_stats', '--enable-stats'), + ('enable_tls', '--enable-tls'), + ('persistent', '--persistent'), + ], +) +def test_args_single_bool(name: str, arg_tag: str): + """ + Test command line arguments for single boolean option. + """ + sys.argv += [arg_tag] + assert boot.load_from_args() == {name: True} + + +def test_args_full(): + """ + Test all command line arguments options. + """ + # fmt: off + sys.argv += [ + '--config', 'config.yml', + '--port', '8999', + '--password', 'PASSWD', + '--motd', 'MESSAGE', + '--salt', 'SALT', + '--random-salt', + '--isolate-rooms', + '--disable-chat', + '--disable-ready', + '--enable-stats', + '--enable-tls', + '--persistent', + '--max-username', '120', + '--max-chat-message', '240', + '--listen-ipv4', '127.0.0.1', + '--listen-ipv6', '::1', + ] # fmt: on + excepted_opts = { + 'config': 'config.yml', + 'port': 8999, + 'password': 'PASSWD', + 'motd': 'MESSAGE', + 'salt': 'SALT', + 'random_salt': True, + 'isolate_rooms': True, + 'disable_chat': True, + 'disable_ready': True, + 'enable_stats': True, + 'enable_tls': True, + 'persistent': True, + 'max_username': 120, + 'max_chat_message': 240, + 'listen_ipv4': '127.0.0.1', + 'listen_ipv6': '::1', + } + assert boot.load_from_args() == excepted_opts diff --git a/tests/test_env_opts.py b/tests/test_env_opts.py index 8e6e824..d016d43 100644 --- a/tests/test_env_opts.py +++ b/tests/test_env_opts.py @@ -36,7 +36,7 @@ def test_env_empty(): ('max_chat_message', 'MAX_CHAT_MESSAGE'), ], ) -def test_env_int(name: str, env_tag: str): +def test_env_single_int(name: str, env_tag: str): """ Test environment variables for single integer option. """ @@ -58,7 +58,7 @@ def test_env_int(name: str, env_tag: str): ('listen_ipv6', 'LISTEN_IPV6'), ], ) -def test_env_str(name: str, env_tag: str): +def test_env_single_str(name: str, env_tag: str): """ Test environment variables for single string option. """ @@ -81,7 +81,7 @@ def test_env_str(name: str, env_tag: str): ('persistent', 'PERSISTENT'), ], ) -def test_env_bool(name: str, env_tag: str): +def test_env_single_bool(name: str, env_tag: str): """ Test environment variables for single boolean option. """