Changeset View
Changeset View
Standalone View
Standalone View
swh/web/client/tests/test_cli.py
# Copyright (C) 2020-2021 The Software Heritage developers | # Copyright (C) 2020-2021 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU General Public License version 3, or any later version | # License: GNU General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
import json | import json | ||||
import os | import os | ||||
from click.testing import CliRunner | from click.testing import CliRunner | ||||
from swh.web.client.cli import auth, web | from swh.web.client.cli import auth_cli, auth_generate_token, auth_revoke_token, web | ||||
runner = CliRunner() | runner = CliRunner() | ||||
oidc_profile = { | |||||
"access_token": "some-access-token", | |||||
"expires_in": 600, | |||||
"refresh_expires_in": 0, | |||||
"refresh_token": "some-refresh-token", | |||||
"token_type": "bearer", | |||||
"session_state": "some-state", | |||||
"scope": "openid email profile offline_access", | |||||
} | |||||
def test_auth_generate_token(mocker): | def test_auth_generate_token(mocker): | ||||
mock_getpass = mocker.patch("getpass.getpass") | forward_context = mocker.patch("swh.web.client.cli._forward_context") | ||||
mock_getpass.return_value = "password" | runner.invoke(web, ["auth", "generate-token", "username"]) | ||||
mock_oidc_session = mocker.patch("swh.web.client.auth.OpenIDConnectSession") | assert forward_context.call_count == 2 | ||||
mock_login = mock_oidc_session.return_value.login | ctx = forward_context.call_args_list[0][0][0] | ||||
mock_login.return_value = oidc_profile | ctx2 = forward_context.call_args_list[1][0][0] | ||||
forward_context.assert_has_calls( | |||||
for command in ("generate-token", "login"): | [ | ||||
mock_login.side_effect = None | mocker.call(ctx, auth_cli, client_id="swh-web"), | ||||
result = runner.invoke(auth, [command, "username"], input="password\n") | mocker.call(ctx2, auth_generate_token, username="username"), | ||||
assert result.exit_code == 0 | ] | ||||
assert oidc_profile["refresh_token"] in result.output | ) | ||||
mock_login.side_effect = Exception("Auth error") | |||||
result = runner.invoke(auth, [command, "username"], input="password\n") | |||||
assert result.exit_code == 1 | |||||
def test_auth_revoke_token(mocker): | def test_auth_revoke_token(mocker): | ||||
forward_context = mocker.patch("swh.web.client.cli._forward_context") | |||||
mock_oidc_session = mocker.patch("swh.web.client.auth.OpenIDConnectSession") | runner.invoke(web, ["auth", "revoke-token", "token"]) | ||||
mock_logout = mock_oidc_session.return_value.logout | assert forward_context.call_count == 2 | ||||
ctx = forward_context.call_args_list[0][0][0] | |||||
for command in ("revoke-token", "logout"): | ctx2 = forward_context.call_args_list[1][0][0] | ||||
mock_logout.side_effect = None | forward_context.assert_has_calls( | ||||
result = runner.invoke(auth, [command, oidc_profile["refresh_token"]]) | [ | ||||
assert result.exit_code == 0 | mocker.call(ctx, auth_cli, client_id="swh-web"), | ||||
mocker.call(ctx2, auth_revoke_token, token="token"), | |||||
mock_logout.side_effect = Exception("Auth error") | ] | ||||
result = runner.invoke(auth, [command, oidc_profile["refresh_token"]]) | ) | ||||
assert result.exit_code == 1 | |||||
def test_save_code_now_through_cli(mocker, web_api_mock, tmp_path, cli_config_path): | def test_save_code_now_through_cli(mocker, web_api_mock, tmp_path, cli_config_path): | ||||
"""Trigger save code now from the cli creates new save code now requests""" | """Trigger save code now from the cli creates new save code now requests""" | ||||
origins = [ | origins = [ | ||||
("git", "https://gitlab.org/gazelle/itest"), | ("git", "https://gitlab.org/gazelle/itest"), | ||||
("git", "https://git.renater.fr/anonscm/git/6po/6po.git"), | ("git", "https://git.renater.fr/anonscm/git/6po/6po.git"), | ||||
("git", "https://github.com/colobot/colobot"), | ("git", "https://github.com/colobot/colobot"), | ||||
▲ Show 20 Lines • Show All 50 Lines • Show Last 20 Lines |