use pushkin_compiler::{compile, CompileError, CompileRequest, Target};
const HOSTILE_SCHEMA: &str = r#"{
"type":"object",
"properties":{
"defaulted":{"type":"string","default":"O'Brien\\draft\"quoted"},
"choice":{"type":"string","enum":["O'Brien","C:\\temp","say \"hi\""]}
},
"required":["choice"],
"additionalProperties":false
}"#;
fn compile_target(target: Target) -> Result<String, CompileError> {
compile(&CompileRequest {
contract_name: "hostile".to_owned(),
schema_json: HOSTILE_SCHEMA.to_owned(),
target,
epoch: 1,
})
.map(|output| output.content)
}
#[test]
fn zod_escapes_string_defaults_and_enum_values() {
let output = compile_target(Target::Zod).unwrap();
assert!(
output.contains(r#".default("O'Brien\\draft\"quoted")"#),
"{output}"
);
assert!(output.contains(r#""C:\\temp""#), "{output}");
assert!(output.contains(r#""say \"hi\"""#), "{output}");
}
#[test]
fn pydantic_escapes_string_defaults_and_enum_values() {
let output = compile_target(Target::Pydantic).unwrap();
assert!(
output.contains(r#"default="O'Brien\\draft\"quoted""#),
"{output}"
);
assert!(output.contains(r#""C:\\temp""#), "{output}");
assert!(output.contains(r#""say \"hi\"""#), "{output}");
}
#[test]
fn rust_escapes_string_defaults_and_enum_values() {
let output = compile_target(Target::Rust).unwrap();
assert!(
output.contains(r#""O'Brien\\draft\"quoted".to_string()"#),
"{output}"
);
assert!(
output.contains(r#"#[serde(rename = "C:\\temp")]"#),
"{output}"
);
assert!(
output.contains(r#"#[serde(rename = "say \"hi\"")]"#),
"{output}"
);
}
#[test]
fn sql_escapes_string_defaults_and_enum_values() {
let output = compile_target(Target::Sql).unwrap();
assert!(
output.contains(r#"DEFAULT 'O''Brien\draft"quoted'"#),
"{output}"
);
assert!(output.contains("'O''Brien'"), "{output}");
assert!(output.contains(r"'C:\temp'"), "{output}");
}