///|
test "rfc style out of credit problem parses" {
let p = unwrap_problem(
"{\"type\":\"https://example.com/probs/out-of-credit\",\"title\":\"You do not have enough credit.\",\"status\":403,\"detail\":\"Your balance is 30, but that costs 50.\",\"instance\":\"/account/12345/msgs/abc\",\"balance\":30,\"accounts\":[\"/account/12345\",\"/account/67890\"]}",
)
assert_int_eq(p.status().unwrap(), 403)
assert_true(p.has_extension("accounts"))
}
///|
test "validation problem keeps error array extension" {
assert_true(
unwrap_problem(
"{\"type\":\"https://example.net/validation-error\",\"title\":\"Invalid request\",\"status\":422,\"errors\":[{\"detail\":\"must be positive\",\"pointer\":\"#/age\"}]}",
).extension("errors")
is Some(Array(_)),
)
}
///|
test "rfc consumer ignores wrong typed standard members" {
let r = unwrap_parse(
"{\"title\":42,\"status\":\"403\",\"detail\":false,\"balance\":30}",
)
assert_int_eq(r.diagnostics().length(), 3)
assert_true(r.problem().has_extension("balance"))
}
///|
test "about blank is equivalent whether type is missing or explicit" {
assert_str_eq(
unwrap_problem("{}").effective_type(),
unwrap_problem("{\"type\":\"about:blank\"}").effective_type(),
)
}