httpie-cli/tests/test_auth_plugins.py

136 lines
3.6 KiB
Python
Raw Normal View History

from unittest import mock
2016-11-23 23:09:45 +01:00
2019-08-31 15:17:10 +02:00
from httpie.cli.constants import SEPARATOR_CREDENTIALS
from httpie.plugins import AuthPlugin
from httpie.plugins.registry import plugin_manager
from .utils import http, HTTP_OK
# TODO: run all these tests in session mode as well
2016-11-23 23:09:45 +01:00
USERNAME = 'user'
PASSWORD = 'password'
# Basic auth encoded `USERNAME` and `PASSWORD`
2016-11-24 00:58:41 +01:00
# noinspection SpellCheckingInspection
2016-11-23 23:09:45 +01:00
BASIC_AUTH_HEADER_VALUE = 'Basic dXNlcjpwYXNzd29yZA=='
BASIC_AUTH_URL = f'/basic-auth/{USERNAME}/{PASSWORD}'
2016-11-23 23:09:45 +01:00
AUTH_OK = {'authenticated': True, 'user': USERNAME}
2016-11-23 23:15:18 +01:00
def basic_auth(header=BASIC_AUTH_HEADER_VALUE):
def inner(r):
2016-11-23 23:15:18 +01:00
r.headers['Authorization'] = header
return r
return inner
2016-11-23 22:29:36 +01:00
def test_auth_plugin_parse_auth_false(httpbin):
2016-11-23 23:09:45 +01:00
class Plugin(AuthPlugin):
2016-11-23 23:15:18 +01:00
auth_type = 'test-parse-false'
auth_parse = False
def get_auth(self, username=None, password=None):
assert username is None
assert password is None
assert self.raw_auth == BASIC_AUTH_HEADER_VALUE
2016-11-23 23:15:18 +01:00
return basic_auth(self.raw_auth)
2016-11-23 23:09:45 +01:00
plugin_manager.register(Plugin)
try:
r = http(
httpbin + BASIC_AUTH_URL,
2016-11-23 23:09:45 +01:00
'--auth-type',
Plugin.auth_type,
'--auth',
BASIC_AUTH_HEADER_VALUE,
)
assert HTTP_OK in r
2016-11-23 23:09:45 +01:00
assert r.json == AUTH_OK
finally:
2016-11-23 23:09:45 +01:00
plugin_manager.unregister(Plugin)
2016-11-23 22:29:36 +01:00
def test_auth_plugin_require_auth_false(httpbin):
2016-11-23 23:09:45 +01:00
class Plugin(AuthPlugin):
2016-11-23 23:15:18 +01:00
auth_type = 'test-require-false'
auth_require = False
def get_auth(self, username=None, password=None):
assert self.raw_auth is None
assert username is None
assert password is None
2016-11-23 23:15:18 +01:00
return basic_auth()
2016-11-23 23:09:45 +01:00
plugin_manager.register(Plugin)
try:
r = http(
httpbin + BASIC_AUTH_URL,
'--auth-type',
Plugin.auth_type,
)
assert HTTP_OK in r
assert r.json == AUTH_OK
finally:
plugin_manager.unregister(Plugin)
def test_auth_plugin_require_auth_false_and_auth_provided(httpbin):
class Plugin(AuthPlugin):
2016-11-23 23:15:18 +01:00
auth_type = 'test-require-false-yet-provided'
2016-11-23 23:09:45 +01:00
auth_require = False
def get_auth(self, username=None, password=None):
2019-08-31 15:17:10 +02:00
assert self.raw_auth == USERNAME + SEPARATOR_CREDENTIALS + PASSWORD
2016-11-23 23:09:45 +01:00
assert username == USERNAME
assert password == PASSWORD
2016-11-23 23:15:18 +01:00
return basic_auth()
2016-11-23 23:09:45 +01:00
plugin_manager.register(Plugin)
try:
r = http(
httpbin + BASIC_AUTH_URL,
2016-11-23 23:09:45 +01:00
'--auth-type',
Plugin.auth_type,
'--auth',
2019-08-31 15:17:10 +02:00
USERNAME + SEPARATOR_CREDENTIALS + PASSWORD,
)
assert HTTP_OK in r
2016-11-23 23:09:45 +01:00
assert r.json == AUTH_OK
finally:
2016-11-23 23:09:45 +01:00
plugin_manager.unregister(Plugin)
2019-08-31 15:17:10 +02:00
@mock.patch('httpie.cli.argtypes.AuthCredentials._getpass',
2016-11-23 23:15:18 +01:00
new=lambda self, prompt: 'UNEXPECTED_PROMPT_RESPONSE')
2016-11-23 22:29:36 +01:00
def test_auth_plugin_prompt_password_false(httpbin):
2016-11-23 23:09:45 +01:00
class Plugin(AuthPlugin):
2016-11-23 23:15:18 +01:00
auth_type = 'test-prompt-false'
prompt_password = False
def get_auth(self, username=None, password=None):
2016-11-23 23:09:45 +01:00
assert self.raw_auth == USERNAME
assert username == USERNAME
assert password is None
2016-11-23 23:15:18 +01:00
return basic_auth()
2016-11-23 23:09:45 +01:00
plugin_manager.register(Plugin)
try:
r = http(
httpbin + BASIC_AUTH_URL,
2016-11-23 23:09:45 +01:00
'--auth-type',
Plugin.auth_type,
'--auth',
USERNAME,
)
assert HTTP_OK in r
2016-11-23 23:09:45 +01:00
assert r.json == AUTH_OK
finally:
2016-11-23 23:09:45 +01:00
plugin_manager.unregister(Plugin)