///|
test "minimal model keeps every raw standard member absent" {
let p = unwrap_problem("{}")
assert_true(p.type_raw() is None)
assert_true(p.title() is None)
assert_true(p.status() is None)
assert_true(p.detail() is None)
assert_true(p.instance() is None)
}
///|
test "missing type has effective about blank semantics" {
let p = unwrap_problem("{}")
assert_str_eq(p.effective_type(), "about:blank")
assert_true(p.is_about_blank())
}
///|
test "explicit about blank is recognized" {
assert_true(unwrap_problem("{\"type\":\"about:blank\"}").is_about_blank())
}
///|
test "all five standard members are exposed" {
let p = unwrap_problem(
"{\"type\":\"urn:x\",\"title\":\"T\",\"status\":400,\"detail\":\"D\",\"instance\":\"/i\"}",
)
assert_str_eq(p.type_raw().unwrap(), "urn:x")
assert_str_eq(p.title().unwrap(), "T")
assert_int_eq(p.status().unwrap(), 400)
assert_str_eq(p.detail().unwrap(), "D")
assert_str_eq(p.instance().unwrap(), "/i")
}
///|
test "extension accessor preserves a string" {
let p = unwrap_problem("{\"balance\":\"30\"}")
assert_true(p.extension("balance") == Some(Json::string("30")))
}
///|
test "extension accessor preserves null" {
assert_true(
unwrap_problem("{\"x\":null}").extension("x") == Some(Json::null()),
)
}
///|
test "extension accessor preserves boolean" {
assert_true(
unwrap_problem("{\"x\":true}").extension("x") == Some(Json::boolean(true)),
)
}
///|
test "extension accessor preserves arrays" {
assert_true(unwrap_problem("{\"x\":[1,2]}").extension("x") is Some(Array(_)))
}
///|
test "extension accessor preserves nested objects" {
assert_true(
unwrap_problem("{\"x\":{\"y\":1}}").extension("x") is Some(Object(_)),
)
}
///|
test "has extension distinguishes missing names" {
let p = unwrap_problem("{\"x\":1}")
assert_true(p.has_extension("x"))
assert_false(p.has_extension("y"))
}
///|
test "member counts separate standard and extension members" {
let p = unwrap_problem("{\"title\":\"T\",\"status\":400,\"x\":1}")
assert_int_eq(p.standard_member_count(), 2)
assert_int_eq(p.member_count(), 3)
}
///|
test "library metadata is stable" {
assert_str_eq(library_version(), "0.1.0-dev")
assert_str_eq(problem_media_type(), "application/problem+json")
}