Add unit tests for all types and error handling

54 tests covering serialization/deserialization round-trips, builder
patterns, skip_serializing_if behavior, untagged enums, field renames,
and error type conversions.

Test modules added to:
- types/common.rs: Think, Stop, Options, OptionsBuilder, ModelDetails
- types/generate.rs: GenerateRequest, GenerateResponse, builder
- types/chat.rs: Role, Message, ChatRequest, Tool, ChatResponse
- types/pull.rs: PullRequest, PullResponse, builder
- types/version.rs: VersionResponse
- types/tags.rs: TagsResponse
- types/ps.rs: PsResponse
- error.rs: Display formatting, From conversions, Error trait
This commit is contained in:
2026-01-30 19:50:59 +00:00
parent 35a7fd13f6
commit 385ff9b3a2
8 changed files with 647 additions and 0 deletions

View File

@@ -45,3 +45,51 @@ impl PullRequestBuilder {
pub struct PullResponse {
pub status: String,
}
#[cfg(test)]
mod tests {
use super::*;
use serde_json::json;
#[test]
fn builder_minimal() {
let request = PullRequest::builder("llama3").build();
assert_eq!(request.model, "llama3");
assert!(request.insecure.is_none());
assert!(request.stream.is_none());
}
#[test]
fn builder_with_options() {
let request = PullRequest::builder("llama3")
.stream(true)
.insecure(false)
.build();
assert_eq!(request.stream, Some(true));
assert_eq!(request.insecure, Some(false));
}
#[test]
fn request_skips_none_fields() {
let request = PullRequest::builder("llama3").build();
let json = serde_json::to_value(&request).unwrap();
let obj = json.as_object().unwrap();
assert!(obj.contains_key("model"));
assert!(!obj.contains_key("insecure"));
assert!(!obj.contains_key("stream"));
}
#[test]
fn request_includes_set_fields() {
let request = PullRequest::builder("llama3").stream(true).build();
let json = serde_json::to_value(&request).unwrap();
assert_eq!(json, json!({"model": "llama3", "stream": true}));
}
#[test]
fn response_deserialize() {
let json = json!({"status": "pulling manifest"});
let response: PullResponse = serde_json::from_value(json).unwrap();
assert_eq!(response.status, "pulling manifest");
}
}