Files
Dorod-Sky/tests/unit/test_utils_templating.py

49 lines
1.7 KiB
Python
Raw Normal View History

import re
import pytest
from skyvern.utils.templating import Constants, get_missing_variables
@pytest.mark.parametrize(
"template,data,expected",
[
("", {}, set()),
("Hello {{ name }}", {"name": "World"}, set()),
("Hello {{ name }}", {"age": 30}, {"name"}),
("{{ one }}", {"one": 1, "two": 2}, set()), # extra vars allowed
# nested (dotted) variables
("{{ user.name }}", {"user": {"name": "Alice"}}, set()),
("{{ user.name }}", {"user": {"age": 30}}, {"user.name"}),
# list access
("{{ items[0] }}", {}, {"items"}),
("{{ items[0] }}", {"items": [1, 2, 3]}, set()),
("{{ items[0] }}", {"items": []}, {"items[0]"}),
# deeply nested lists and dicts
("{{ data.users[0].name }}", {"data": {"users": [{"name": "Bob"}]}}, set()),
("{{ data.users[0].name }}", {"data": {"users": [{}]}}, {"data.users[0].name"}),
("{{ data.users[0].name }}", {"data": {}}, {"data.users[0].name"}),
],
)
def test_get_missing_variables(template, data, expected):
missing_vars = get_missing_variables(template, data)
assert missing_vars == expected
@pytest.mark.parametrize(
"template,expected",
[
("{{ var }}", {"var"}),
("{{ var.attr }}", {"var.attr"}),
("{{ var[0] }}", {"var[0]"}),
("{{ var['key'] }}", {"var['key']"}),
('{{ var["key"] }}', {'var["key"]'}),
("{{ var.attr[0] }}", {"var.attr[0]"}),
("No variables here", set()),
("{{ var1 }} and {{ var2.attr }}", {"var1", "var2.attr"}),
],
)
def test_regex_missing_variable_pattern(template, expected):
matches = set(re.findall(Constants.MissingVariablePattern, template))
assert matches == expected