feat: add comfyui sdk
This commit is contained in:
188
cargos/comfyui-sdk/tests/url_generation_test.rs
Normal file
188
cargos/comfyui-sdk/tests/url_generation_test.rs
Normal file
@@ -0,0 +1,188 @@
|
||||
//! URL generation tests
|
||||
|
||||
use std::collections::HashMap;
|
||||
use serde_json::json;
|
||||
use comfyui_sdk::{HTTPClient, ComfyUIClientConfig};
|
||||
|
||||
#[test]
|
||||
fn test_outputs_to_urls_no_double_slash() {
|
||||
// Test with base URL ending with slash
|
||||
let config_with_slash = ComfyUIClientConfig {
|
||||
base_url: "http://192.168.0.193:8188/".to_string(),
|
||||
..Default::default()
|
||||
};
|
||||
let client_with_slash = HTTPClient::new(config_with_slash).unwrap();
|
||||
|
||||
// Test with base URL without ending slash
|
||||
let config_without_slash = ComfyUIClientConfig {
|
||||
base_url: "http://192.168.0.193:8188".to_string(),
|
||||
..Default::default()
|
||||
};
|
||||
let client_without_slash = HTTPClient::new(config_without_slash).unwrap();
|
||||
|
||||
// Create test outputs
|
||||
let mut outputs = HashMap::new();
|
||||
outputs.insert("58".to_string(), json!({
|
||||
"images": [
|
||||
{
|
||||
"filename": "ComfyUI_02046_.png",
|
||||
"subfolder": "",
|
||||
"type": "output"
|
||||
}
|
||||
]
|
||||
}));
|
||||
|
||||
// Test with base URL ending with slash
|
||||
let urls_with_slash = client_with_slash.outputs_to_urls(&outputs);
|
||||
assert_eq!(urls_with_slash.len(), 1);
|
||||
let url_with_slash = &urls_with_slash[0];
|
||||
println!("URL with slash: {}", url_with_slash);
|
||||
|
||||
// Should not contain double slash
|
||||
assert!(!url_with_slash.contains("//view"),
|
||||
"URL should not contain double slash: {}", url_with_slash);
|
||||
assert!(url_with_slash.contains("/view?"),
|
||||
"URL should contain single slash before view: {}", url_with_slash);
|
||||
|
||||
// Test with base URL without ending slash
|
||||
let urls_without_slash = client_without_slash.outputs_to_urls(&outputs);
|
||||
assert_eq!(urls_without_slash.len(), 1);
|
||||
let url_without_slash = &urls_without_slash[0];
|
||||
println!("URL without slash: {}", url_without_slash);
|
||||
|
||||
// Should not contain double slash
|
||||
assert!(!url_without_slash.contains("//view"),
|
||||
"URL should not contain double slash: {}", url_without_slash);
|
||||
assert!(url_without_slash.contains("/view?"),
|
||||
"URL should contain single slash before view: {}", url_without_slash);
|
||||
|
||||
// Both URLs should be the same
|
||||
assert_eq!(url_with_slash, url_without_slash,
|
||||
"URLs should be identical regardless of trailing slash in base URL");
|
||||
|
||||
// Expected URL format
|
||||
let expected_url = "http://192.168.0.193:8188/view?filename=ComfyUI_02046_.png&subfolder=&type=output";
|
||||
assert_eq!(url_with_slash, expected_url);
|
||||
assert_eq!(url_without_slash, expected_url);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_outputs_to_urls_multiple_images() {
|
||||
let config = ComfyUIClientConfig {
|
||||
base_url: "http://localhost:8188/".to_string(),
|
||||
..Default::default()
|
||||
};
|
||||
let client = HTTPClient::new(config).unwrap();
|
||||
|
||||
let mut outputs = HashMap::new();
|
||||
outputs.insert("58".to_string(), json!({
|
||||
"images": [
|
||||
{
|
||||
"filename": "image1.png",
|
||||
"subfolder": "temp",
|
||||
"type": "output"
|
||||
},
|
||||
{
|
||||
"filename": "image2.jpg",
|
||||
"subfolder": "",
|
||||
"type": "temp"
|
||||
}
|
||||
]
|
||||
}));
|
||||
|
||||
let urls = client.outputs_to_urls(&outputs);
|
||||
assert_eq!(urls.len(), 2);
|
||||
|
||||
for url in &urls {
|
||||
println!("Generated URL: {}", url);
|
||||
assert!(!url.contains("//view"), "URL should not contain double slash: {}", url);
|
||||
assert!(url.contains("/view?"), "URL should contain single slash before view: {}", url);
|
||||
assert!(url.starts_with("http://localhost:8188/view?"), "URL should have correct base");
|
||||
}
|
||||
|
||||
// Check specific URLs
|
||||
assert!(urls.contains(&"http://localhost:8188/view?filename=image1.png&subfolder=temp&type=output".to_string()));
|
||||
assert!(urls.contains(&"http://localhost:8188/view?filename=image2.jpg&subfolder=&type=temp".to_string()));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_outputs_to_urls_empty_outputs() {
|
||||
let config = ComfyUIClientConfig {
|
||||
base_url: "http://localhost:8188".to_string(),
|
||||
..Default::default()
|
||||
};
|
||||
let client = HTTPClient::new(config).unwrap();
|
||||
|
||||
let outputs = HashMap::new();
|
||||
let urls = client.outputs_to_urls(&outputs);
|
||||
assert_eq!(urls.len(), 0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_outputs_to_urls_no_images() {
|
||||
let config = ComfyUIClientConfig {
|
||||
base_url: "http://localhost:8188".to_string(),
|
||||
..Default::default()
|
||||
};
|
||||
let client = HTTPClient::new(config).unwrap();
|
||||
|
||||
let mut outputs = HashMap::new();
|
||||
outputs.insert("58".to_string(), json!({
|
||||
"text": "some text output"
|
||||
}));
|
||||
|
||||
let urls = client.outputs_to_urls(&outputs);
|
||||
assert_eq!(urls.len(), 0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_different_base_url_formats() {
|
||||
let test_cases = vec![
|
||||
"http://192.168.0.193:8188",
|
||||
"http://192.168.0.193:8188/",
|
||||
"https://my-comfyui.com",
|
||||
"https://my-comfyui.com/",
|
||||
"http://localhost:8188",
|
||||
"http://localhost:8188/",
|
||||
];
|
||||
|
||||
let mut outputs = HashMap::new();
|
||||
outputs.insert("test".to_string(), json!({
|
||||
"images": [
|
||||
{
|
||||
"filename": "test.png",
|
||||
"subfolder": "",
|
||||
"type": "output"
|
||||
}
|
||||
]
|
||||
}));
|
||||
|
||||
for base_url in test_cases {
|
||||
println!("Testing base URL: {}", base_url);
|
||||
|
||||
let config = ComfyUIClientConfig {
|
||||
base_url: base_url.to_string(),
|
||||
..Default::default()
|
||||
};
|
||||
let client = HTTPClient::new(config).unwrap();
|
||||
|
||||
let urls = client.outputs_to_urls(&outputs);
|
||||
assert_eq!(urls.len(), 1);
|
||||
|
||||
let url = &urls[0];
|
||||
println!("Generated URL: {}", url);
|
||||
|
||||
// Should not contain double slash
|
||||
assert!(!url.contains("//view"),
|
||||
"URL should not contain double slash for base URL '{}': {}", base_url, url);
|
||||
|
||||
// Should contain single slash before view
|
||||
assert!(url.contains("/view?"),
|
||||
"URL should contain single slash before view for base URL '{}': {}", base_url, url);
|
||||
|
||||
// Should start with the base URL (without trailing slash) + /view
|
||||
let expected_base = base_url.trim_end_matches('/');
|
||||
assert!(url.starts_with(&format!("{}/view?", expected_base)),
|
||||
"URL should start with correct base for '{}': {}", base_url, url);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user