Skip to content

Commit a1621ea

Browse files
committed
1 parent 8020427 commit a1621ea

File tree

3 files changed

+129
-27
lines changed

3 files changed

+129
-27
lines changed

tests/advanced.rs

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
use assert_cmd::prelude::*;
2+
use predicates::prelude::*;
3+
use std::process::Command;
4+
use tempfile::TempDir;
5+
6+
#[test]
7+
fn extend_list_merging() -> Result<(), Box<dyn std::error::Error>> {
8+
let dir = TempDir::new()?;
9+
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 }")?;
11+
12+
Command::cargo_bin("advanced")?
13+
.current_dir(dir.path())
14+
.arg("--extend-list")
15+
.arg("cli_item")
16+
.assert()
17+
.success()
18+
.stdout(predicate::str::contains(
19+
"extend_list: [\"config_item\", \"cli_item\"]",
20+
));
21+
22+
Ok(())
23+
}
24+
25+
#[test]
26+
fn overwrite_list_cli() -> Result<(), Box<dyn std::error::Error>> {
27+
let dir = TempDir::new()?;
28+
std::fs::write(dir.path().join("advanced-config.yaml"),
29+
"overwrite_list: [\"config_item\"]\nspecial_secret: \"secret\"\nextra_settings: { nesting_level: 3 }")?;
30+
31+
Command::cargo_bin("advanced")?
32+
.current_dir(dir.path())
33+
.arg("--overwrite-list")
34+
.arg("cli_item")
35+
.assert()
36+
.success()
37+
.stdout(predicate::str::contains("overwrite_list: [\"cli_item\"]"));
38+
39+
Ok(())
40+
}
41+
42+
#[test]
43+
fn config_only_field_from_file() -> Result<(), Box<dyn std::error::Error>> {
44+
let dir = TempDir::new()?;
45+
std::fs::write(
46+
dir.path().join("advanced-config.yaml"),
47+
"special_secret: \"from_config\"\nextra_settings: { nesting_level: 3 }",
48+
)?;
49+
50+
Command::cargo_bin("advanced")?
51+
.current_dir(dir.path())
52+
.assert()
53+
.success()
54+
.stdout(predicate::str::contains("special_secret: \"from_config\""));
55+
56+
Ok(())
57+
}
58+
59+
#[test]
60+
fn cli_config_only_field_error() -> Result<(), Box<dyn std::error::Error>> {
61+
Command::cargo_bin("advanced")?
62+
.arg("--special-secret")
63+
.arg("from_cli")
64+
.assert()
65+
.failure()
66+
.stderr(predicate::str::contains(
67+
"unexpected argument '--special-secret'",
68+
));
69+
70+
Ok(())
71+
}

tests/basic.rs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
use assert_cmd::prelude::*;
2+
use predicates::prelude::*;
3+
use std::process::Command;
4+
use tempfile::TempDir;
5+
6+
#[test]
7+
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+
)?;
13+
14+
Command::cargo_bin("basic")?
15+
.current_dir(dir.path())
16+
.assert()
17+
.success()
18+
.stdout(predicate::str::contains("port: 8080"))
19+
.stdout(predicate::str::contains(
20+
"database_url: \"postgres://localhost:5432/mydb\"",
21+
));
22+
23+
Ok(())
24+
}
25+
26+
#[test]
27+
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+
)?;
33+
34+
Command::cargo_bin("basic")?
35+
.current_dir(dir.path())
36+
.arg("--port")
37+
.arg("9090")
38+
.assert()
39+
.success()
40+
.stdout(predicate::str::contains("port: 9090"))
41+
.stdout(predicate::str::contains(
42+
"database_url: \"postgres://localhost:5432/mydb\"",
43+
));
44+
45+
Ok(())
46+
}
47+
48+
#[test]
49+
fn no_config_uses_defaults() -> Result<(), Box<dyn std::error::Error>> {
50+
Command::cargo_bin("basic")?
51+
.arg("--no-config")
52+
.assert()
53+
.success()
54+
.stdout(predicate::str::contains("port: 8080"))
55+
.stdout(predicate::str::contains("database_url: \"\"")); // Default String is empty
56+
57+
Ok(())
58+
}

tests/e2e.rs

Lines changed: 0 additions & 27 deletions
This file was deleted.

0 commit comments

Comments
 (0)