use super::emit;
const HEADER: &str = "// header\n\n";
fn render_default() -> String {
emit::render(harn_stdlib::CONNECTOR_EVENT_SCHEMAS_SOURCE, HEADER)
.expect("canonical schema renders")
}
#[test]
fn renders_the_canonical_github_schema() {
let rust = render_default();
assert!(rust.contains("pub struct GitHubEventCommon {"));
assert!(rust.contains("#[serde(flatten)]\n pub common: GitHubEventCommon,"));
assert!(rust.contains("pub raw: JsonValue,"));
assert!(rust.contains(
"#[serde(default, skip_serializing_if = \"Option::is_none\")]\n pub action: Option<String>,"
));
assert!(rust.contains("pub installation_id: Option<i64>,"));
assert!(rust.contains("#[serde(default)]\n pub commits: Vec<JsonValue>,"));
assert!(rust.contains("pub pull_request_numbers: Vec<i64>,"));
assert!(rust.contains("pub enum GitHubEventPayload {"));
assert!(rust.contains("Issues(GitHubIssuesEventPayload),"));
assert!(rust.contains("InstallationRepositories(GitHubInstallationRepositoriesEventPayload),"));
assert!(rust.contains("Other(GitHubEventCommon),"));
assert!(rust.contains("impl<'de> Deserialize<'de> for GitHubEventPayload {"));
assert!(rust.contains("\"issue_comment\" => GitHubEventPayload::IssueComment("));
assert!(rust.contains(
"\"installation_repositories\" => GitHubEventPayload::InstallationRepositories("
));
}
#[test]
fn unsupported_type_form_is_a_hard_error() {
let source = "type Bad = int\n";
let err = emit::render(source, HEADER).expect_err("alias is unsupported");
assert!(
err.contains("Bad"),
"error should name the offending type: {err}"
);
}