///|
fn avatar_schema(required_title : Bool) -> @moonformdata.FormSchema {
let title_rule = @moonformdata.field_rule("title")
.with_required(required_title)
.with_max_values(1)
.with_max_length(80)
@moonformdata.strict_form_schema()
.add_field_rule(title_rule)
.add_file_rule(
@moonformdata.required_file_rule("avatar")
.with_max_files(1)
.with_max_length(1024 * 1024)
.with_allow_empty(false)
.allow_content_type("image/png")
.allow_extension("png"),
)
}
///|
fn request_with_title() -> @moonformdata.MultipartRequest {
@moonformdata.build_upload_request(
[("title", "profile")],
[@moonformdata.file_spec("avatar", "avatar.png", "image/png", "PNG")],
boundary="governance-valid",
).unwrap()
}
///|
fn request_without_title() -> @moonformdata.MultipartRequest {
@moonformdata.build_upload_request(
[],
[@moonformdata.file_spec("avatar", "avatar.png", "image/png", "PNG")],
boundary="governance-missing",
).unwrap()
}
///|
fn main {
let v1 = @moonformdata.upload_contract(avatar_schema(false)).with_max_risk(
@moonformdata.LowRisk,
)
let v2 = @moonformdata.upload_contract(avatar_schema(true)).with_max_risk(
@moonformdata.LowRisk,
)
let compatibility = @moonformdata.compare_upload_contracts(v1, v2)
println(compatibility.summary())
for line in compatibility.to_lines() {
println(line)
}
let cases = [
@moonformdata.upload_conformance_case(
"valid avatar",
request_with_title(),
@moonformdata.ExpectAccepted,
).with_expected_risk(@moonformdata.LowRisk),
@moonformdata.upload_conformance_case(
"missing title",
request_without_title(),
@moonformdata.ExpectRejected,
).require_issue_code("schema_missing_field"),
]
let suite = @moonformdata.run_conformance_suite("avatar-v2", v2, cases)
println(suite.summary())
let baseline = @moonformdata.conformance_baseline(suite)
match @moonformdata.parse_conformance_baseline(baseline.to_text()) {
Ok(parsed) => {
let rerun = @moonformdata.run_conformance_suite("avatar-v2", v2, [
@moonformdata.upload_conformance_case(
"valid avatar",
request_with_title(),
@moonformdata.ExpectAccepted,
).with_expected_risk(@moonformdata.LowRisk),
@moonformdata.upload_conformance_case(
"missing title",
request_without_title(),
@moonformdata.ExpectRejected,
).require_issue_code("schema_missing_field"),
])
println(
@moonformdata.compare_conformance_baseline(parsed, rerun).summary(),
)
}
Err(err) => println(err.message())
}
let endpoint = @moonformdata.upload_endpoint(
"avatar-upload", "POST", "/v2/avatar", "2.0.0", v2,
).unwrap()
let catalog = @moonformdata.upload_contract_catalog().add(endpoint).unwrap()
match catalog.inspect_route("post", "/v2/avatar", request_with_title()) {
Ok(result) => println(result.decision_line())
Err(err) => println(err.message())
}
}