package org.wildfly.swarm.container.config; import java.util.Properties; import org.junit.Test; import org.wildfly.swarm.spi.api.config.ConfigKey; import static org.fest.assertions.Assertions.assertThat; /** * @author Bob McWhirter */ public class ConfigViewTest { @Test public void testDefaultsOnly() { ConfigNode defaults = new ConfigNode() {{ child("cheese", "cheddar"); child("amount", "42"); child("company", new ConfigNode() {{ child("name", "cheeseCorp"); child("founded", "2017"); child("owners", new ConfigNode() {{ child("0", "bob"); child("1", "melissa"); }}); }}); }}; Properties props = new Properties(); ConfigViewImpl view = new ConfigViewImpl(); view.withDefaults(defaults); view.withProperties(props); view.activate(); assertThat(props.getProperty("cheese")).isEqualTo("cheddar"); assertThat(props.getProperty("amount")).isEqualTo("42"); assertThat(props.getProperty("company.name")).isEqualTo("cheeseCorp"); assertThat(props.getProperty("company.founded")).isEqualTo("2017"); assertThat(props.getProperty("company.owners.0")).isEqualTo("bob"); assertThat(props.getProperty("company.owners.1")).isEqualTo("melissa"); } @Test public void testDefaultsWithPropertyOverride() { ConfigNode defaults = new ConfigNode() {{ child("cheese", "cheddar"); child("amount", "42"); child("company", new ConfigNode() {{ child("name", "cheeseCorp"); child("founded", "2017"); child("owners", new ConfigNode() {{ child("0", "bob"); child("1", "melissa"); }}); }}); }}; Properties props = new Properties() {{ setProperty("company.name", "Wheel O'Cheese"); }}; ConfigViewImpl view = new ConfigViewImpl(); view.withDefaults(defaults); view.withProperties(props); view.activate(); assertThat(props.getProperty("cheese")).isEqualTo("cheddar"); assertThat(props.getProperty("amount")).isEqualTo("42"); assertThat(props.getProperty("company.name")).isEqualTo("Wheel O'Cheese"); assertThat(props.getProperty("company.founded")).isEqualTo("2017"); assertThat(props.getProperty("company.owners.0")).isEqualTo("bob"); assertThat(props.getProperty("company.owners.1")).isEqualTo("melissa"); } @Test public void testExplicitActivationOfOne() { ConfigNode defaults = new ConfigNode() {{ child("cheese", "cheddar"); child("amount", "42"); child("company", new ConfigNode() {{ child("name", "cheeseCorp"); child("founded", "2017"); child("owners", new ConfigNode() {{ child("0", "bob"); child("1", "melissa"); }}); }}); }}; ConfigNode staging = new ConfigNode() {{ child("cheese", "velveeta"); child("amount", "99"); child("company", new ConfigNode() {{ child("owners", new ConfigNode() {{ child("0", "bobStaging"); child("1", "melissaStaging"); }}); }}); }}; ConfigNode production = new ConfigNode() {{ child("cheese", "brie"); child("amount", "200"); child("company", new ConfigNode() {{ child("owners", new ConfigNode() {{ child("0", "bobProduction"); child("1", "melissaProduction"); }}); }}); }}; ConfigViewImpl view = new ConfigViewImpl(); view.withDefaults(defaults); view.withProperties(new Properties()); view.register("staging", staging); view.register("production", production); view.withProfile("staging"); view.activate(); assertThat(view.valueOf(ConfigKey.parse("cheese"))).isEqualTo("velveeta"); assertThat(view.valueOf(ConfigKey.parse("company.founded"))).isEqualTo("2017"); assertThat(view.valueOf(ConfigKey.parse("company.owners.0"))).isEqualTo("bobStaging"); assertThat(view.valueOf(ConfigKey.parse("company.owners.1"))).isEqualTo("melissaStaging"); } @Test public void testExplicitActivationOfSeveral() { ConfigNode defaults = new ConfigNode() {{ child("cheese", "cheddar"); child("amount", "42"); child("company", new ConfigNode() {{ child("name", "cheeseCorp"); child("founded", "2017"); child("owners", new ConfigNode() {{ child("0", "bob"); child("1", "melissa"); }}); }}); }}; ConfigNode cloud = new ConfigNode() {{ child("cheese", "velveeta"); child("amount", "99"); child("company", new ConfigNode() {{ child("owners", new ConfigNode() {{ child("0", "bobCloud"); }}); }}); }}; ConfigNode production = new ConfigNode() {{ child("cheese", "brie"); child("amount", "200"); child("company", new ConfigNode() {{ child("owners", new ConfigNode() {{ child("0", "bobProduction"); child("1", "melissaProduction"); }}); }}); }}; ConfigViewImpl view = new ConfigViewImpl(); view.withDefaults(defaults); view.withProperties(new Properties()); view.register("cloud", cloud); view.register("production", production); view.withProfile("cloud", "production"); view.activate(); assertThat(view.valueOf(ConfigKey.parse("cheese"))).isEqualTo("velveeta"); assertThat(view.valueOf(ConfigKey.parse("company.founded"))).isEqualTo("2017"); assertThat(view.valueOf(ConfigKey.parse("company.owners.0"))).isEqualTo("bobCloud"); assertThat(view.valueOf(ConfigKey.parse("company.owners.1"))).isEqualTo("melissaProduction"); } }