test_variables.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import pytest
  2. from pydantic import ValidationError
  3. from core.app.segments import (
  4. FloatVariable,
  5. IntegerVariable,
  6. SecretVariable,
  7. SegmentType,
  8. StringVariable,
  9. factory,
  10. )
  11. def test_string_variable():
  12. test_data = {'value_type': 'string', 'name': 'test_text', 'value': 'Hello, World!'}
  13. result = factory.build_variable_from_mapping(test_data)
  14. assert isinstance(result, StringVariable)
  15. def test_integer_variable():
  16. test_data = {'value_type': 'number', 'name': 'test_int', 'value': 42}
  17. result = factory.build_variable_from_mapping(test_data)
  18. assert isinstance(result, IntegerVariable)
  19. def test_float_variable():
  20. test_data = {'value_type': 'number', 'name': 'test_float', 'value': 3.14}
  21. result = factory.build_variable_from_mapping(test_data)
  22. assert isinstance(result, FloatVariable)
  23. def test_secret_variable():
  24. test_data = {'value_type': 'secret', 'name': 'test_secret', 'value': 'secret_value'}
  25. result = factory.build_variable_from_mapping(test_data)
  26. assert isinstance(result, SecretVariable)
  27. def test_invalid_value_type():
  28. test_data = {'value_type': 'unknown', 'name': 'test_invalid', 'value': 'value'}
  29. with pytest.raises(ValueError):
  30. factory.build_variable_from_mapping(test_data)
  31. def test_frozen_variables():
  32. var = StringVariable(name='text', value='text')
  33. with pytest.raises(ValidationError):
  34. var.value = 'new value'
  35. int_var = IntegerVariable(name='integer', value=42)
  36. with pytest.raises(ValidationError):
  37. int_var.value = 100
  38. float_var = FloatVariable(name='float', value=3.14)
  39. with pytest.raises(ValidationError):
  40. float_var.value = 2.718
  41. secret_var = SecretVariable(name='secret', value='secret_value')
  42. with pytest.raises(ValidationError):
  43. secret_var.value = 'new_secret_value'
  44. def test_variable_value_type_immutable():
  45. with pytest.raises(ValidationError):
  46. StringVariable(value_type=SegmentType.ARRAY, name='text', value='text')
  47. with pytest.raises(ValidationError):
  48. StringVariable.model_validate({'value_type': 'not text', 'name': 'text', 'value': 'text'})
  49. var = IntegerVariable(name='integer', value=42)
  50. with pytest.raises(ValidationError):
  51. IntegerVariable(value_type=SegmentType.ARRAY, name=var.name, value=var.value)
  52. var = FloatVariable(name='float', value=3.14)
  53. with pytest.raises(ValidationError):
  54. FloatVariable(value_type=SegmentType.ARRAY, name=var.name, value=var.value)
  55. var = SecretVariable(name='secret', value='secret_value')
  56. with pytest.raises(ValidationError):
  57. SecretVariable(value_type=SegmentType.ARRAY, name=var.name, value=var.value)
  58. def test_build_a_blank_string():
  59. result = factory.build_variable_from_mapping(
  60. {
  61. 'value_type': 'string',
  62. 'name': 'blank',
  63. 'value': '',
  64. }
  65. )
  66. assert isinstance(result, StringVariable)
  67. assert result.value == ''