Skip to content

Commit 16291ce

Browse files
committed
Remove conditionals config after reading it + add nested conditionals test
1 parent 27379ec commit 16291ce

File tree

3 files changed

+47
-22
lines changed

3 files changed

+47
-22
lines changed

commons-spring/src/main/scala/com/avsystem/commons/spring/HoconBeanDefinitionReader.scala

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -346,22 +346,21 @@ class HoconBeanDefinitionReader(registry: BeanDefinitionRegistry)
346346

347347
private def readConditionals(config: Config): Config = {
348348
if (!config.hasPath("conditionals")) config
349-
else config.getList("conditionals").asScala.foldLeft(config)((currentConfig, conditionalObject) => {
349+
else config.getList("conditionals").asScala.foldLeft(config.withoutPath("conditionals"))((currentConfig, conditionalObject) => {
350350
val props = getProps(conditionalObject.as[ConfigObject])
351-
val newConfig = readConditionals(props("beans").as[Config])
352351

353352
if (props.get("condition").map(_.unwrapped().asInstanceOf[Boolean]).exists(identity)) {
354-
newConfig.withFallback(currentConfig)
353+
readConditionals(props("beans").as[Config]).withFallback(currentConfig)
355354
} else {
356355
currentConfig
357356
}
358357
})
359358
}
360359

361-
def loadBeanDefinitions(config: Config): Int = {
362-
val configWithConditionals = readConditionals(config)
363-
val beans = if (configWithConditionals.hasPath("beans")) configWithConditionals.getObject("beans") else ConfigFactory.empty.root
364-
val aliases = if (configWithConditionals.hasPath("aliases")) configWithConditionals.getObject("aliases") else ConfigFactory.empty.root
360+
def loadBeanDefinitions(resourceConfig: Config): Int = {
361+
val config = readConditionals(resourceConfig)
362+
val beans = if (config.hasPath("beans")) config.getObject("beans") else ConfigFactory.empty.root
363+
val aliases = if (config.hasPath("aliases")) config.getObject("aliases") else ConfigFactory.empty.root
365364
val result = readBeans(beans)
366365
readAliases(aliases)
367366
result
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
featureFlag.enabled = true
2+
3+
beans {
4+
testBean {
5+
%class = com.avsystem.commons.spring.TestBean
6+
}
7+
}
8+
9+
conditionals = [
10+
{condition: ${featureFlag.enabled}, beans: {beans.testBean.int = 0}},
11+
{condition: ${featureFlag.enabled}, beans: {beans.testBean.int = 1}},
12+
{
13+
condition: ${featureFlag.enabled}, beans: {
14+
conditionals = [
15+
{condition: true, beans: {beans.testBean.int = 2}}
16+
]
17+
}
18+
},
19+
{condition: false, beans: {beans.testBean.int = 3}},
20+
]

commons-spring/src/test/scala/com/avsystem/commons/spring/HoconBeanDefinitionReaderTest.scala

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -49,21 +49,6 @@ class HoconBeanDefinitionReaderTest extends AnyFunSuite {
4949
ctx
5050
}
5151

52-
test("file should be included with true condition") {
53-
ConditionalTestBean.initializedCount = 0
54-
val ctx = createContext("conditionalsEnabled.conf")
55-
val testBean = ctx.getBean("beanFromConditional", classOf[ConditionalTestBean])
56-
assert(testBean != null)
57-
assertResult(1)(ConditionalTestBean.initializedCount)
58-
}
59-
60-
test("file should not be included with false condition") {
61-
ConditionalTestBean.initializedCount = 0
62-
val ctx = createContext("conditionalsDisabled.conf")
63-
assert(!ctx.containsBean("beanFromConditional"))
64-
assertResult(0)(ConditionalTestBean.initializedCount)
65-
}
66-
6752
test("hocon bean definition reader should work") {
6853
val ctx = createContext("testBean.conf")
6954

@@ -106,4 +91,25 @@ class HoconBeanDefinitionReaderTest extends AnyFunSuite {
10691
assert(testBeanFMDefAll.constrInt == -1)
10792
assert(testBeanFMDefAll.constrString == "factoryDefault")
10893
}
94+
95+
test("file should be included with true condition") {
96+
ConditionalTestBean.initializedCount = 0
97+
val ctx = createContext("conditionalsEnabled.conf")
98+
val testBean = ctx.getBean("beanFromConditional", classOf[ConditionalTestBean])
99+
assert(testBean != null)
100+
assertResult(1)(ConditionalTestBean.initializedCount)
101+
}
102+
103+
test("file should not be included with false condition") {
104+
ConditionalTestBean.initializedCount = 0
105+
val ctx = createContext("conditionalsDisabled.conf")
106+
assert(!ctx.containsBean("beanFromConditional"))
107+
assertResult(0)(ConditionalTestBean.initializedCount)
108+
}
109+
110+
test("hocon bean definition with nested conditionals should work") {
111+
val ctx = createContext("conditionalsNested.conf")
112+
val testBean = ctx.getBean("testBean", classOf[TestBean])
113+
assert(testBean.int == 2)
114+
}
109115
}

0 commit comments

Comments
 (0)