mirror of
https://github.com/httpie/cli.git
synced 2024-11-21 23:33:12 +01:00
156 lines
5.6 KiB
Python
156 lines
5.6 KiB
Python
import pytest
|
||
|
||
from httpie.status import ExitStatus
|
||
from tests.utils.plugins_cli import parse_listing
|
||
|
||
|
||
@pytest.mark.requires_installation
|
||
@pytest.mark.parametrize('cli_mode', [True, False])
|
||
def test_plugins_installation(httpie_plugins_success, interface, dummy_plugin, cli_mode):
|
||
lines = httpie_plugins_success('install', dummy_plugin.path, cli_mode=cli_mode)
|
||
assert lines[0].startswith(
|
||
f'Installing {dummy_plugin.path}'
|
||
)
|
||
assert f'Successfully installed {dummy_plugin.name}-{dummy_plugin.version}' in lines
|
||
assert interface.is_installed(dummy_plugin.name)
|
||
|
||
|
||
@pytest.mark.requires_installation
|
||
def test_plugin_installation_with_custom_config(httpie_plugins_success, interface, dummy_plugin):
|
||
interface.environment.config['default_options'] = ['--session-read-only', 'some-path.json', 'other', 'args']
|
||
interface.environment.config.save()
|
||
|
||
lines = httpie_plugins_success('install', dummy_plugin.path)
|
||
assert lines[0].startswith(
|
||
f'Installing {dummy_plugin.path}'
|
||
)
|
||
assert f'Successfully installed {dummy_plugin.name}-{dummy_plugin.version}' in lines
|
||
assert interface.is_installed(dummy_plugin.name)
|
||
|
||
|
||
@pytest.mark.requires_installation
|
||
@pytest.mark.parametrize('cli_mode', [True, False])
|
||
def test_plugins_listing(httpie_plugins_success, interface, dummy_plugin, cli_mode):
|
||
httpie_plugins_success('install', dummy_plugin.path, cli_mode=cli_mode)
|
||
data = parse_listing(httpie_plugins_success('list'))
|
||
|
||
assert data == {
|
||
dummy_plugin.name: dummy_plugin.dump()
|
||
}
|
||
|
||
|
||
@pytest.mark.requires_installation
|
||
def test_plugins_listing_multiple(interface, httpie_plugins_success, dummy_plugins):
|
||
paths = [plugin.path for plugin in dummy_plugins]
|
||
httpie_plugins_success('install', *paths)
|
||
data = parse_listing(httpie_plugins_success('list'))
|
||
|
||
assert data == {
|
||
plugin.name: plugin.dump()
|
||
for plugin in dummy_plugins
|
||
}
|
||
|
||
|
||
@pytest.mark.requires_installation
|
||
@pytest.mark.parametrize('cli_mode', [True, False])
|
||
def test_plugins_uninstall(interface, httpie_plugins_success, dummy_plugin, cli_mode):
|
||
httpie_plugins_success('install', dummy_plugin.path, cli_mode=cli_mode)
|
||
httpie_plugins_success('uninstall', dummy_plugin.name, cli_mode=cli_mode)
|
||
assert not interface.is_installed(dummy_plugin.name)
|
||
|
||
|
||
@pytest.mark.requires_installation
|
||
def test_plugins_listing_after_uninstall(interface, httpie_plugins_success, dummy_plugin):
|
||
httpie_plugins_success('install', dummy_plugin.path)
|
||
httpie_plugins_success('uninstall', dummy_plugin.name)
|
||
|
||
data = parse_listing(httpie_plugins_success('list'))
|
||
assert len(data) == 0
|
||
|
||
|
||
@pytest.mark.requires_installation
|
||
def test_plugins_uninstall_specific(interface, httpie_plugins_success):
|
||
new_plugin_1 = interface.make_dummy_plugin()
|
||
new_plugin_2 = interface.make_dummy_plugin()
|
||
target_plugin = interface.make_dummy_plugin()
|
||
|
||
httpie_plugins_success('install', new_plugin_1.path, new_plugin_2.path, target_plugin.path)
|
||
httpie_plugins_success('uninstall', target_plugin.name)
|
||
|
||
assert interface.is_installed(new_plugin_1.name)
|
||
assert interface.is_installed(new_plugin_2.name)
|
||
assert not interface.is_installed(target_plugin.name)
|
||
|
||
|
||
@pytest.mark.requires_installation
|
||
def test_plugins_installation_failed(httpie_plugins, interface):
|
||
plugin = interface.make_dummy_plugin(build=False)
|
||
result = httpie_plugins('install', plugin.path)
|
||
|
||
assert result.exit_status == ExitStatus.ERROR
|
||
assert result.stderr.splitlines()[-1].strip().startswith("Can't install")
|
||
|
||
|
||
@pytest.mark.requires_installation
|
||
def test_plugins_uninstall_non_existent(httpie_plugins, interface):
|
||
plugin = interface.make_dummy_plugin(build=False)
|
||
result = httpie_plugins('uninstall', plugin.name)
|
||
|
||
assert result.exit_status == ExitStatus.ERROR
|
||
assert (
|
||
result.stderr.splitlines()[-1].strip()
|
||
== f"Can't uninstall '{plugin.name}': package is not installed"
|
||
)
|
||
|
||
|
||
@pytest.mark.requires_installation
|
||
def test_plugins_double_uninstall(httpie_plugins, httpie_plugins_success, dummy_plugin):
|
||
httpie_plugins_success("install", dummy_plugin.path)
|
||
httpie_plugins_success("uninstall", dummy_plugin.name)
|
||
|
||
result = httpie_plugins("uninstall", dummy_plugin.name)
|
||
|
||
assert result.exit_status == ExitStatus.ERROR
|
||
assert (
|
||
result.stderr.splitlines()[-1].strip()
|
||
== f"Can't uninstall '{dummy_plugin.name}': package is not installed"
|
||
)
|
||
|
||
|
||
# TODO: Make this work on CI (stopped working at some point)
|
||
@pytest.mark.skip(reason='Doesn’t work in CI')
|
||
@pytest.mark.requires_installation
|
||
def test_plugins_upgrade(httpie_plugins, httpie_plugins_success, dummy_plugin):
|
||
httpie_plugins_success("install", dummy_plugin.path)
|
||
|
||
# Make a new version of the plugin
|
||
dummy_plugin.version = '2.0.0'
|
||
dummy_plugin.build()
|
||
|
||
httpie_plugins_success("upgrade", dummy_plugin.path)
|
||
data = parse_listing(httpie_plugins_success('list'))
|
||
assert data[dummy_plugin.name]['version'] == '2.0.0'
|
||
|
||
|
||
@pytest.mark.requires_installation
|
||
def test_broken_plugins(httpie_plugins, httpie_plugins_success, dummy_plugin, broken_plugin):
|
||
httpie_plugins_success("install", dummy_plugin.path, broken_plugin.path)
|
||
|
||
with pytest.warns(
|
||
UserWarning,
|
||
match=(
|
||
f'While loading "{broken_plugin.name}", an error'
|
||
' occurred: broken plugin'
|
||
)
|
||
):
|
||
data = parse_listing(httpie_plugins_success('list'))
|
||
assert len(data) == 2
|
||
|
||
# We load before the uninstallation, so it will warn again.
|
||
with pytest.warns(UserWarning):
|
||
httpie_plugins_success("uninstall", broken_plugin.name)
|
||
|
||
# No warning now, since it is uninstalled.
|
||
data = parse_listing(httpie_plugins_success('list'))
|
||
assert len(data) == 1
|