import pytest from src.gnome_extension_download_url.__main__ import main, HELP_MSG def test_main_empty_args(capsys, mocker): mocker.patch("sys.argv", ["/path/to/gnome-extension-download-url"]) try: main() except SystemExit as e: assert e.code == 1 captured = capsys.readouterr() assert captured.err == f"{HELP_MSG}\n" def test_main_help(capsys, mocker): mocker.patch("sys.argv", ["/path/to/gnome-extension-download-url", "--help"]) try: main() except SystemExit as e: assert e.code == 0 captured = capsys.readouterr() assert captured.out == f"{HELP_MSG}\n" def test_main_too_many_arguments(capsys, mocker): mocker.patch("sys.argv", [ "/path/to/gnome-extension-download-url", "1", "2", "3", "4" ]) try: main() except SystemExit as e: assert e.code == 1 captured = capsys.readouterr() assert captured.err == "Too many arguments. Use --help for usage.\n" def test_main_valid_args_only_extension_uuid(capsys, mocker): mock_get_gnome_extension_download_url = mocker.patch( "src.gnome_extension_download_url.__main__.get_gnome_extension_download_url", return_value="http://example.com/download") mocker.patch("sys.argv", [ "/path/to/gnome-extension-download-url", "extension-uuid", ]) try: main() except SystemExit as e: assert e.code == 0 captured = capsys.readouterr() assert captured.out == "http://example.com/download\n" mock_get_gnome_extension_download_url.assert_called_once_with( "extension-uuid", None, None) @pytest.mark.parametrize("extension_version", ["", "latest", "66"]) def test_main_valid_args_extension_uuid_and_extension_version( extension_version, capsys, mocker): mock_get_gnome_extension_download_url= mocker.patch( "src.gnome_extension_download_url.__main__.get_gnome_extension_download_url", return_value="http://example.com/download") mocker.patch("sys.argv", [ "/path/to/gnome-extension-download-url", "extension-uuid", extension_version, ]) try: main() except SystemExit as e: assert e.code == 0 captured = capsys.readouterr() assert captured.out == "http://example.com/download\n" mock_get_gnome_extension_download_url.assert_called_once_with( "extension-uuid", extension_version if extension_version != "" else None, None) @pytest.mark.parametrize("extension_version, gnome_shell_version", [ ("", ""), ("", "latest"), ("", "66"), ("latest", ""), ("latest", "latest"), ("latest", "3.38"), ("66", ""), ("66", "latest"), ("66", "46") ]) def test_main_valid_args_extension_uuid_extension_version_and_gnome_shell_version( extension_version, gnome_shell_version, capsys, mocker): mock_get_gnome_extension_download_url= mocker.patch( "src.gnome_extension_download_url.__main__.get_gnome_extension_download_url", return_value="http://example.com/download") mocker.patch("sys.argv", [ "/path/to/gnome-extension-download-url", "extension-uuid", extension_version, gnome_shell_version, ]) try: main() except SystemExit as e: assert e.code == 0 captured = capsys.readouterr() assert captured.out == "http://example.com/download\n" mock_get_gnome_extension_download_url.assert_called_once_with( "extension-uuid", extension_version if extension_version != "" else None, gnome_shell_version if gnome_shell_version != "" else None)