-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.py
More file actions
65 lines (53 loc) · 2.03 KB
/
utils.py
File metadata and controls
65 lines (53 loc) · 2.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# Copyright Stacklet, Inc.
# SPDX-License-Identifier: Apache-2.0
import json
from typing import Any
from unittest import TestCase
from unittest.mock import patch
import requests_mock
from click.testing import CliRunner, Result
from stacklet.client.platform.cli import cli
from stacklet.client.platform.context import StackletContext
from stacklet.client.platform.executor import StackletGraphqlExecutor
JSONDict = dict[str, Any]
def get_executor_adapter():
context = StackletContext(
raw_config={
"cognito_user_pool_id": "foo",
"cognito_client_id": "bar",
"region": "us-east-1",
"api": "mock://stacklet.acme.org/api",
}
)
executor = StackletGraphqlExecutor(context=context, token="foo")
adapter = requests_mock.Adapter()
executor.session.mount("mock://", adapter)
return executor, adapter
class BaseCliTest(TestCase):
"""
Base Test Class for Cli Tests
"""
runner = CliRunner()
cli = cli
def run_query(
self, base_command: str, args: list[str], response: JSONDict
) -> tuple[Result, JSONDict]:
executor, adapter = get_executor_adapter()
adapter.register_uri(
"POST",
"mock://stacklet.acme.org/api",
json=response,
)
with patch("stacklet.client.platform.executor.requests.Session", autospec=True) as patched:
with patch("stacklet.client.platform.executor.get_token", return_value="foo"):
patched.return_value = executor.session
cli_args = [
base_command,
"--api=mock://stacklet.acme.org/api",
"--cognito-region=us-east-1",
"--cognito-user-pool-id=foo",
"--cognito-client-id=bar",
] + args
res = self.runner.invoke(self.cli, cli_args) # type: ignore
assert res.exit_code == 0, res.stderr
return res, json.loads(adapter.last_request.body.decode("utf-8")) # type: ignore