#[cfg(test)]
mod tests {
use std::collections::HashMap;
#[test]
fn test_array_params_url_generation() {
let tags = ["pet".to_string(), "available".to_string()];
let mut params = HashMap::new();
params.insert("tags".to_string(), tags.join(","));
use url::Url;
let base = Url::parse("https://api.example.com/pet/findByTags").unwrap();
let url_with_params = Url::parse_with_params(base.as_str(), ¶ms).unwrap();
assert_eq!(
url_with_params.as_str(),
"https://api.example.com/pet/findByTags?tags=pet%2Cavailable"
);
let query_pairs: HashMap<_, _> = url_with_params.query_pairs().collect();
assert_eq!(
query_pairs.get("tags"),
Some(&std::borrow::Cow::Borrowed("pet,available"))
);
}
#[test]
fn test_special_characters_in_arrays() {
let tags = [
"tag with spaces".to_string(),
"tag&with&ersands".to_string(),
"tag=with=equals".to_string(),
];
let mut params = HashMap::new();
params.insert("tags".to_string(), tags.join(","));
use url::Url;
let base = Url::parse("https://api.example.com/pets").unwrap();
let url_with_params = Url::parse_with_params(base.as_str(), ¶ms).unwrap();
println!("URL with special chars: {}", url_with_params.as_str());
assert!(url_with_params.as_str().contains("%2C"));
assert!(url_with_params.as_str().contains("%20") || url_with_params.as_str().contains("+"));
}
#[test]
fn test_empty_array_handling() {
let tags: Vec<String> = vec![];
let mut params = HashMap::new();
if !tags.is_empty() {
params.insert("tags".to_string(), tags.join(","));
}
assert!(params.is_empty());
params.insert("tags".to_string(), "".to_string());
use url::Url;
let base = Url::parse("https://api.example.com/pets").unwrap();
let url_with_params = Url::parse_with_params(base.as_str(), ¶ms).unwrap();
assert_eq!(
url_with_params.as_str(),
"https://api.example.com/pets?tags="
);
}
}