Skip to content

Commit 370e2df

Browse files
committed
Fix tests manually
1 parent a1621ea commit 370e2df

File tree

5 files changed

+38
-30
lines changed

5 files changed

+38
-30
lines changed

examples/advanced/src/main.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
use clap_config_file::ClapConfigFile;
22
use serde::{Deserialize, Serialize};
3+
34
#[derive(Debug, Default, Deserialize, Serialize)]
45
pub struct ExtraSettings {
56
pub nesting_level: i64,
6-
pub allow_guest: bool,
7+
pub allow_guest: Option<bool>,
78
}
89

910
/// A single struct for both CLI and config file usage

examples/basic/Cargo.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,8 @@ serde_json = "1.0"
1212
serde_yaml = "0.9"
1313
toml = "0.8"
1414
log = "0.4"
15-
env_logger = "0.10"
15+
env_logger = "0.10"
16+
17+
[[bin]]
18+
name = "basic"
19+
path = "src/main.rs"

examples/basic/src/main.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,16 @@ use clap_config_file::ClapConfigFile;
55
#[config_file_name = "app-config"]
66
#[config_file_formats = "yaml,toml,json"]
77
struct AppConfig {
8-
pub database_url: String,
8+
#[config_arg()]
9+
pub database_url: Option<String>,
910

1011
#[config_arg(default_value = "8080")]
1112
pub port: u16,
1213

1314
#[config_arg(default_value = "false")]
1415
pub debug: Option<bool>,
1516
}
17+
1618
fn main() {
1719
let (cfg, maybe_path, maybe_fmt) = AppConfig::parse_info();
1820
println!("Final config:\n{:#?}", cfg);

tests/advanced.rs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,19 @@ use tempfile::TempDir;
77
fn extend_list_merging() -> Result<(), Box<dyn std::error::Error>> {
88
let dir = TempDir::new()?;
99
std::fs::write(dir.path().join("advanced-config.yaml"),
10-
"extend_list: [\"config_item\"]\noverwrite_list: [\"config_item\"]\nspecial_secret: \"secret\"\nextra_settings: { nesting_level: 3 }")?;
10+
"extend_list: [\"config_item\"]\noverwrite_list: [\"config_item\"]\nspecial_secret: \"secret\"\nextra_settings: { nesting_level: 3, allow_guest: false }")?;
1111

1212
Command::cargo_bin("advanced")?
1313
.current_dir(dir.path())
1414
.arg("--extend-list")
1515
.arg("cli_item")
1616
.assert()
1717
.success()
18-
.stdout(predicate::str::contains(
19-
"extend_list: [\"config_item\", \"cli_item\"]",
20-
));
18+
.stdout(
19+
predicate::str::contains("extend_list: [")
20+
.and(predicate::str::contains("\"config_item\""))
21+
.and(predicate::str::contains("\"cli_item\"")),
22+
);
2123

2224
Ok(())
2325
}
@@ -26,15 +28,18 @@ fn extend_list_merging() -> Result<(), Box<dyn std::error::Error>> {
2628
fn overwrite_list_cli() -> Result<(), Box<dyn std::error::Error>> {
2729
let dir = TempDir::new()?;
2830
std::fs::write(dir.path().join("advanced-config.yaml"),
29-
"overwrite_list: [\"config_item\"]\nspecial_secret: \"secret\"\nextra_settings: { nesting_level: 3 }")?;
31+
"overwrite_list: [\"config_item\"]\nspecial_secret: \"secret\"\nextra_settings: { nesting_level: 3, allow_guest: false }")?;
3032

3133
Command::cargo_bin("advanced")?
3234
.current_dir(dir.path())
3335
.arg("--overwrite-list")
3436
.arg("cli_item")
3537
.assert()
3638
.success()
37-
.stdout(predicate::str::contains("overwrite_list: [\"cli_item\"]"));
39+
.stdout(
40+
predicate::str::contains("overwrite_list: [")
41+
.and(predicate::str::contains("\"cli_item\"")),
42+
);
3843

3944
Ok(())
4045
}
@@ -44,7 +49,7 @@ fn config_only_field_from_file() -> Result<(), Box<dyn std::error::Error>> {
4449
let dir = TempDir::new()?;
4550
std::fs::write(
4651
dir.path().join("advanced-config.yaml"),
47-
"special_secret: \"from_config\"\nextra_settings: { nesting_level: 3 }",
52+
"special_secret: \"from_config\"\nextra_settings: { nesting_level: 3, allow_guest: false }",
4853
)?;
4954

5055
Command::cargo_bin("advanced")?

tests/basic.rs

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,40 @@
11
use assert_cmd::prelude::*;
22
use predicates::prelude::*;
3+
use std::path::Path;
34
use std::process::Command;
4-
use tempfile::TempDir;
55

66
#[test]
77
fn with_config_file() -> Result<(), Box<dyn std::error::Error>> {
8-
let dir = TempDir::new()?;
9-
std::fs::write(
10-
dir.path().join("app-config.yaml"),
11-
"port: 8080\ndatabase_url: \"postgres://localhost:5432/mydb\"",
12-
)?;
8+
// path to basic example
9+
let dir = Path::new("examples/basic");
1310

1411
Command::cargo_bin("basic")?
15-
.current_dir(dir.path())
12+
.current_dir(dir)
1613
.assert()
1714
.success()
15+
.stdout(predicate::str::contains("Final config:"))
1816
.stdout(predicate::str::contains("port: 8080"))
19-
.stdout(predicate::str::contains(
20-
"database_url: \"postgres://localhost:5432/mydb\"",
21-
));
17+
.stdout(predicate::str::contains("postgres://localhost:5432/mydb"))
18+
.stdout(predicate::str::contains("Loaded config from:"));
2219

2320
Ok(())
2421
}
2522

2623
#[test]
2724
fn cli_override_port() -> Result<(), Box<dyn std::error::Error>> {
28-
let dir = TempDir::new()?;
29-
std::fs::write(
30-
dir.path().join("app-config.yaml"),
31-
"port: 8080\ndatabase_url: \"postgres://localhost:5432/mydb\"",
32-
)?;
25+
// path to basic example
26+
let dir = Path::new("examples/basic");
3327

3428
Command::cargo_bin("basic")?
35-
.current_dir(dir.path())
29+
.current_dir(dir)
3630
.arg("--port")
3731
.arg("9090")
3832
.assert()
3933
.success()
34+
.stdout(predicate::str::contains("Final config:"))
4035
.stdout(predicate::str::contains("port: 9090"))
41-
.stdout(predicate::str::contains(
42-
"database_url: \"postgres://localhost:5432/mydb\"",
43-
));
36+
.stdout(predicate::str::contains("postgres://localhost:5432/mydb"))
37+
.stdout(predicate::str::contains("Loaded config from:"));
4438

4539
Ok(())
4640
}
@@ -51,8 +45,10 @@ fn no_config_uses_defaults() -> Result<(), Box<dyn std::error::Error>> {
5145
.arg("--no-config")
5246
.assert()
5347
.success()
48+
.stdout(predicate::str::contains("Final config:"))
5449
.stdout(predicate::str::contains("port: 8080"))
55-
.stdout(predicate::str::contains("database_url: \"\"")); // Default String is empty
50+
.stdout(predicate::str::contains("database_url: None"))
51+
.stdout(predicate::str::contains("No config file used"));
5652

5753
Ok(())
5854
}

0 commit comments

Comments
 (0)