참고소스 수정본
This commit is contained in:
156
참고/guardrails-main/tests/unit_tests/schema/test_parser.py
Normal file
156
참고/guardrails-main/tests/unit_tests/schema/test_parser.py
Normal file
@@ -0,0 +1,156 @@
|
||||
import json
|
||||
from typing import Any
|
||||
import pytest
|
||||
|
||||
from guardrails.schema.parser import (
|
||||
get_all_paths,
|
||||
get_value_from_path,
|
||||
write_value_to_path,
|
||||
)
|
||||
|
||||
|
||||
reader_object = {
|
||||
"a": 1,
|
||||
"b": {"b2": {"b3": 2}},
|
||||
"c": [{"c2": 31}, {"c2": 32}, {"c2": 33}],
|
||||
"d": {"d2": [1, 2, 3]},
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"path,expected_value",
|
||||
[
|
||||
("$.a", 1),
|
||||
("$.b.b2", {"b3": 2}),
|
||||
("$.b.b2.b3", 2),
|
||||
("$.c.2", {"c2": 33}),
|
||||
("$.c.1.c2", 32),
|
||||
("$.d.d2", [1, 2, 3]),
|
||||
("$.d.d2.0", 1),
|
||||
("$.d.d2.4", None),
|
||||
],
|
||||
)
|
||||
def test_get_value_from_path(path: str, expected_value: Any):
|
||||
actual_value = get_value_from_path(reader_object, path)
|
||||
assert actual_value == expected_value
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"existing_value,path,write_value,expected_value",
|
||||
[
|
||||
( # Writes new value top-level path
|
||||
{},
|
||||
"$.a",
|
||||
1,
|
||||
{"a": 1},
|
||||
),
|
||||
( # Writes new value at nested path
|
||||
{},
|
||||
"$.b.b2",
|
||||
{"b3": 2},
|
||||
{"b": {"b2": {"b3": 2}}},
|
||||
),
|
||||
( # Writes updated value at nested path
|
||||
{"b": {"b2": {"b3": 1}}},
|
||||
"$.b.b2.b3",
|
||||
2,
|
||||
{"b": {"b2": {"b3": 2}}},
|
||||
),
|
||||
( # Writes new value into empty array
|
||||
{},
|
||||
"$.c.2",
|
||||
3,
|
||||
{"c": [None, None, 3]},
|
||||
),
|
||||
( # Writes new value into existing array of object
|
||||
{"c": [{"c2": 31}]},
|
||||
"$.c.1.c2",
|
||||
32,
|
||||
{"c": [{"c2": 31}, {"c2": 32}]},
|
||||
),
|
||||
( # Writes updated value into existing array
|
||||
{"d": {"d2": [0, 2, 3]}},
|
||||
"$.d.d2.0",
|
||||
1,
|
||||
{"d": {"d2": [1, 2, 3]}},
|
||||
),
|
||||
],
|
||||
)
|
||||
def test_write_value_to_path(
|
||||
existing_value: Any, path: str, write_value: Any, expected_value: Any
|
||||
):
|
||||
actual_value = write_value_to_path(existing_value, path, write_value)
|
||||
assert actual_value == expected_value
|
||||
|
||||
|
||||
with open(
|
||||
"tests/integration_tests/test_assets/json_schemas/choice_case_openapi.json", "r"
|
||||
) as choice_case_openapi_file:
|
||||
choice_case_openapi_schema = json.loads(choice_case_openapi_file.read())
|
||||
|
||||
with open(
|
||||
"tests/integration_tests/test_assets/json_schemas/choice_case.json", "r"
|
||||
) as choice_case_file:
|
||||
choice_case_schema = json.loads(choice_case_file.read())
|
||||
|
||||
with open(
|
||||
"tests/integration_tests/test_assets/json_schemas/credit_card_agreement.json", "r"
|
||||
) as credit_card_agreement_file:
|
||||
credit_card_agreement_schema = json.loads(credit_card_agreement_file.read())
|
||||
|
||||
with open(
|
||||
"tests/integration_tests/test_assets/json_schemas/string.json", "r"
|
||||
) as string_file:
|
||||
string_schema = json.loads(string_file.read())
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"schema,expected_keys",
|
||||
[
|
||||
(
|
||||
choice_case_openapi_schema,
|
||||
set(
|
||||
[
|
||||
"$",
|
||||
"$.action",
|
||||
"$.action.chosen_action",
|
||||
"$.action.weapon",
|
||||
"$.action.flight_direction",
|
||||
"$.action.distance",
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
choice_case_schema,
|
||||
set(
|
||||
[
|
||||
"$",
|
||||
"$.action",
|
||||
"$.action.chosen_action",
|
||||
"$.action.weapon",
|
||||
"$.action.flight_direction",
|
||||
"$.action.distance",
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
credit_card_agreement_schema,
|
||||
set(
|
||||
[
|
||||
"$",
|
||||
"$.fees",
|
||||
"$.fees.index",
|
||||
"$.fees.name",
|
||||
"$.fees.explanation",
|
||||
"$.fees.value",
|
||||
"$.interest_rates",
|
||||
"$.interest_rates.*",
|
||||
]
|
||||
),
|
||||
),
|
||||
(string_schema, set(["$"])),
|
||||
],
|
||||
)
|
||||
def test_get_all_paths(schema, expected_keys):
|
||||
actual_keys = get_all_paths(schema)
|
||||
assert actual_keys == expected_keys
|
||||
Reference in New Issue
Block a user