#![allow(
clippy::tests_outside_test_module,
clippy::unwrap_used,
clippy::expect_used,
dead_code
)]
use axum::{body::Body, http::Request, Router};
use metrics_exporter_prometheus::PrometheusHandle;
pub fn runtime() -> tokio::runtime::Runtime {
tokio::runtime::Builder::new_current_thread()
.enable_all()
.build()
.expect("runtime builds")
}
pub fn router() -> Router {
let (_, dummy_handle) = docspec_http::metrics::build_recorder().expect("dummy recorder");
docspec_http::router::router_with_metrics(dummy_handle)
}
pub fn request<T>(method: &str, uri: &str, headers: &[(&str, &str)], body: T) -> Request<Body>
where
T: Into<Body>,
{
let mut builder = Request::builder().method(method).uri(uri);
for (name, value) in headers {
builder = builder.header(*name, *value);
}
builder.body(body.into()).expect("request builds")
}
pub fn empty_request(method: &str, uri: &str) -> Request<Body> {
request(method, uri, &[], Body::empty())
}
pub fn markdown_request<T>(body: T) -> Request<Body>
where
T: Into<Body>,
{
request(
"POST",
"/conversion",
&[("content-type", "text/markdown")],
body,
)
}
pub fn accepted_markdown_request<T>(body: T) -> Request<Body>
where
T: Into<Body>,
{
request(
"POST",
"/conversion",
&[
("content-type", "text/markdown"),
("accept", "application/vnd.docspec.blocknote+json"),
],
body,
)
}
pub fn with_test_recorder<R, F>(body: F) -> (PrometheusHandle, R)
where
F: FnOnce() -> R,
{
let (recorder, handle) = docspec_http::metrics::build_recorder().expect("test recorder builds");
let result = metrics::with_local_recorder(&recorder, body);
(handle, result)
}