use super::*;
use crate::router::PathParams;
use serde::Deserialize;
use std::collections::HashMap;
#[derive(Debug, Deserialize)]
struct Item {
id: u64,
}
fn request_with_params(params: HashMap<String, String>) -> Request<()> {
Request::builder()
.extension(PathParams(params))
.body(())
.unwrap()
}
#[test]
fn extracts_typed_numeric_field() {
let mut params = HashMap::new();
params.insert("id".to_string(), "42".to_string());
let req = request_with_params(params);
let item: Item = path_params(&req).unwrap();
assert_eq!(item.id, 42);
}
#[test]
fn unparseable_segment_returns_400() {
let mut params = HashMap::new();
params.insert("id".to_string(), "not-a-number".to_string());
let req = request_with_params(params);
let err = path_params::<Item, _>(&req).unwrap_err();
assert_eq!(err.code, 400);
assert_eq!(err.message, "invalid path parameters");
}
#[test]
fn no_params_captured_returns_400() {
let req = Request::builder().body(()).unwrap();
let err = path_params::<Item, _>(&req).unwrap_err();
assert_eq!(err.code, 400);
assert_eq!(err.message, "invalid path parameters");
}