106 lines
3.7 KiB
Python
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) |