mirror of
https://github.com/RaisFast/raisfast.git
synced 2026-09-24 16:02:44 +00:00
91 lines
3.1 KiB
Rust
91 lines
3.1 KiB
Rust
use super::*;
|
|
|
|
#[tokio::test]
|
|
async fn upload_requires_auth() {
|
|
let (mut app, _) = test_app().await;
|
|
let boundary = "----b";
|
|
let body_str = format!(
|
|
"--{boundary}\r\nContent-Disposition: form-data; name=\"file\"; filename=\"t.png\"\r\n\r\nx\r\n--{boundary}--\r\n"
|
|
);
|
|
let req = Request::builder()
|
|
.method("POST")
|
|
.uri("/api/v1/media/upload")
|
|
.header(
|
|
header::CONTENT_TYPE,
|
|
format!("multipart/form-data; boundary={boundary}"),
|
|
)
|
|
.body(Body::from(body_str))
|
|
.unwrap();
|
|
let (status, _): (StatusCode, Value) = send(&mut app, req).await;
|
|
assert_eq!(status, StatusCode::UNAUTHORIZED);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn upload_success() {
|
|
let (mut app, state) = test_app().await;
|
|
let (int_id, doc_id) = create_author(&state.pool).await;
|
|
let tok = make_token(&doc_id, int_id, raisfast::models::user::UserRole::Author);
|
|
|
|
let boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW";
|
|
let png_header = b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR";
|
|
let body_bytes = {
|
|
let mut v = Vec::new();
|
|
v.extend_from_slice(format!("--{boundary}\r\n").as_bytes());
|
|
v.extend_from_slice(
|
|
b"Content-Disposition: form-data; name=\"file\"; filename=\"test.png\"\r\n",
|
|
);
|
|
v.extend_from_slice(b"Content-Type: image/png\r\n\r\n");
|
|
v.extend_from_slice(png_header);
|
|
v.extend_from_slice(format!("\r\n--{boundary}--\r\n").as_bytes());
|
|
v
|
|
};
|
|
|
|
let req = Request::builder()
|
|
.method("POST")
|
|
.uri("/api/v1/media/upload")
|
|
.header(
|
|
header::CONTENT_TYPE,
|
|
format!("multipart/form-data; boundary={boundary}"),
|
|
)
|
|
.header(header::AUTHORIZATION, format!("Bearer {tok}"))
|
|
.body(Body::from(body_bytes))
|
|
.unwrap();
|
|
|
|
let (status, body): (StatusCode, Value) = send(&mut app, req).await;
|
|
assert!(status.is_success(), "upload failed: {status} {body:?}");
|
|
assert_eq!(body["code"], 0);
|
|
assert!(body["data"]["id"].is_string());
|
|
assert!(body["data"]["url"].is_string());
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn list_requires_auth() {
|
|
let (mut app, _) = test_app().await;
|
|
let (status, _): (StatusCode, Value) = send(&mut app, get_req("/api/v1/media")).await;
|
|
assert_eq!(status, StatusCode::UNAUTHORIZED);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn list_success() {
|
|
let (mut app, state) = test_app().await;
|
|
let (int_id, doc_id) = create_author(&state.pool).await;
|
|
let tok = make_token(&doc_id, int_id, raisfast::models::user::UserRole::Author);
|
|
let (status, body): (StatusCode, Value) = send(&mut app, get_auth("/api/v1/media", &tok)).await;
|
|
assert!(status.is_success());
|
|
assert!(body["data"]["items"].is_array());
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn delete_not_found() {
|
|
let (mut app, state) = test_app().await;
|
|
let (int_id, doc_id) = create_author(&state.pool).await;
|
|
let tok = make_token(&doc_id, int_id, raisfast::models::user::UserRole::Author);
|
|
let fake = "nonexistent";
|
|
let (status, _): (StatusCode, Value) = send(
|
|
&mut app,
|
|
delete_auth(&format!("/api/v1/media/{fake}"), &tok),
|
|
)
|
|
.await;
|
|
assert_eq!(status, StatusCode::NOT_FOUND);
|
|
}
|