use super::support::{products, resolve, schema};
use crate::generators::rust::render;
pub(super) fn file(name: &str) -> String {
let schema = schema();
let model = resolve(&products(), &schema).with_actix(true);
render::files(&model, &schema)
.into_iter()
.find(|file| file.name == name)
.unwrap_or_else(|| panic!("{name} should be emitted"))
.contents
}
#[test]
fn every_verb_gets_a_handler() {
let routes = file("routes.rs");
for handler in ["list()", "find(", "create(", "update(", "remove("] {
let signature = format!("pub async fn {handler}");
assert!(
routes.contains(&signature),
"missing {signature}:\n{routes}"
);
}
}
#[test]
fn every_handler_is_routed() {
let routes = file("routes.rs");
for registration in [
"web::get().to(list)",
"web::get().to(find)",
"web::post().to(create)",
"web::put().to(update)",
"web::delete().to(remove)",
] {
assert!(routes.contains(registration), "missing {registration}");
}
}
#[test]
fn each_handler_is_annotated_for_the_published_schema() {
let routes = file("routes.rs");
assert_eq!(routes.matches("#[utoipa::path(").count(), 5, "{routes}");
assert!(routes.contains("path = \"/products\""));
assert!(routes.contains("body = [Product]"));
assert!(routes.contains("request_body = Product"));
}