From 2d3cb345e0fecdd731eb202c7b290434fe616527 Mon Sep 17 00:00:00 2001 From: Sayan Sisodiya Date: Tue, 10 Feb 2026 21:12:14 -0800 Subject: [PATCH] clean up tests --- codex-rs/core/src/models_manager/manager.rs | 46 +++----- .../core/tests/suite/model_info_overrides.rs | 110 +++++------------- 2 files changed, 49 insertions(+), 107 deletions(-) diff --git a/codex-rs/core/src/models_manager/manager.rs b/codex-rs/core/src/models_manager/manager.rs index 0688f19a00..3a2c1af40c 100644 --- a/codex-rs/core/src/models_manager/manager.rs +++ b/codex-rs/core/src/models_manager/manager.rs @@ -841,7 +841,7 @@ mod tests { } #[tokio::test] - async fn build_available_models_picks_default_after_hiding_hidden_models() { + async fn build_available_models_respects_visibility_defaults_and_overrides() { let codex_home = tempdir().expect("temp dir"); let auth_manager = AuthManager::from_auth_for_testing(CodexAuth::from_api_key("Test API Key")); @@ -865,27 +865,15 @@ mod tests { .build() .await .expect("load default test config"); - let available = manager.build_available_models(vec![hidden_model, visible_model], &config); + let available_default = manager + .build_available_models(vec![hidden_model.clone(), visible_model.clone()], &config); + assert_eq!( + available_default, + vec![expected_hidden.clone(), expected_visible] + ); - assert_eq!(available, vec![expected_hidden, expected_visible]); - } - - #[tokio::test] - async fn build_available_models_applies_model_info_overrides() { - let codex_home = tempdir().expect("temp dir"); - let auth_manager = - AuthManager::from_auth_for_testing(CodexAuth::from_api_key("Test API Key")); - let provider = provider_for("http://example.test".to_string()); - let mut manager = - ModelsManager::with_provider(codex_home.path().to_path_buf(), auth_manager, provider); - manager.local_models = Vec::new(); - - let mut config = ConfigBuilder::default() - .codex_home(codex_home.path().to_path_buf()) - .build() - .await - .expect("load default test config"); - config.model_info_overrides.insert( + let mut override_config = config; + override_config.model_info_overrides.insert( "visible".to_string(), ModelInfoPatch { display_name: Some("Visible Local Override".to_string()), @@ -893,17 +881,21 @@ mod tests { ..Default::default() }, ); - - let visible_model = remote_model_with_visibility("visible", "Visible", 1, "list"); - let hidden_model = remote_model_with_visibility("hidden", "Hidden", 0, "hide"); - let available = manager.build_available_models(vec![hidden_model, visible_model], &config); - - let visible = available + let available_overridden = + manager.build_available_models(vec![hidden_model, visible_model], &override_config); + let visible = available_overridden .iter() .find(|preset| preset.model == "visible") .expect("visible model should exist"); assert_eq!(visible.display_name, "Visible Local Override"); assert!(!visible.show_in_picker); + assert!( + available_overridden + .iter() + .find(|preset| preset.model == "hidden") + .is_some_and(|preset| preset.is_default), + "when no model is shown in picker, first model should be marked default" + ); } #[test] diff --git a/codex-rs/core/tests/suite/model_info_overrides.rs b/codex-rs/core/tests/suite/model_info_overrides.rs index 83af790604..6e89960a6c 100644 --- a/codex-rs/core/tests/suite/model_info_overrides.rs +++ b/codex-rs/core/tests/suite/model_info_overrides.rs @@ -2,7 +2,6 @@ use codex_core::CodexAuth; use codex_core::features::Feature; use codex_core::models_manager::manager::ModelsManager; use codex_protocol::openai_models::ModelInfoPatch; -use codex_protocol::openai_models::ModelVisibility; use codex_protocol::openai_models::TruncationPolicyConfig; use core_test_support::load_default_config_for_test; use pretty_assertions::assert_eq; @@ -45,48 +44,11 @@ async fn offline_model_info_with_tool_output_override() { ); } -// Existing remote model path: -// fetch model metadata for a known slug, then apply per-slug patch values from config. +// Unknown model path + prefix-resolution path: +// verify model_info_overrides apply both when the slug falls back to synthetic metadata and when +// the requested slug differs from the resolved remote slug (longest-prefix match path). #[tokio::test(flavor = "multi_thread", worker_threads = 2)] -async fn model_info_patch_overrides_remote_model_fields() { - let codex_home = TempDir::new().expect("create temp dir"); - let mut config = load_default_config_for_test(&codex_home).await; - config.features.enable(Feature::RemoteModels); - let auth_manager = codex_core::AuthManager::from_auth_for_testing( - CodexAuth::create_dummy_chatgpt_auth_for_testing(), - ); - let manager = ModelsManager::new(config.codex_home.clone(), auth_manager); - - let mut baseline_config = config.clone(); - baseline_config.model_info_overrides.clear(); - let baseline = manager.get_model_info("gpt-5.1", &baseline_config).await; - - config.model_info_overrides.insert( - "gpt-5.1".to_string(), - ModelInfoPatch { - display_name: Some("gpt-5.1-dev".to_string()), - context_window: Some(123_456), - visibility: Some(ModelVisibility::Hide), - supported_in_api: Some(false), - ..Default::default() - }, - ); - let model_info = manager.get_model_info("gpt-5.1", &config).await; - - let mut expected = baseline; - expected.display_name = "gpt-5.1-dev".to_string(); - expected.context_window = Some(123_456); - expected.visibility = ModelVisibility::Hide; - expected.supported_in_api = false; - - assert_eq!(model_info, expected); -} - -// Unknown model path: -// when slug is not known remotely, manager falls back to synthetic metadata and still -// applies the patch for that requested slug. -#[tokio::test(flavor = "multi_thread", worker_threads = 2)] -async fn model_info_patch_can_define_new_model_from_fallback() { +async fn model_info_patch_applies_for_fallback_and_prefix_resolution_paths() { let codex_home = TempDir::new().expect("create temp dir"); let mut config = load_default_config_for_test(&codex_home).await; config.features.enable(Feature::RemoteModels); @@ -119,6 +81,32 @@ async fn model_info_patch_can_define_new_model_from_fallback() { expected.base_instructions = "Custom model instructions".to_string(); assert_eq!(model_info, expected); + + let requested_slug = "gpt-5.1-eval"; + let mut baseline_config = config; + baseline_config.model_info_overrides.clear(); + let baseline = manager + .get_model_info(requested_slug, &baseline_config) + .await; + + baseline_config.model_info_overrides.insert( + requested_slug.to_string(), + ModelInfoPatch { + display_name: Some("gpt-5.1-eval-dev".to_string()), + context_window: Some(456_789), + ..Default::default() + }, + ); + let model_info = manager + .get_model_info(requested_slug, &baseline_config) + .await; + + let mut expected = baseline; + expected.slug = requested_slug.to_string(); + expected.display_name = "gpt-5.1-eval-dev".to_string(); + expected.context_window = Some(456_789); + + assert_eq!(model_info, expected); } // Offline helper parity path: @@ -144,41 +132,3 @@ async fn offline_helper_applies_model_info_patch() { assert_eq!(model_info.display_name, "gpt-fake-offline-dev".to_string()); assert_eq!(model_info.context_window, Some(111_111)); } - -// Prefix-resolution path (requested slug differs from resolved slug): -// request a custom slug that resolves to known remote base model via longest-prefix match, -// then ensure the requested-slug patch is still applied. -#[tokio::test(flavor = "multi_thread", worker_threads = 2)] -async fn model_info_patch_applies_when_requested_slug_differs_from_resolved_slug() { - let codex_home = TempDir::new().expect("create temp dir"); - let mut config = load_default_config_for_test(&codex_home).await; - config.features.enable(Feature::RemoteModels); - let auth_manager = codex_core::AuthManager::from_auth_for_testing( - CodexAuth::create_dummy_chatgpt_auth_for_testing(), - ); - let manager = ModelsManager::new(config.codex_home.clone(), auth_manager); - - let requested_slug = "gpt-5.1-eval"; - let mut baseline_config = config.clone(); - baseline_config.model_info_overrides.clear(); - let baseline = manager - .get_model_info(requested_slug, &baseline_config) - .await; - - config.model_info_overrides.insert( - requested_slug.to_string(), - ModelInfoPatch { - display_name: Some("gpt-5.1-eval-dev".to_string()), - context_window: Some(456_789), - ..Default::default() - }, - ); - let model_info = manager.get_model_info(requested_slug, &config).await; - - let mut expected = baseline; - expected.slug = requested_slug.to_string(); - expected.display_name = "gpt-5.1-eval-dev".to_string(); - expected.context_window = Some(456_789); - - assert_eq!(model_info, expected); -}