#!/usr/bin/env python3 import argparse import io import os import unittest from unittest import TestCase from unittest.mock import patch import zulip from zulip import ZulipError class TestDefaultArguments(TestCase): def test_invalid_arguments(self) -> None: parser = zulip.add_default_arguments(argparse.ArgumentParser(usage="lorem ipsum")) with self.assertRaises(SystemExit) as cm: with patch("sys.stderr", new=io.StringIO()) as mock_stderr: parser.parse_args(["invalid argument"]) self.assertEqual(cm.exception.code, 2) # Assert that invalid arguments exit with printing the full usage (non-standard behavior) self.assertRegex( mock_stderr.getvalue(), r"""^usage: lorem ipsum (optional arguments|options): -h, --help show this help message and exit Zulip API configuration: --site ZULIP_SITE Zulip server URI """, ) @patch("os.path.exists", return_value=False) def test_config_path_with_tilde(self, mock_os_path_exists: bool) -> None: parser = zulip.add_default_arguments(argparse.ArgumentParser(usage="lorem ipsum")) test_path = "~/zuliprc" args = parser.parse_args(["--config-file", test_path]) with self.assertRaises(ZulipError) as cm: zulip.init_from_options(args) expanded_test_path = os.path.abspath(os.path.expanduser(test_path)) self.assertEqual( str(cm.exception), "api_key or email not specified and " "file {} does not exist".format(expanded_test_path), ) if __name__ == "__main__": unittest.main()