Skip to content
Snippets Groups Projects
Commit 9b412c19 authored by codecraft's avatar codecraft :crocodile:
Browse files

Add test for multipart form data and boundary getter in request.rs

parent 206fa32e
No related branches found
No related tags found
1 merge request!1Initial feature merge
......@@ -116,16 +116,26 @@ impl Request<'_> {
keys: &[&'a str],
data: &Data,
) -> Result<HashMap<&str, Result<Vec<u8>, ParseFormError>>, ParseFormError> {
let boundary;
let post_type = if let Some(val) = self
.headers
.iter()
.find(|header| header.contains("Content-Type: "))
{
if let Ok(mime_type) = val.strip_prefix("Content-Type: ").unwrap().trim().parse() {
mime_type
let content_type = val.trim().strip_prefix("Content-Type: ").unwrap();
let type_vec = content_type.split(';').collect::<Vec<&str>>();
boundary = if let Some(bound) = type_vec.iter().find(|part| part.contains("boundary="))
{
bound.strip_prefix("boundary=").unwrap().trim_matches('"')
} else {
""
};
if let Ok(mime) = type_vec[0].trim().parse() {
mime
} else {
return Err(ParseFormError {
error: ParseErrors::NoData,
error: ParseErrors::BadData,
});
}
} else {
......@@ -177,6 +187,12 @@ impl Request<'_> {
}
}
}
Mime::MultipartFormData => {
let mut temp_bound = "--".to_string();
temp_bound.push_str(boundary);
let end_boundary = format!("{temp_bound}--").as_bytes().to_owned();
let boundary = temp_bound.as_bytes();
}
_ => {
return Err(ParseFormError {
error: ParseErrors::BadData,
......@@ -334,15 +350,45 @@ mod test {
method: crate::handling::methods::Method::Post,
};
let data = Data {
buffer: b"message=24&message1=23".to_vec(),
buffer: b"message=23&message1=24".to_vec(),
is_complete: true,
};
let map = req.get_post_data(&["message", "message1"], &data).unwrap();
assert_eq!(
&b"23".to_vec(),
map.get("message").unwrap().as_ref().unwrap()
);
assert_eq!(
&b"24".to_vec(),
map.get("message1").unwrap().as_ref().unwrap()
);
let req = Request {
uri: "",
headers: vec!["Content-Type: multipart/form-data;boundary=\"boundary\"".to_string()],
method: crate::handling::methods::Method::Post,
};
let data = Data {
buffer: b"--boundary
Content-Disposition: form-data; name=\"field1\"
value1
--boundary
Content-Disposition: form-data; name=\"field2\"; filename=\"example.txt\"
value2
--boundary--
"
.to_vec(),
is_complete: true,
};
let map = req.get_post_data(&["field1, field2"], &data).unwrap();
assert_eq!(
&b"value1".to_vec(),
map.get("field1").unwrap().as_ref().unwrap()
);
assert_eq!(
vec![&Ok(b"23".to_vec()), &Ok(b"24".to_vec())],
req.get_post_data(&["message", "message1"], &data)
.unwrap()
.values()
.collect::<Vec<_>>()
&b"value2".to_vec(),
map.get("field2").unwrap().as_ref().unwrap()
);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment