1use super::facade::PutInput;
2use crate::extractor::UploadedFile;
3
4impl PutInput {
5 pub fn from_upload(file: &UploadedFile, prefix: &str) -> Self {
7 let filename = if file.name.is_empty() {
8 None
9 } else {
10 Some(file.name.clone())
11 };
12 Self {
13 data: file.data.clone(),
14 prefix: prefix.to_string(),
15 filename,
16 content_type: file.content_type.clone(),
17 }
18 }
19}
20
21#[cfg(test)]
22mod tests {
23 use super::*;
24 use bytes::Bytes;
25
26 fn test_file(name: &str, ct: &str) -> UploadedFile {
27 UploadedFile {
28 name: name.to_string(),
29 content_type: ct.to_string(),
30 size: 5,
31 data: Bytes::from_static(b"hello"),
32 }
33 }
34
35 #[test]
36 fn from_upload_copies_fields() {
37 let file = test_file("photo.jpg", "image/jpeg");
38 let input = PutInput::from_upload(&file, "avatars/");
39 assert_eq!(input.prefix, "avatars/");
40 assert_eq!(input.filename, Some("photo.jpg".to_string()));
41 assert_eq!(input.content_type, "image/jpeg");
42 assert_eq!(input.data.len(), 5);
43 }
44
45 #[test]
46 fn from_upload_empty_name_becomes_none() {
47 let file = test_file("", "application/octet-stream");
48 let input = PutInput::from_upload(&file, "uploads/");
49 assert_eq!(input.filename, None);
50 }
51
52 #[test]
53 fn from_upload_unnamed_preserved() {
54 let file = test_file("unnamed", "application/octet-stream");
55 let input = PutInput::from_upload(&file, "uploads/");
56 assert_eq!(input.filename, Some("unnamed".to_string()));
57 }
58}