PropertyResolverImplTest.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. package com.provectus.kafka.ui.serdes;
  2. import static org.assertj.core.api.Assertions.assertThat;
  3. import static org.assertj.core.api.Assertions.assertThatCode;
  4. import java.util.List;
  5. import java.util.Map;
  6. import lombok.AllArgsConstructor;
  7. import lombok.Data;
  8. import org.junit.jupiter.api.Nested;
  9. import org.junit.jupiter.api.Test;
  10. import org.springframework.boot.context.properties.bind.BindException;
  11. import org.springframework.mock.env.MockEnvironment;
  12. class PropertyResolverImplTest {
  13. private static final String TEST_STRING_VALUE = "testStr";
  14. private static final int TEST_INT_VALUE = 123;
  15. private static final List<String> TEST_STRING_LIST = List.of("v1", "v2", "v3");
  16. private static final List<Integer> TEST_INT_LIST = List.of(1, 2, 3);
  17. private final MockEnvironment env = new MockEnvironment();
  18. @Data
  19. @AllArgsConstructor
  20. public static class CustomPropertiesClass {
  21. private String f1;
  22. private Integer f2;
  23. }
  24. @Test
  25. void returnsEmptyOptionalWhenPropertyNotExist() {
  26. var resolver = new PropertyResolverImpl(env);
  27. assertThat(resolver.getProperty("nonExistingProp", String.class)).isEmpty();
  28. assertThat(resolver.getListProperty("nonExistingProp", String.class)).isEmpty();
  29. assertThat(resolver.getMapProperty("nonExistingProp", String.class, String.class)).isEmpty();
  30. }
  31. @Test
  32. void throwsExceptionWhenPropertyCantBeResolverToRequstedClass() {
  33. env.setProperty("prop.0.strProp", "testStr");
  34. env.setProperty("prop.0.strLst", "v1,v2,v3");
  35. env.setProperty("prop.0.strMap.k1", "v1");
  36. var resolver = new PropertyResolverImpl(env);
  37. assertThatCode(() -> resolver.getProperty("prop.0.strProp", Integer.class))
  38. .isInstanceOf(BindException.class);
  39. assertThatCode(() -> resolver.getListProperty("prop.0.strLst", Integer.class))
  40. .isInstanceOf(BindException.class);
  41. assertThatCode(() -> resolver.getMapProperty("prop.0.strMap", Integer.class, String.class))
  42. .isInstanceOf(BindException.class);
  43. }
  44. @Test
  45. void resolvedSingleValueProperties() {
  46. env.setProperty("prop.0.strProp", "testStr");
  47. env.setProperty("prop.0.intProp", "123");
  48. var resolver = new PropertyResolverImpl(env);
  49. assertThat(resolver.getProperty("prop.0.strProp", String.class))
  50. .hasValue("testStr");
  51. assertThat(resolver.getProperty("prop.0.intProp", Integer.class))
  52. .hasValue(123);
  53. }
  54. @Test
  55. void resolvesListProperties() {
  56. env.setProperty("prop.0.strLst", "v1,v2,v3");
  57. env.setProperty("prop.0.intLst", "1,2,3");
  58. var resolver = new PropertyResolverImpl(env);
  59. assertThat(resolver.getListProperty("prop.0.strLst", String.class))
  60. .hasValue(List.of("v1", "v2", "v3"));
  61. assertThat(resolver.getListProperty("prop.0.intLst", Integer.class))
  62. .hasValue(List.of(1, 2, 3));
  63. }
  64. @Test
  65. void resolvesCustomConfigClassProperties() {
  66. env.setProperty("prop.0.custProps.f1", "f1val");
  67. env.setProperty("prop.0.custProps.f2", "1234");
  68. var resolver = new PropertyResolverImpl(env);
  69. assertThat(resolver.getProperty("prop.0.custProps", CustomPropertiesClass.class))
  70. .hasValue(new CustomPropertiesClass("f1val", 1234));
  71. }
  72. @Test
  73. void resolvesMapProperties() {
  74. env.setProperty("prop.0.strMap.k1", "v1");
  75. env.setProperty("prop.0.strMap.k2", "v2");
  76. env.setProperty("prop.0.intToLongMap.100", "111");
  77. env.setProperty("prop.0.intToLongMap.200", "222");
  78. var resolver = new PropertyResolverImpl(env);
  79. assertThat(resolver.getMapProperty("prop.0.strMap", String.class, String.class))
  80. .hasValue(Map.of("k1", "v1", "k2", "v2"));
  81. assertThat(resolver.getMapProperty("prop.0.intToLongMap", Integer.class, Long.class))
  82. .hasValue(Map.of(100, 111L, 200, 222L));
  83. }
  84. @Nested
  85. class WithPrefix {
  86. @Test
  87. void resolvedSingleValueProperties() {
  88. env.setProperty("prop.0.strProp", "testStr");
  89. env.setProperty("prop.0.intProp", "123");
  90. var resolver = new PropertyResolverImpl(env, "prop.0");
  91. assertThat(resolver.getProperty("strProp", String.class))
  92. .hasValue(TEST_STRING_VALUE);
  93. assertThat(resolver.getProperty("intProp", Integer.class))
  94. .hasValue(TEST_INT_VALUE);
  95. }
  96. @Test
  97. void resolvesListProperties() {
  98. env.setProperty("prop.0.strLst", "v1,v2,v3");
  99. env.setProperty("prop.0.intLst", "1,2,3");
  100. var resolver = new PropertyResolverImpl(env, "prop.0");
  101. assertThat(resolver.getListProperty("strLst", String.class))
  102. .hasValue(TEST_STRING_LIST);
  103. assertThat(resolver.getListProperty("intLst", Integer.class))
  104. .hasValue(TEST_INT_LIST);
  105. }
  106. @Test
  107. void resolvesCustomConfigClassProperties() {
  108. env.setProperty("prop.0.custProps.f1", "f1val");
  109. env.setProperty("prop.0.custProps.f2", "1234");
  110. var resolver = new PropertyResolverImpl(env, "prop.0");
  111. assertThat(resolver.getProperty("custProps", CustomPropertiesClass.class))
  112. .hasValue(new CustomPropertiesClass("f1val", 1234));
  113. }
  114. @Test
  115. void resolvesMapProperties() {
  116. env.setProperty("prop.0.strMap.k1", "v1");
  117. env.setProperty("prop.0.strMap.k2", "v2");
  118. env.setProperty("prop.0.intToLongMap.100", "111");
  119. env.setProperty("prop.0.intToLongMap.200", "222");
  120. var resolver = new PropertyResolverImpl(env, "prop.0.");
  121. assertThat(resolver.getMapProperty("strMap", String.class, String.class))
  122. .hasValue(Map.of("k1", "v1", "k2", "v2"));
  123. assertThat(resolver.getMapProperty("intToLongMap", Integer.class, Long.class))
  124. .hasValue(Map.of(100, 111L, 200, 222L));
  125. }
  126. }
  127. }