Files
codex/codex-rs/exec/tests/suite/config_overrides.rs
pakrym-oai f2eb50be9f exec: fix config_overrides merging to ensure root flags are applied to subcommands
- Merge config_overrides from the root CLI into subcommands in run_main.
- Extend tests for config_overrides arguments ordering in config_overrides_are_applied_resume.
2025-09-30 09:46:11 -07:00

139 lines
3.8 KiB
Rust

#![cfg(not(target_os = "windows"))]
#![allow(clippy::expect_used, clippy::unwrap_used)]
use core_test_support::responses;
use core_test_support::test_codex_exec::test_codex_exec;
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn config_overrides_are_applied_resume() -> anyhow::Result<()> {
config_overrides_are_applied_resume_inner(
&["--model", "o3", "prompt text"],
&[
"resume",
"--skip-git-repo-check",
"fake id",
"--model",
"o3",
"resume prompt text",
],
)
.await?;
config_overrides_are_applied_resume_inner(
&["-c", "model=o3", "prompt text"],
&[
"resume",
"--skip-git-repo-check",
"fake id",
"-c",
"model=o3",
"resume prompt text",
],
)
.await?;
config_overrides_are_applied_resume_inner(
&["-c", "model=o3", "prompt text"],
&[
"-c",
"model=o3",
"resume",
"--skip-git-repo-check",
"fake id",
"resume prompt text",
],
)
.await?;
Ok(())
}
async fn config_overrides_are_applied_resume_inner(
args: &[&str],
resume_args: &[&str],
) -> anyhow::Result<()> {
let test = test_codex_exec();
let match_config_overrides_applied = |req: &wiremock::Request| {
let body = std::str::from_utf8(&req.body).unwrap_or("");
body.contains("prompt text") && body.contains("o3")
};
let server = responses::start_mock_server().await;
responses::mount_sse_once_match(
&server,
match_config_overrides_applied,
responses::sse(vec![
responses::ev_assistant_message("msg-1", "config overrides are applied."),
responses::ev_completed("resp-2"),
]),
)
.await;
test.cmd_with_server(&server)
.arg("--skip-git-repo-check")
.arg("--experimental-json")
.args(args)
.assert()
.code(0);
let match_config_resume_overrides_applied = |req: &wiremock::Request| {
let body = std::str::from_utf8(&req.body).unwrap_or("");
body.contains("resume prompt text") && body.contains("o3")
};
responses::mount_sse_once_match(
&server,
match_config_resume_overrides_applied,
responses::sse(vec![
responses::ev_assistant_message("msg-1", "config overrides are applied resume."),
responses::ev_completed("resp-2"),
]),
)
.await;
test.cmd_with_server(&server)
.args(resume_args)
.assert()
.code(0);
Ok(())
}
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn config_overrides_are_applied() -> anyhow::Result<()> {
config_overrides_are_applied_inner(&["-c", "model=o3", "prompt text"]).await?;
config_overrides_are_applied_inner(&["prompt text", "-c", "model=o3"]).await?;
config_overrides_are_applied_inner(&["--model", "o3", "prompt text"]).await?;
Ok(())
}
async fn config_overrides_are_applied_inner(args: &[&str]) -> anyhow::Result<()> {
let test = test_codex_exec();
let match_config_overrides_applied = |req: &wiremock::Request| {
let body = std::str::from_utf8(&req.body).unwrap_or("");
body.contains("prompt text") && body.contains("o3")
};
let server = responses::start_mock_server().await;
responses::mount_sse_once_match(
&server,
match_config_overrides_applied,
responses::sse(vec![
responses::ev_assistant_message("msg-1", "config overrides are applied."),
responses::ev_completed("resp-2"),
]),
)
.await;
test.cmd_with_server(&server)
.arg("--skip-git-repo-check")
.args(args)
.assert()
.code(0);
Ok(())
}