test_variables.py 4.4 KB

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