Skip to content

Commit 9ad19d8

Browse files
authored
Merge pull request #4 from bodo-run/deepseek-tests
Deepseek R1 tests
2 parents 8020427 + 36f8207 commit 9ad19d8

File tree

8 files changed

+151
-30
lines changed

8 files changed

+151
-30
lines changed

.github/workflows/ci.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,22 @@ env:
1717
CARGO_TERM_COLOR: always
1818

1919
jobs:
20+
build:
21+
name: Build
22+
runs-on: ubuntu-latest
23+
steps:
24+
- uses: actions/checkout@v4
25+
- uses: dtolnay/rust-toolchain@stable
26+
- run: cargo build --all-features
27+
2028
test:
2129
name: Test
2230
runs-on: ubuntu-latest
2331
steps:
2432
- uses: actions/checkout@v4
2533
- uses: dtolnay/rust-toolchain@stable
34+
- run: cd examples/basic && cargo build --all-features
35+
- run: cd examples/advanced && cargo build --all-features
2636
- run: cargo test --all-features
2737
- run: cargo run --example basic
2838
- run: cargo run --example advanced

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,4 @@ path = "examples/basic/src/main.rs"
4343
[[example]]
4444
name = "advanced"
4545
path = "examples/advanced/src/main.rs"
46+

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

tests/basic.rs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
use assert_cmd::prelude::*;
2+
use predicates::prelude::*;
3+
use std::path::Path;
4+
use std::process::Command;
5+
6+
#[test]
7+
fn with_config_file() -> Result<(), Box<dyn std::error::Error>> {
8+
// path to basic example
9+
let dir = Path::new("examples/basic");
10+
11+
Command::cargo_bin("basic")?
12+
.current_dir(dir)
13+
.assert()
14+
.success()
15+
.stdout(predicate::str::contains("Final config:"))
16+
.stdout(predicate::str::contains("port: 8080"))
17+
.stdout(predicate::str::contains("postgres://localhost:5432/mydb"))
18+
.stdout(predicate::str::contains("Loaded config from:"));
19+
20+
Ok(())
21+
}
22+
23+
#[test]
24+
fn cli_override_port() -> Result<(), Box<dyn std::error::Error>> {
25+
// path to basic example
26+
let dir = Path::new("examples/basic");
27+
28+
Command::cargo_bin("basic")?
29+
.current_dir(dir)
30+
.arg("--port")
31+
.arg("9090")
32+
.assert()
33+
.success()
34+
.stdout(predicate::str::contains("Final config:"))
35+
.stdout(predicate::str::contains("port: 9090"))
36+
.stdout(predicate::str::contains("postgres://localhost:5432/mydb"))
37+
.stdout(predicate::str::contains("Loaded config from:"));
38+
39+
Ok(())
40+
}
41+
42+
#[test]
43+
fn no_config_uses_defaults() -> Result<(), Box<dyn std::error::Error>> {
44+
Command::cargo_bin("basic")?
45+
.arg("--no-config")
46+
.assert()
47+
.success()
48+
.stdout(predicate::str::contains("Final config:"))
49+
.stdout(predicate::str::contains("port: 8080"))
50+
.stdout(predicate::str::contains("database_url: None"))
51+
.stdout(predicate::str::contains("No config file used"));
52+
53+
Ok(())
54+
}

tests/e2e.rs

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

0 commit comments

Comments
 (0)