Files
sausage/interface/tests/client.rs
T

33 lines
1.5 KiB
Rust

//! Check the shared generator against a real example's discovered document.
/// String enums retain the conversion support that their parsers need.
#[test]
fn enum_client_keeps_used_error_support() {
let doc = serde_json::json!({
"components":{"schemas":{"Mode":{"type":"string","enum":["fast","slow"]}}},
"methods":[{"name":"mode","params":[],"result":{"schema":{"$ref":"#/components/schemas/Mode"}}}]
});
let code = sausage_interface::client_rs("settings", &doc).unwrap();
assert!(code.contains("pub mod error"));
assert!(code.contains("error::ConversionError"));
assert!(!code.contains("ModeParams"));
syn::parse_file(&code).unwrap();
}
#[test]
fn notes_client_preserves_names_and_docs() {
let document =
serde_json::from_str(include_str!("../../examples/consumer/imports/notes.json")).unwrap();
let code = sausage_interface::client_rs("notes", &document).unwrap();
assert!(code.contains("pub struct AddParams"));
assert!(code.contains("pub struct Added"));
assert!(!code.contains("AddedResult"));
assert!(!code.contains("pub struct Empty"));
assert!(!code.contains("pub mod error"));
assert!(code.contains("The complete note text"));
assert!(code.contains("pub fn add(params: AddParams)"));
syn::parse_file(&code).unwrap();
let target = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("../target/sdk");
std::fs::create_dir_all(&target).unwrap();
std::fs::write(target.join("notes-client.rs"), code).unwrap();
}