diff --git a/tests/conftest.py b/tests/conftest.py index ce279162f..fdc896266 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -308,3 +308,11 @@ def test_component_code(): # load the content as a string with open(path, "r") as f: return f.read() + + +@pytest.fixture +def test_component_with_templatefield_code(): + path = Path(__file__).parent.absolute() / "data" / "component_with_templatefield.py" + # load the content as a string + with open(path, "r") as f: + return f.read() diff --git a/tests/data/component_with_templatefield.py b/tests/data/component_with_templatefield.py new file mode 100644 index 000000000..725bec9b2 --- /dev/null +++ b/tests/data/component_with_templatefield.py @@ -0,0 +1,17 @@ +import random + +from langflow import CustomComponent +from langflow.template.field.base import TemplateField + + +class TestComponent(CustomComponent): + def refresh_values(self): + # This is a function that will be called every time the component is updated + # and should return a list of random strings + return [f"Random {random.randint(1, 100)}" for _ in range(5)] + + def build_config(self): + return {"param": TemplateField(display_name="Param", options=self.refresh_values)} + + def build(self, param: int): + return param diff --git a/tests/test_custom_component.py b/tests/test_custom_component.py index 3be85ddd2..007374763 100644 --- a/tests/test_custom_component.py +++ b/tests/test_custom_component.py @@ -549,3 +549,17 @@ def test_build_langchain_template_custom_component_valid_code(test_component_cod frontend_node = build_custom_component_template(component, update_field="param") new_param_options = frontend_node["template"]["param"]["options"] assert param_options != new_param_options + + +def test_build_langchain_template_custom_component_templatefield(test_component_with_templatefield_code): + component = create_and_validate_component(test_component_with_templatefield_code) + frontend_node = build_custom_component_template(component) + assert isinstance(frontend_node, dict) + template = frontend_node["template"] + assert isinstance(template, dict) + assert "param" in template + param_options = template["param"]["options"] + # Now run it again with an update field + frontend_node = build_custom_component_template(component, update_field="param") + new_param_options = frontend_node["template"]["param"]["options"] + assert param_options != new_param_options