core tests: submit turns with permission profiles

This commit is contained in:
Michael Bolin
2026-04-30 07:20:55 -07:00
parent 7a367c3db7
commit 33ad223149
5 changed files with 64 additions and 30 deletions
+13 -4
View File
@@ -63,6 +63,7 @@ use core_test_support::responses::sse_failed;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::TestCodex;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::wait_for_event;
use dunce::canonicalize as normalize_path;
use futures::StreamExt;
@@ -1725,6 +1726,10 @@ async fn user_turn_collaboration_mode_overrides_model_and_effort() -> anyhow::Re
session_configured,
..
} = test_codex().with_model("gpt-5.4").build(&server).await?;
let (sandbox_policy, permission_profile) = turn_permission_fields(
config.permissions.permission_profile(),
config.cwd.as_path(),
);
let collaboration_mode = CollaborationMode {
mode: ModeKind::Default,
@@ -1745,8 +1750,8 @@ async fn user_turn_collaboration_mode_overrides_model_and_effort() -> anyhow::Re
cwd: config.cwd.to_path_buf(),
approval_policy: config.permissions.approval_policy.value(),
approvals_reviewer: None,
sandbox_policy: config.legacy_sandbox_policy(),
permission_profile: None,
sandbox_policy,
permission_profile,
model: session_configured.model.clone(),
effort: Some(ReasoningEffort::Low),
summary: Some(
@@ -1856,6 +1861,10 @@ async fn user_turn_explicit_reasoning_summary_overrides_model_catalog_default()
})
.build(&server)
.await?;
let (sandbox_policy, permission_profile) = turn_permission_fields(
config.permissions.permission_profile(),
config.cwd.as_path(),
);
codex
.submit(Op::UserTurn {
@@ -1867,8 +1876,8 @@ async fn user_turn_explicit_reasoning_summary_overrides_model_catalog_default()
cwd: config.cwd.to_path_buf(),
approval_policy: config.permissions.approval_policy.value(),
approvals_reviewer: None,
sandbox_policy: config.legacy_sandbox_policy(),
permission_profile: None,
sandbox_policy,
permission_profile,
model: session_configured.model,
effort: None,
summary: Some(ReasoningSummary::Concise),
@@ -14,6 +14,7 @@ use core_test_support::responses::sse;
use core_test_support::responses::start_mock_server;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::wait_for_event;
use pretty_assertions::assert_eq;
use serde_json::Value;
@@ -174,6 +175,10 @@ async fn collaboration_instructions_added_on_user_turn() -> Result<()> {
let test = test_codex().build(&server).await?;
let collab_text = "turn instructions";
let collaboration_mode = collab_mode_with_instructions(Some(collab_text));
let (sandbox_policy, permission_profile) = turn_permission_fields(
test.config.permissions.permission_profile(),
test.config.cwd.as_path(),
);
test.codex
.submit(Op::UserTurn {
@@ -185,8 +190,8 @@ async fn collaboration_instructions_added_on_user_turn() -> Result<()> {
cwd: test.config.cwd.to_path_buf(),
approval_policy: test.config.permissions.approval_policy.value(),
approvals_reviewer: None,
sandbox_policy: test.config.legacy_sandbox_policy(),
permission_profile: None,
sandbox_policy,
permission_profile,
model: test.session_configured.model.clone(),
effort: None,
summary: Some(
@@ -279,6 +284,10 @@ async fn user_turn_overrides_collaboration_instructions_after_override() -> Resu
let base_mode = collab_mode_with_instructions(Some(base_text));
let turn_text = "turn override";
let turn_mode = collab_mode_with_instructions(Some(turn_text));
let (sandbox_policy, permission_profile) = turn_permission_fields(
test.config.permissions.permission_profile(),
test.config.cwd.as_path(),
);
test.codex
.submit(Op::OverrideTurnContext {
@@ -307,8 +316,8 @@ async fn user_turn_overrides_collaboration_instructions_after_override() -> Resu
cwd: test.config.cwd.to_path_buf(),
approval_policy: test.config.permissions.approval_policy.value(),
approvals_reviewer: None,
sandbox_policy: test.config.legacy_sandbox_policy(),
permission_profile: None,
sandbox_policy,
permission_profile,
model: test.session_configured.model.clone(),
effort: None,
summary: Some(
+14 -9
View File
@@ -439,16 +439,15 @@ async fn overrides_turn_context_but_keeps_cached_prefix_and_key_constant() -> an
/*exclude_tmpdir_env_var*/ true,
/*exclude_slash_tmp*/ true,
);
let sandbox_policy = permission_profile
.to_legacy_sandbox_policy(config.cwd.as_path())
.expect("workspace profile should have legacy projection");
let (sandbox_policy, permission_profile) =
turn_permission_fields(permission_profile, config.cwd.as_path());
codex
.submit(Op::OverrideTurnContext {
cwd: None,
approval_policy: Some(AskForApproval::Never),
approvals_reviewer: None,
sandbox_policy: Some(sandbox_policy),
permission_profile: Some(permission_profile),
permission_profile,
windows_sandbox_level: None,
model: None,
effort: Some(Some(ReasoningEffort::High)),
@@ -832,7 +831,10 @@ async fn send_user_turn_with_no_changes_does_not_send_environment_context() -> a
let default_cwd = config.cwd.clone();
let default_approval_policy = config.permissions.approval_policy.value();
let default_sandbox_policy = &config.legacy_sandbox_policy();
let (default_sandbox_policy, default_permission_profile) = turn_permission_fields(
config.permissions.permission_profile(),
default_cwd.as_path(),
);
let default_model = session_configured.model;
let default_effort = config.model_reasoning_effort;
let default_summary = config.model_reasoning_summary;
@@ -848,7 +850,7 @@ async fn send_user_turn_with_no_changes_does_not_send_environment_context() -> a
approval_policy: default_approval_policy,
approvals_reviewer: None,
sandbox_policy: default_sandbox_policy.clone(),
permission_profile: None,
permission_profile: default_permission_profile.clone(),
model: default_model.clone(),
effort: default_effort,
summary: Some(default_summary.unwrap_or(ReasoningSummary::Auto)),
@@ -871,7 +873,7 @@ async fn send_user_turn_with_no_changes_does_not_send_environment_context() -> a
approval_policy: default_approval_policy,
approvals_reviewer: None,
sandbox_policy: default_sandbox_policy.clone(),
permission_profile: None,
permission_profile: default_permission_profile.clone(),
model: default_model.clone(),
effort: default_effort,
summary: Some(default_summary.unwrap_or(ReasoningSummary::Auto)),
@@ -962,7 +964,10 @@ async fn send_user_turn_with_changes_sends_environment_context() -> anyhow::Resu
let default_cwd = config.cwd.clone();
let default_approval_policy = config.permissions.approval_policy.value();
let default_sandbox_policy = &config.legacy_sandbox_policy();
let (default_sandbox_policy, default_permission_profile) = turn_permission_fields(
config.permissions.permission_profile(),
default_cwd.as_path(),
);
let default_model = session_configured.model;
let default_effort = config.model_reasoning_effort;
let default_summary = config.model_reasoning_summary;
@@ -978,7 +983,7 @@ async fn send_user_turn_with_changes_sends_environment_context() -> anyhow::Resu
approval_policy: default_approval_policy,
approvals_reviewer: None,
sandbox_policy: default_sandbox_policy.clone(),
permission_profile: None,
permission_profile: default_permission_profile.clone(),
model: default_model,
effort: default_effort,
summary: Some(default_summary.unwrap_or(ReasoningSummary::Auto)),
+20 -10
View File
@@ -152,6 +152,8 @@ async fn remote_models_config_context_window_override_clamps_to_max_context_wind
})
.build(&server)
.await?;
let (sandbox_policy, permission_profile) =
turn_permission_fields(config.permissions.permission_profile(), cwd.path());
codex
.submit(Op::UserTurn {
@@ -163,13 +165,13 @@ async fn remote_models_config_context_window_override_clamps_to_max_context_wind
cwd: cwd.path().to_path_buf(),
approval_policy: config.permissions.approval_policy.value(),
approvals_reviewer: None,
sandbox_policy: config.legacy_sandbox_policy(),
sandbox_policy,
model: requested_model.to_string(),
effort: None,
summary: None,
service_tier: None,
collaboration_mode: None,
permission_profile: None,
permission_profile,
personality: None,
environments: None,
})
@@ -230,6 +232,8 @@ async fn remote_models_config_override_above_max_uses_max_context_window() -> Re
})
.build(&server)
.await?;
let (sandbox_policy, permission_profile) =
turn_permission_fields(config.permissions.permission_profile(), cwd.path());
codex
.submit(Op::UserTurn {
@@ -241,13 +245,13 @@ async fn remote_models_config_override_above_max_uses_max_context_window() -> Re
cwd: cwd.path().to_path_buf(),
approval_policy: config.permissions.approval_policy.value(),
approvals_reviewer: None,
sandbox_policy: config.legacy_sandbox_policy(),
sandbox_policy,
model: requested_model.to_string(),
effort: None,
summary: None,
service_tier: None,
collaboration_mode: None,
permission_profile: None,
permission_profile,
personality: None,
environments: None,
})
@@ -307,6 +311,8 @@ async fn remote_models_use_context_window_when_config_override_is_absent() -> Re
})
.build(&server)
.await?;
let (sandbox_policy, permission_profile) =
turn_permission_fields(config.permissions.permission_profile(), cwd.path());
codex
.submit(Op::UserTurn {
@@ -318,13 +324,13 @@ async fn remote_models_use_context_window_when_config_override_is_absent() -> Re
cwd: cwd.path().to_path_buf(),
approval_policy: config.permissions.approval_policy.value(),
approvals_reviewer: None,
sandbox_policy: config.legacy_sandbox_policy(),
sandbox_policy,
model: requested_model.to_string(),
effort: None,
summary: None,
service_tier: None,
collaboration_mode: None,
permission_profile: None,
permission_profile,
personality: None,
environments: None,
})
@@ -397,6 +403,8 @@ async fn remote_models_long_model_slug_is_sent_with_high_reasoning() -> Result<(
})
.build(&server)
.await?;
let (sandbox_policy, permission_profile) =
turn_permission_fields(config.permissions.permission_profile(), cwd.path());
codex
.submit(Op::UserTurn {
@@ -408,8 +416,8 @@ async fn remote_models_long_model_slug_is_sent_with_high_reasoning() -> Result<(
cwd: cwd.path().to_path_buf(),
approval_policy: config.permissions.approval_policy.value(),
approvals_reviewer: None,
sandbox_policy: config.legacy_sandbox_policy(),
permission_profile: None,
sandbox_policy,
permission_profile,
model: requested_model.to_string(),
effort: None,
summary: None,
@@ -458,6 +466,8 @@ async fn namespaced_model_slug_uses_catalog_metadata_without_fallback_warning()
.with_model(requested_model)
.build(&server)
.await?;
let (sandbox_policy, permission_profile) =
turn_permission_fields(config.permissions.permission_profile(), cwd.path());
codex
.submit(Op::UserTurn {
@@ -469,8 +479,8 @@ async fn namespaced_model_slug_uses_catalog_metadata_without_fallback_warning()
cwd: cwd.path().to_path_buf(),
approval_policy: config.permissions.approval_policy.value(),
approvals_reviewer: None,
sandbox_policy: config.legacy_sandbox_policy(),
permission_profile: None,
sandbox_policy,
permission_profile,
model: requested_model.to_string(),
effort: None,
summary: Some(
+4 -3
View File
@@ -22,6 +22,7 @@ use core_test_support::responses::start_mock_server;
use core_test_support::skip_if_no_network;
use core_test_support::stdio_server_bin;
use core_test_support::test_codex::test_codex;
use core_test_support::test_codex::turn_permission_fields;
use core_test_support::wait_for_event;
use serde_json::Value;
use serde_json::json;
@@ -508,8 +509,8 @@ async fn mcp_image_output_preserves_image_and_no_text_summary() -> Result<()> {
});
let fixture = builder.build(&server).await?;
let session_model = fixture.session_configured.model.clone();
let permission_profile = PermissionProfile::read_only();
let sandbox_policy = permission_profile.to_legacy_sandbox_policy(fixture.cwd.path())?;
let (sandbox_policy, permission_profile) =
turn_permission_fields(PermissionProfile::read_only(), fixture.cwd.path());
fixture
.codex
@@ -524,7 +525,7 @@ async fn mcp_image_output_preserves_image_and_no_text_summary() -> Result<()> {
approval_policy: AskForApproval::Never,
approvals_reviewer: None,
sandbox_policy,
permission_profile: Some(permission_profile),
permission_profile,
model: session_model,
effort: None,
summary: None,