summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYounessBird <67457600+YounessBird@users.noreply.github.com>2022-07-05 09:01:27 +0100
committerYounessBird <67457600+YounessBird@users.noreply.github.com>2022-07-14 10:22:46 +0100
commit6d551603d06556e46c407e888f914cc28de0fa75 (patch)
tree7d3ea79813c7ce9585ae677c6f143d71234b58d4
parent9671e623706cf8a75d3898fc61822ea3b1be1250 (diff)
tests for key overrides
tests for key overrides tests for key overrides tests for key overrides
-rw-r--r--tests/file_ini.rs103
-rw-r--r--tests/file_json.rs105
-rw-r--r--tests/file_json5.rs104
-rw-r--r--tests/file_ron.rs104
-rw-r--r--tests/file_toml.rs104
-rw-r--r--tests/file_yaml.rs105
6 files changed, 625 insertions, 0 deletions
diff --git a/tests/file_ini.rs b/tests/file_ini.rs
index 4ebf6e3..e7f369a 100644
--- a/tests/file_ini.rs
+++ b/tests/file_ini.rs
@@ -66,3 +66,106 @@ 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", FileFormat::Ini))
+ .add_source(config::Environment::with_prefix("APP").separator("_"))
+ .build()
+ .unwrap();
+ let cap_settings = cfg.clone().try_deserialize::<CapSettings>();
+ let lower_settings = cfg.try_deserialize::<StructSettings>().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_foo", "I have been overridden_with_lower_case");
+
+ let cfg = Config::builder()
+ .add_source(File::new("tests/Settings", FileFormat::Ini))
+ .add_source(config::Environment::with_prefix("config").separator("_"))
+ .build()
+ .unwrap();
+
+ let values: StructSettings = cfg.try_deserialize().unwrap();
+ assert_eq!(
+ values.foo,
+ "I have been overridden_with_lower_case".to_string()
+ );
+ assert_ne!(values.foo, "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", FileFormat::Ini))
+ .add_source(config::Environment::with_prefix("APPS").separator("_"))
+ .build()
+ .unwrap();
+ let val: EnumSettings = cfg.try_deserialize().unwrap();
+
+ assert_eq!(
+ val,
+ 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", FileFormat::Ini))
+ .add_source(config::Environment::with_prefix("test").separator("_"))
+ .build()
+ .unwrap();
+
+ let param: EnumSettings = cfg.try_deserialize().unwrap();
+
+ assert_eq!(
+ param,
+ EnumSettings::Bar("I have been overridden_with_lower_case".to_string())
+ );
+}
diff --git a/tests/file_json.rs b/tests/file_json.rs
index e660997..91cbc9b 100644
--- a/tests/file_json.rs
+++ b/tests/file_json.rs
@@ -111,3 +111,108 @@ fn test_json_vec() {
assert_eq!(vi.next().unwrap().into_string().unwrap(), "example_dir2");
assert!(vi.next().is_none());
}
+
+#[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", FileFormat::Json))
+ .add_source(config::Environment::with_prefix("APP").separator("_"))
+ .build()
+ .unwrap();
+
+ let cap_settings = cfg.clone().try_deserialize::<CapSettings>();
+ let lower_settings = cfg.try_deserialize::<StructSettings>().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`") {
+ println!("triggered error {:?}", e);
+ 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_foo", "I have been overridden_with_lower_case");
+
+ let cfg = Config::builder()
+ .add_source(File::new("tests/Settings", FileFormat::Json))
+ .add_source(config::Environment::with_prefix("config").separator("_"))
+ .build()
+ .unwrap();
+
+ let values: StructSettings = cfg.try_deserialize().unwrap();
+ assert_eq!(
+ values.foo,
+ "I have been overridden_with_lower_case".to_string()
+ );
+ assert_ne!(values.foo, "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", FileFormat::Json))
+ .add_source(config::Environment::with_prefix("APPS").separator("_"))
+ .build()
+ .unwrap();
+ let val: EnumSettings = cfg.try_deserialize().unwrap();
+
+ assert_eq!(
+ val,
+ 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", FileFormat::Json))
+ .add_source(config::Environment::with_prefix("test").separator("_"))
+ .build()
+ .unwrap();
+
+ let param: EnumSettings = cfg.try_deserialize().unwrap();
+
+ assert_eq!(
+ param,
+ EnumSettings::Bar("I have been overridden_with_lower_case".to_string())
+ );
+}
diff --git a/tests/file_json5.rs b/tests/file_json5.rs
index 4bc17d7..74d06c2 100644
--- a/tests/file_json5.rs
+++ b/tests/file_json5.rs
@@ -89,3 +89,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", FileFormat::Json5))
+ .add_source(config::Environment::with_prefix("APP").separator("_"))
+ .build()
+ .unwrap();
+
+ let cap_settings = cfg.clone().try_deserialize::<CapSettings>();
+ let lower_settings = cfg.try_deserialize::<StructSettings>().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_foo", "I have been overridden_with_lower_case");
+
+ let cfg = Config::builder()
+ .add_source(File::new("tests/Settings", FileFormat::Json5))
+ .add_source(config::Environment::with_prefix("config").separator("_"))
+ .build()
+ .unwrap();
+
+ let values: StructSettings = cfg.try_deserialize().unwrap();
+ assert_eq!(
+ values.foo,
+ "I have been overridden_with_lower_case".to_string()
+ );
+ assert_ne!(values.foo, "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", FileFormat::Json5))
+ .add_source(config::Environment::with_prefix("APPS").separator("_"))
+ .build()
+ .unwrap();
+ let val: EnumSettings = cfg.try_deserialize().unwrap();
+
+ assert_eq!(
+ val,
+ 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", FileFormat::Json5))
+ .add_source(config::Environment::with_prefix("test").separator("_"))
+ .build()
+ .unwrap();
+
+ let param: EnumSettings = cfg.try_deserialize().unwrap();
+
+ assert_eq!(
+ param,
+ EnumSettings::Bar("I have been overridden_with_lower_case".to_string())
+ );
+}
diff --git a/tests/file_ron.rs b/tests/file_ron.rs
index 64e2cae..9f1ea35 100644
--- a/tests/file_ron.rs
+++ b/tests/file_ron.rs
@@ -89,3 +89,107 @@ fn test_error_parse() {
format!("4:1: Expected colon in {}", path_with_extension.display())
);
}
+
+#[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", FileFormat::Ron))
+ .add_source(config::Environment::with_prefix("APP").separator("_"))
+ .build()
+ .unwrap();
+
+ let cap_settings = cfg.clone().try_deserialize::<CapSettings>();
+ let lower_settings = cfg.try_deserialize::<StructSettings>().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_foo", "I have been overridden_with_lower_case");
+
+ let cfg = Config::builder()
+ .add_source(File::new("tests/Settings", FileFormat::Ron))
+ .add_source(config::Environment::with_prefix("config").separator("_"))
+ .build()
+ .unwrap();
+
+ let values: StructSettings = cfg.try_deserialize().unwrap();
+ assert_eq!(
+ values.foo,
+ "I have been overridden_with_lower_case".to_string()
+ );
+ assert_ne!(values.foo, "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", FileFormat::Ron))
+ .add_source(config::Environment::with_prefix("APPS").separator("_"))
+ .build()
+ .unwrap();
+ let val: EnumSettings = cfg.try_deserialize().unwrap();
+
+ assert_eq!(
+ val,
+ 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", FileFormat::Ron))
+ .add_source(config::Environment::with_prefix("test").separator("_"))
+ .build()
+ .unwrap();
+
+ let param: EnumSettings = cfg.try_deserialize().unwrap();
+
+ assert_eq!(
+ param,
+ EnumSettings::Bar("I have been overridden_with_lower_case".to_string())
+ );
+}
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::<CapSettings>();
+ let lower_settings = cfg.try_deserialize::<StructSettings>().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())
+ );
+}
diff --git a/tests/file_yaml.rs b/tests/file_yaml.rs
index 0ece482..b961c2a 100644
--- a/tests/file_yaml.rs
+++ b/tests/file_yaml.rs
@@ -120,3 +120,108 @@ fn test_yaml_parsing_key() {
"Test String"
);
}
+
+#[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.yaml", FileFormat::Yaml))
+ .add_source(config::Environment::with_prefix("APP").separator("_"))
+ .build()
+ .unwrap();
+
+ let cap_settings = cfg.clone().try_deserialize::<CapSettings>();
+ let lower_settings = cfg.try_deserialize::<StructSettings>().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`") {
+ println!("triggered error {:?}", e);
+ 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.yaml", FileFormat::Yaml))
+ .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.yaml", FileFormat::Yaml))
+ .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.yaml", FileFormat::Yaml))
+ .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())
+ );
+}