107 lines
2.9 KiB
Rust
107 lines
2.9 KiB
Rust
mod common;
|
|
|
|
use common::test_server;
|
|
use serde_json::json;
|
|
|
|
#[tokio::test]
|
|
async fn announce_valid_ok() {
|
|
let server = test_server();
|
|
let res = server.post("/api/v1/announce")
|
|
.json(&json!({
|
|
"peer_id": "peer123",
|
|
"name": "minha-musica.ogg",
|
|
"description": "minha composicao",
|
|
"type": "audio",
|
|
"extension": "ogg",
|
|
"size_bytes": 1024,
|
|
"hash": "ab".repeat(32),
|
|
"license": "authored",
|
|
"tags": ["musica"]
|
|
}))
|
|
.await;
|
|
assert_eq!(res.status_code(), 200);
|
|
assert_eq!(res.json::<serde_json::Value>()["ok"], true);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn announce_invalid_name_rejected() {
|
|
let server = test_server();
|
|
let res = server.post("/api/v1/announce")
|
|
.json(&json!({
|
|
"peer_id": "peer123",
|
|
"name": "",
|
|
"description": "",
|
|
"type": "audio",
|
|
"extension": "ogg",
|
|
"size_bytes": 10,
|
|
"hash": "ab".repeat(32),
|
|
"license": "authored"
|
|
}))
|
|
.await;
|
|
assert_eq!(res.status_code(), 400);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn announce_bad_hash_rejected() {
|
|
let server = test_server();
|
|
let res = server.post("/api/v1/announce")
|
|
.json(&json!({
|
|
"peer_id": "peer123",
|
|
"name": "arquivo.ogg",
|
|
"description": "",
|
|
"type": "audio",
|
|
"extension": "ogg",
|
|
"size_bytes": 10,
|
|
"hash": "ab",
|
|
"license": "authored"
|
|
}))
|
|
.await;
|
|
assert_eq!(res.status_code(), 400);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn announce_duplicate_hash_rejected() {
|
|
let server = test_server();
|
|
let body = json!({
|
|
"peer_id": "peer123",
|
|
"name": "musica.ogg",
|
|
"description": "",
|
|
"type": "audio",
|
|
"extension": "ogg",
|
|
"size_bytes": 100,
|
|
"hash": "ab".repeat(32),
|
|
"license": "authored"
|
|
});
|
|
server.post("/api/v1/announce").json(&body).await;
|
|
let res = server.post("/api/v1/announce").json(&body).await;
|
|
assert_eq!(res.status_code(), 400);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn get_file_roundtrip() {
|
|
let server = test_server();
|
|
let hash = "cd".repeat(32);
|
|
server.post("/api/v1/announce")
|
|
.json(&json!({
|
|
"peer_id": "peer1",
|
|
"name": "doc.pdf",
|
|
"description": "",
|
|
"type": "document",
|
|
"extension": "pdf",
|
|
"size_bytes": 100,
|
|
"hash": hash,
|
|
"license": "authored"
|
|
}))
|
|
.await;
|
|
let file_id = format!("peer1::{}", &hash[..12]);
|
|
let res = server.get(&format!("/api/v1/files/{file_id}")).await;
|
|
assert_eq!(res.status_code(), 200);
|
|
assert_eq!(res.json::<serde_json::Value>()["name"], "doc.pdf");
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn get_file_missing_returns_404() {
|
|
let server = test_server();
|
|
let res = server.get("/api/v1/files/nao-existe").await;
|
|
assert_eq!(res.status_code(), 404);
|
|
} |