From 6d551603d06556e46c407e888f914cc28de0fa75 Mon Sep 17 00:00:00 2001 From: YounessBird <67457600+YounessBird@users.noreply.github.com> Date: Tue, 5 Jul 2022 09:01:27 +0100 Subject: tests for key overrides tests for key overrides tests for key overrides tests for key overrides --- tests/file_toml.rs | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) (limited to 'tests/file_toml.rs') diff --git a/tests/file_toml.rs b/tests/file_toml.rs index 9c5ee57..6ab1a2c 100644 --- a/tests/file_toml.rs +++ b/tests/file_toml.rs @@ -101,3 +101,107 @@ fn test_error_parse() { ) ); } + +#[derive(Debug, Deserialize, PartialEq)] +enum EnumSettings { + Bar(String), +} +#[derive(Debug, Deserialize, PartialEq)] +struct StructSettings { + foo: String, + bar: String, +} +#[derive(Debug, Deserialize, PartialEq)] +#[allow(non_snake_case)] +struct CapSettings { + FOO: String, +} + +#[test] +fn test_override_uppercase_value_for_struct() { + std::env::set_var("APP_FOO", "I HAVE BEEN OVERRIDDEN_WITH_UPPER_CASE"); + + let cfg = Config::builder() + .add_source(File::new("tests/Settings.toml", FileFormat::Toml)) + .add_source(config::Environment::with_prefix("APP").separator("_")) + .build() + .unwrap(); + + let cap_settings = cfg.clone().try_deserialize::(); + let lower_settings = cfg.try_deserialize::().unwrap(); + + match cap_settings { + Ok(v) => { + // this assertion will ensure that the map has only lowercase keys + assert_ne!(v.FOO, "FOO should be overridden"); + assert_eq!( + lower_settings.foo, + "I HAVE BEEN OVERRIDDEN_WITH_UPPER_CASE".to_string() + ); + } + Err(e) => { + if e.to_string().contains("missing field `FOO`") { + assert_eq!( + lower_settings.foo, + "I HAVE BEEN OVERRIDDEN_WITH_UPPER_CASE".to_string() + ); + } else { + panic!("{}", e); + } + } + } +} + +#[test] +fn test_override_lowercase_value_for_struct() { + std::env::set_var("config_bar", "I have been overridden_with_lower_case"); + + let cfg = Config::builder() + .add_source(File::new("tests/Settings.toml", FileFormat::Toml)) + .add_source(config::Environment::with_prefix("config").separator("_")) + .build() + .unwrap(); + + let values: StructSettings = cfg.try_deserialize().unwrap(); + assert_eq!( + values.bar, + "I have been overridden_with_lower_case".to_string() + ); + assert_ne!(values.bar, "I am bar".to_string()); +} + +#[test] +fn test_override_uppercase_value_for_enums() { + std::env::set_var("APPS_BAR", "I HAVE BEEN OVERRIDDEN_WITH_UPPER_CASE"); + + let cfg = Config::builder() + .add_source(File::new("tests/Settings-enum-test.toml", FileFormat::Toml)) + .add_source(config::Environment::with_prefix("APPS").separator("_")) + .build() + .unwrap(); + + let values: EnumSettings = cfg.try_deserialize().unwrap(); + + assert_eq!( + values, + EnumSettings::Bar("I HAVE BEEN OVERRIDDEN_WITH_UPPER_CASE".to_string()) + ); +} + +#[test] +fn test_override_lowercase_value_for_enums() { + std::env::set_var("test_bar", "I have been overridden_with_lower_case"); + + let cfg = Config::builder() + .add_source(File::new("tests/Settings-enum-test.toml", FileFormat::Toml)) + .add_source(config::Environment::with_prefix("test").separator("_")) + .build() + .unwrap(); + + let values: EnumSettings = cfg.try_deserialize().unwrap(); + + assert_eq!( + values, + EnumSettings::Bar("I have been overridden_with_lower_case".to_string()) + ); +} -- cgit v1.2.3