gnome-extension-download-url/tests/test_main.py

106 lines
3.7 KiB
Python

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)