-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathapi_media.rs
114 lines (103 loc) · 3.27 KB
/
api_media.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
use spis::{
PathFinder, db,
media::{ProcessedMedia, ProcessedMediaData, ProcessedMediaType},
server::{Config, Features, Listener},
};
use std::net::TcpListener;
use tempfile::NamedTempFile;
use tracing_subscriber::{EnvFilter, fmt, prelude::*};
async fn spawn_server() -> String {
// Init logging
dotenv::dotenv().ok();
tracing_subscriber::registry()
.with(fmt::layer())
.with(EnvFilter::from_default_env())
.init();
// Create listener
let listener = TcpListener::bind("127.0.0.1:0").expect("Failed to bind random port");
let port = listener.local_addr().unwrap().port();
let (_, db_file) = NamedTempFile::new()
.expect("Failed to create file")
.keep()
.expect("Failed to keep");
// Create DB
let pool = db::setup_db(db_file.to_str().unwrap())
.await
.expect("Failed to create DB");
// Insert phony record
db::media_insert(
&pool,
ProcessedMedia {
uuid: uuid::Uuid::new_v4(),
path: String::new(),
data: Some(ProcessedMediaData {
taken_at: chrono::Utc::now(),
}),
media_type: ProcessedMediaType::Image,
},
)
.await
.expect("Failed to insert record");
let pathfinder = PathFinder::new("", "", "", "");
// Spawn server
let config = Config {
features: Features {
archive_allow: true,
favorite_allow: true,
},
pathfinder,
};
let server =
spis::server::run(Listener::Tcp(listener), pool, config).expect("Failed to bind address");
let _ = tokio::spawn(server);
// Return endpoint
format!("http://127.0.0.1:{port}")
}
// async fn fetch(client: &reqwest::Client, address: &String) -> Vec<Media> {
// let response = client
// .get(&format!("{}/api?page_size=5", &address))
// .send()
// .await
// .expect("Failed to execute request.");
// assert!(response.status().is_success());
//
// response
// .json::<Vec<Media>>()
// .await
// .expect("Failed to parse json")
// }
#[tokio::test]
async fn media_works() {
let _address = spawn_server().await;
let _client = reqwest::Client::new();
// let media = fetch(&client, &address).await;
// assert_eq!(1, media.len());
//
// let media = media.get(0).expect("No media fetched");
// assert_eq!(false, media.favorite);
// assert_eq!(false, media.archived);
//
// let response = client
// .post(&format!("{}/api/{}?favorite=true", &address, &media.uuid))
// .send()
// .await
// .expect("Failed to execute request.");
// assert!(response.status().is_success());
//
// let media = fetch(&client, &address).await;
// assert_eq!(1, media.len());
//
// let media = media.get(0).expect("No media fetched");
// assert_eq!(true, media.favorite);
// assert_eq!(false, media.archived);
//
// let response = client
// .post(&format!("{}/api/{}?archive=true", &address, &media.uuid))
// .send()
// .await
// .expect("Failed to execute request.");
// assert!(response.status().is_success());
//
// let media = fetch(&client, &address).await;
// assert_eq!(0, media.len());
}