#![allow(
clippy::missing_docs_in_private_items,
reason = "test helpers and fixtures do not need doc comments"
)]
use axum::{
body::Body,
http::{Request, StatusCode},
};
use tower::ServiceExt;
use crate::routes::http::build_app;
struct TempHome;
impl TempHome {
fn set() -> Self {
let dir = std::env::temp_dir().join(format!(
"moadim-listroutineshttptest-{}",
uuid::Uuid::new_v4()
));
std::fs::create_dir_all(&dir).expect("create temp home");
unsafe {
std::env::set_var("MOADIM_HOME_OVERRIDE", &dir);
}
Self
}
}
impl Drop for TempHome {
fn drop(&mut self) {
unsafe {
std::env::remove_var("MOADIM_HOME_OVERRIDE");
}
}
}
#[tokio::test]
async fn list_routines_returns_empty_array_by_default() {
let _home = TempHome::set();
let resp = build_app(crate::routines::new_store())
.oneshot(
Request::builder()
.uri("/api/v1/routines")
.body(Body::empty())
.unwrap(),
)
.await
.unwrap();
assert_eq!(resp.status(), StatusCode::OK);
let bytes = axum::body::to_bytes(resp.into_body(), usize::MAX)
.await
.unwrap();
let json: serde_json::Value = serde_json::from_slice(&bytes).unwrap();
assert_eq!(json, serde_json::json!([]));
}