32 lines
1001 B
Python
32 lines
1001 B
Python
import pytest
|
|
|
|
from guardrails.utils.safe_get import safe_get
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"container,key,default,expected_value",
|
|
[
|
|
([1, 2, 3], 1, None, 2),
|
|
([1, 2, 3], 4, None, None),
|
|
([1, 2, 3], 4, 42, 42),
|
|
([1, 2, None], 2, 42, 42),
|
|
({"a": 1, "b": 2, "c": 3}, "b", None, 2),
|
|
({"a": 1, "b": 2, "c": 3}, "d", None, None),
|
|
({"a": 1, "b": 2, "c": 3}, "d", 42, 42),
|
|
("123", 1, None, "2"),
|
|
("123", 4, None, None),
|
|
("123", 4, 42, 42),
|
|
# Falsy values must be returned, not replaced by default
|
|
([0, "a", "b"], 0, None, 0),
|
|
([False, "a"], 0, None, False),
|
|
(["", "a"], 0, None, ""),
|
|
# Out-of-bounds and non-subscriptable containers use default
|
|
([], 0, "fallback", "fallback"),
|
|
(None, 0, "fallback", "fallback"),
|
|
],
|
|
)
|
|
def test_safe_get(container, key, default, expected_value):
|
|
actual = safe_get(container, key, default)
|
|
|
|
assert actual == expected_value
|