test_variables.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. from core.app.segments.variables import ArrayVariable, ObjectVariable
  12. def test_string_variable():
  13. test_data = {'value_type': 'string', 'name': 'test_text', 'value': 'Hello, World!'}
  14. result = factory.build_variable_from_mapping(test_data)
  15. assert isinstance(result, StringVariable)
  16. def test_integer_variable():
  17. test_data = {'value_type': 'number', 'name': 'test_int', 'value': 42}
  18. result = factory.build_variable_from_mapping(test_data)
  19. assert isinstance(result, IntegerVariable)
  20. def test_float_variable():
  21. test_data = {'value_type': 'number', 'name': 'test_float', 'value': 3.14}
  22. result = factory.build_variable_from_mapping(test_data)
  23. assert isinstance(result, FloatVariable)
  24. def test_secret_variable():
  25. test_data = {'value_type': 'secret', 'name': 'test_secret', 'value': 'secret_value'}
  26. result = factory.build_variable_from_mapping(test_data)
  27. assert isinstance(result, SecretVariable)
  28. def test_invalid_value_type():
  29. test_data = {'value_type': 'unknown', 'name': 'test_invalid', 'value': 'value'}
  30. with pytest.raises(ValueError):
  31. factory.build_variable_from_mapping(test_data)
  32. def test_frozen_variables():
  33. var = StringVariable(name='text', value='text')
  34. with pytest.raises(ValidationError):
  35. var.value = 'new value'
  36. int_var = IntegerVariable(name='integer', value=42)
  37. with pytest.raises(ValidationError):
  38. int_var.value = 100
  39. float_var = FloatVariable(name='float', value=3.14)
  40. with pytest.raises(ValidationError):
  41. float_var.value = 2.718
  42. secret_var = SecretVariable(name='secret', value='secret_value')
  43. with pytest.raises(ValidationError):
  44. secret_var.value = 'new_secret_value'
  45. def test_variable_value_type_immutable():
  46. with pytest.raises(ValidationError):
  47. StringVariable(value_type=SegmentType.ARRAY, name='text', value='text')
  48. with pytest.raises(ValidationError):
  49. StringVariable.model_validate({'value_type': 'not text', 'name': 'text', 'value': 'text'})
  50. var = IntegerVariable(name='integer', value=42)
  51. with pytest.raises(ValidationError):
  52. IntegerVariable(value_type=SegmentType.ARRAY, name=var.name, value=var.value)
  53. var = FloatVariable(name='float', value=3.14)
  54. with pytest.raises(ValidationError):
  55. FloatVariable(value_type=SegmentType.ARRAY, name=var.name, value=var.value)
  56. var = SecretVariable(name='secret', value='secret_value')
  57. with pytest.raises(ValidationError):
  58. SecretVariable(value_type=SegmentType.ARRAY, name=var.name, value=var.value)
  59. def test_build_a_blank_string():
  60. result = factory.build_variable_from_mapping(
  61. {
  62. 'value_type': 'string',
  63. 'name': 'blank',
  64. 'value': '',
  65. }
  66. )
  67. assert isinstance(result, StringVariable)
  68. assert result.value == ''
  69. def test_object_variable_to_object():
  70. var = ObjectVariable(
  71. name='object',
  72. value={
  73. 'key1': ObjectVariable(
  74. name='object',
  75. value={
  76. 'key2': StringVariable(name='key2', value='value2'),
  77. },
  78. ),
  79. 'key2': ArrayVariable(
  80. name='array',
  81. value=[
  82. StringVariable(name='key5_1', value='value5_1'),
  83. IntegerVariable(name='key5_2', value=42),
  84. ObjectVariable(name='key5_3', value={}),
  85. ],
  86. ),
  87. },
  88. )
  89. assert var.to_object() == {
  90. 'key1': {
  91. 'key2': 'value2',
  92. },
  93. 'key2': [
  94. 'value5_1',
  95. 42,
  96. {},
  97. ],
  98. }
  99. def test_variable_to_object():
  100. var = StringVariable(name='text', value='text')
  101. assert var.to_object() == 'text'
  102. var = IntegerVariable(name='integer', value=42)
  103. assert var.to_object() == 42
  104. var = FloatVariable(name='float', value=3.14)
  105. assert var.to_object() == 3.14
  106. var = SecretVariable(name='secret', value='secret_value')
  107. assert var.to_object() == 'secret_value'