From e21c982d8b0bda75b7eccc10c2642eba34cdd28f Mon Sep 17 00:00:00 2001 From: Dave Date: Mon, 23 Feb 2026 21:37:20 +0000 Subject: [PATCH] story-kit: merge 102_story_test_coverage_http_model_rs_to_80 --- server/src/http/model.rs | 77 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/server/src/http/model.rs b/server/src/http/model.rs index e344f0a..8163546 100644 --- a/server/src/http/model.rs +++ b/server/src/http/model.rs @@ -48,3 +48,80 @@ impl ModelApi { Ok(Json(models)) } } + +#[cfg(test)] +mod tests { + use super::*; + use crate::http::context::AppContext; + use tempfile::TempDir; + + fn make_api(dir: &TempDir) -> ModelApi { + ModelApi { + ctx: Arc::new(AppContext::new_test(dir.path().to_path_buf())), + } + } + + #[tokio::test] + async fn get_model_preference_returns_none_when_unset() { + let dir = TempDir::new().unwrap(); + let api = make_api(&dir); + let result = api.get_model_preference().await.unwrap(); + assert!(result.0.is_none()); + } + + #[tokio::test] + async fn set_model_preference_returns_true() { + let dir = TempDir::new().unwrap(); + let api = make_api(&dir); + let payload = Json(ModelPayload { + model: "claude-3-sonnet".to_string(), + }); + let result = api.set_model_preference(payload).await.unwrap(); + assert!(result.0); + } + + #[tokio::test] + async fn get_model_preference_returns_value_after_set() { + let dir = TempDir::new().unwrap(); + let api = make_api(&dir); + + let payload = Json(ModelPayload { + model: "claude-3-sonnet".to_string(), + }); + api.set_model_preference(payload).await.unwrap(); + + let result = api.get_model_preference().await.unwrap(); + assert_eq!(result.0, Some("claude-3-sonnet".to_string())); + } + + #[tokio::test] + async fn set_model_preference_overwrites_previous_value() { + let dir = TempDir::new().unwrap(); + let api = make_api(&dir); + + api.set_model_preference(Json(ModelPayload { + model: "model-a".to_string(), + })) + .await + .unwrap(); + + api.set_model_preference(Json(ModelPayload { + model: "model-b".to_string(), + })) + .await + .unwrap(); + + let result = api.get_model_preference().await.unwrap(); + assert_eq!(result.0, Some("model-b".to_string())); + } + + #[tokio::test] + async fn get_ollama_models_returns_error_for_unreachable_url() { + let dir = TempDir::new().unwrap(); + let api = make_api(&dir); + // Port 1 is reserved and should immediately refuse the connection. + let base_url = Query(Some("http://127.0.0.1:1".to_string())); + let result = api.get_ollama_models(base_url).await; + assert!(result.is_err()); + } +}