Spaces:
Running
Running
import pytest | |
from langflow.inputs.inputs import ( | |
BoolInput, | |
CodeInput, | |
DataInput, | |
DictInput, | |
DropdownInput, | |
FileInput, | |
FloatInput, | |
HandleInput, | |
InputTypesMap, | |
IntInput, | |
MessageTextInput, | |
MultilineInput, | |
MultilineSecretInput, | |
MultiselectInput, | |
NestedDictInput, | |
PromptInput, | |
SecretStrInput, | |
StrInput, | |
TableInput, | |
) | |
from langflow.inputs.utils import instantiate_input | |
from langflow.schema.message import Message | |
from pydantic import ValidationError | |
def test_table_input_valid(): | |
data = TableInput(name="valid_table", value=[{"key": "value"}, {"key2": "value2"}]) | |
assert data.value == [{"key": "value"}, {"key2": "value2"}] | |
def test_table_input_invalid(): | |
with pytest.raises(ValidationError): | |
TableInput(name="invalid_table", value="invalid") | |
with pytest.raises(ValidationError): | |
TableInput(name="invalid_table", value=[{"key": "value"}, "invalid"]) | |
def test_str_input_valid(): | |
data = StrInput(name="valid_str", value="This is a string") | |
assert data.value == "This is a string" | |
def test_str_input_invalid(): | |
with pytest.warns(UserWarning): | |
StrInput(name="invalid_str", value=1234) | |
def test_message_text_input_valid(): | |
data = MessageTextInput(name="valid_msg", value="This is a message") | |
assert data.value == "This is a message" | |
msg = Message(text="This is a message") | |
data = MessageTextInput(name="valid_msg", value=msg) | |
assert data.value == "This is a message" | |
def test_message_text_input_invalid(): | |
with pytest.raises(ValidationError): | |
MessageTextInput(name="invalid_msg", value=1234) | |
def test_instantiate_input_valid(): | |
data = {"name": "valid_input", "value": "This is a string"} | |
input_instance = instantiate_input("StrInput", data) | |
assert isinstance(input_instance, StrInput) | |
assert input_instance.value == "This is a string" | |
def test_instantiate_input_invalid(): | |
with pytest.raises(ValueError, match="Invalid input type: InvalidInput"): | |
instantiate_input("InvalidInput", {"name": "invalid_input", "value": "This is a string"}) | |
def test_handle_input_valid(): | |
data = HandleInput(name="valid_handle", input_types=["BaseLanguageModel"]) | |
assert data.input_types == ["BaseLanguageModel"] | |
def test_handle_input_invalid(): | |
with pytest.raises(ValidationError): | |
HandleInput(name="invalid_handle", input_types="BaseLanguageModel") | |
def test_data_input_valid(): | |
data_input = DataInput(name="valid_data", input_types=["Data"]) | |
assert data_input.input_types == ["Data"] | |
def test_prompt_input_valid(): | |
prompt_input = PromptInput(name="valid_prompt", value="Enter your name") | |
assert prompt_input.value == "Enter your name" | |
def test_code_input_valid(): | |
code_input = CodeInput(name="valid_code", value="def hello():\n print('Hello, World!')") | |
assert code_input.value == "def hello():\n print('Hello, World!')" | |
def test_multiline_input_valid(): | |
multiline_input = MultilineInput(name="valid_multiline", value="This is a\nmultiline input") | |
assert multiline_input.value == "This is a\nmultiline input" | |
assert multiline_input.multiline is True | |
def test_multiline_input_invalid(): | |
with pytest.raises(ValidationError): | |
MultilineInput(name="invalid_multiline", value=1234) | |
def test_multiline_secret_input_valid(): | |
multiline_secret_input = MultilineSecretInput(name="valid_multiline_secret", value="secret") | |
assert multiline_secret_input.value == "secret" | |
assert multiline_secret_input.password is True | |
def test_multiline_secret_input_invalid(): | |
with pytest.raises(ValidationError): | |
MultilineSecretInput(name="invalid_multiline_secret", value=1234) | |
def test_secret_str_input_valid(): | |
secret_str_input = SecretStrInput(name="valid_secret_str", value="supersecret") | |
assert secret_str_input.value == "supersecret" | |
assert secret_str_input.password is True | |
def test_secret_str_input_invalid(): | |
with pytest.raises(ValidationError): | |
SecretStrInput(name="invalid_secret_str", value=1234) | |
def test_int_input_valid(): | |
int_input = IntInput(name="valid_int", value=10) | |
assert int_input.value == 10 | |
def test_int_input_invalid(): | |
with pytest.raises(ValidationError): | |
IntInput(name="invalid_int", value="not_an_int") | |
def test_float_input_valid(): | |
float_input = FloatInput(name="valid_float", value=10.5) | |
assert float_input.value == 10.5 | |
def test_float_input_invalid(): | |
with pytest.raises(ValidationError): | |
FloatInput(name="invalid_float", value="not_a_float") | |
def test_bool_input_valid(): | |
bool_input = BoolInput(name="valid_bool", value=True) | |
assert bool_input.value is True | |
def test_bool_input_invalid(): | |
with pytest.raises(ValidationError): | |
BoolInput(name="invalid_bool", value="not_a_bool") | |
def test_nested_dict_input_valid(): | |
nested_dict_input = NestedDictInput(name="valid_nested_dict", value={"key": "value"}) | |
assert nested_dict_input.value == {"key": "value"} | |
def test_nested_dict_input_invalid(): | |
with pytest.raises(ValidationError): | |
NestedDictInput(name="invalid_nested_dict", value="not_a_dict") | |
def test_dict_input_valid(): | |
dict_input = DictInput(name="valid_dict", value={"key": "value"}) | |
assert dict_input.value == {"key": "value"} | |
def test_dict_input_invalid(): | |
with pytest.raises(ValidationError): | |
DictInput(name="invalid_dict", value="not_a_dict") | |
def test_dropdown_input_valid(): | |
dropdown_input = DropdownInput(name="valid_dropdown", options=["option1", "option2"]) | |
assert dropdown_input.options == ["option1", "option2"] | |
def test_dropdown_input_invalid(): | |
with pytest.raises(ValidationError): | |
DropdownInput(name="invalid_dropdown", options="option1") | |
def test_multiselect_input_valid(): | |
multiselect_input = MultiselectInput(name="valid_multiselect", value=["option1", "option2"]) | |
assert multiselect_input.value == ["option1", "option2"] | |
def test_multiselect_input_invalid(): | |
with pytest.raises(ValidationError): | |
MultiselectInput(name="invalid_multiselect", value="option1") | |
def test_file_input_valid(): | |
file_input = FileInput(name="valid_file", value=["/path/to/file"]) | |
assert file_input.value == ["/path/to/file"] | |
def test_instantiate_input_comprehensive(): | |
valid_data = { | |
"StrInput": {"name": "str_input", "value": "A string"}, | |
"IntInput": {"name": "int_input", "value": 10}, | |
"FloatInput": {"name": "float_input", "value": 10.5}, | |
"BoolInput": {"name": "bool_input", "value": True}, | |
"DictInput": {"name": "dict_input", "value": {"key": "value"}}, | |
"MultiselectInput": { | |
"name": "multiselect_input", | |
"value": ["option1", "option2"], | |
}, | |
} | |
for input_type, data in valid_data.items(): | |
input_instance = instantiate_input(input_type, data) | |
assert isinstance(input_instance, InputTypesMap[input_type]) | |
with pytest.raises(ValueError, match="Invalid input type: InvalidInput"): | |
instantiate_input("InvalidInput", {"name": "invalid_input", "value": "Invalid"}) | |