forked from preset-io/backend-sdk
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlib_test.py
106 lines (89 loc) · 2.94 KB
/
lib_test.py
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
"""
Tests for ``preset_cli.lib``.
"""
import logging
import pytest
from pytest_mock import MockerFixture
from preset_cli.exceptions import ErrorLevel, SupersetError
from preset_cli.lib import dict_merge, remove_root, setup_logging, validate_response
def test_remove_root() -> None:
"""
Test ``remove_root``.
"""
assert remove_root("bundle/database/examples.yaml") == "database/examples.yaml"
def test_setup_logging() -> None:
"""
Test ``setup_logging``.
"""
setup_logging("debug")
assert logging.root.level == logging.DEBUG
with pytest.raises(ValueError) as excinfo:
setup_logging("invalid")
assert str(excinfo.value) == "Invalid log level: invalid"
def test_validate_response(mocker: MockerFixture) -> None:
"""
Test ``validate_response``.
"""
response = mocker.MagicMock()
response.ok = True
validate_response(response)
# SIP-40 payload
response.ok = False
response.headers.get.return_value = "application/json"
response.json.return_value = {
"errors": [{"message": "Some message", "level": "error"}],
}
with pytest.raises(SupersetError) as excinfo:
validate_response(response)
assert excinfo.value.errors == [
{"message": "Some message", "level": ErrorLevel.ERROR},
]
# SIP-40-ish payload
response.ok = False
response.headers.get.return_value = "application/json"
response.json.return_value = {"errors": {"message": "Some message"}}
with pytest.raises(SupersetError) as excinfo:
validate_response(response)
assert excinfo.value.errors == [
{
"message": "Unknown error",
"error_type": "UNKNOWN_ERROR",
"level": ErrorLevel.ERROR,
"extra": {"errors": {"message": "Some message"}},
},
]
# Old error
response.ok = False
response.headers.get.return_value = "application/json"
response.json.return_value = {"message": "Some message"}
with pytest.raises(SupersetError) as excinfo:
validate_response(response)
assert excinfo.value.errors == [
{
"message": "Unknown error",
"error_type": "UNKNOWN_ERROR",
"level": ErrorLevel.ERROR,
"extra": {"message": "Some message"},
},
]
# Non JSON error
response.ok = False
response.headers.get.return_value = "text/plain"
response.text = "An error occurred"
with pytest.raises(SupersetError) as excinfo:
validate_response(response)
assert excinfo.value.errors == [
{
"message": "An error occurred",
"error_type": "UNKNOWN_ERROR",
"level": ErrorLevel.ERROR,
},
]
def test_dict_merge() -> None:
"""
Test ``dict_merge``.
"""
base = {"a": {"b": 42, "c": 43}, "d": 1, "e": 3}
overrides = {"a": {"c": 44}, "d": 2, "f": 3}
dict_merge(base, overrides)
assert base == {"a": {"b": 42, "c": 44}, "d": 2, "e": 3, "f": 3}