///|
test "context accepts exact problem json content type" {
  assert_true(
    validate_context(
      unwrap_problem("{}"),
      problem_context(None, Some("application/problem+json"), None),
    ).is_empty(),
  )
}

///|
test "context accepts case insensitive content type" {
  assert_true(
    validate_context(
      unwrap_problem("{}"),
      problem_context(None, Some("Application/Problem+Json"), None),
    ).is_empty(),
  )
}

///|
test "context accepts content type parameters" {
  assert_true(
    validate_context(
      unwrap_problem("{}"),
      problem_context(
        None,
        Some("application/problem+json;charset=utf-8"),
        None,
      ),
    ).is_empty(),
  )
}

///|
test "context rejects json content type" {
  assert_true(
    validate_context(
      unwrap_problem("{}"),
      problem_context(None, Some("application/json"), None),
    )[0].kind() ==
    InvalidContentType,
  )
}

///|
test "context reports status mismatch" {
  assert_true(
    validate_context(
      unwrap_problem("{\"status\":404}"),
      problem_context(Some(500), None, None),
    )[0].kind() ==
    StatusMismatch,
  )
}

///|
test "context accepts matching status" {
  assert_true(
    validate_context(
      unwrap_problem("{\"status\":404}"),
      problem_context(Some(404), None, None),
    ).is_empty(),
  )
}

///|
test "context does not infer transport status" {
  assert_true(
    validate_context(
      unwrap_problem("{\"status\":404}"),
      problem_context(None, None, None),
    ).is_empty(),
  )
}

///|
test "relative type requires base uri" {
  assert_true(
    validate_context(
      unwrap_problem("{\"type\":\"relative\"}"),
      problem_context(None, None, None),
    )[0].kind() ==
    MissingBaseUri,
  )
}

///|
test "relative instance accepts absolute base uri" {
  assert_true(
    validate_context(
      unwrap_problem("{\"instance\":\"/i\"}"),
      problem_context(None, None, Some("https://example.com/")),
    ).is_empty(),
  )
}

///|
test "relative instance rejects relative base uri" {
  assert_true(
    validate_context(
      unwrap_problem("{\"instance\":\"/i\"}"),
      problem_context(None, None, Some("base")),
    )[0].kind() ==
    InvalidBaseUri,
  )
}

///|
test "absolute uris do not require base" {
  assert_true(
    validate_context(
      unwrap_problem("{\"type\":\"urn:x\",\"instance\":\"https://e/i\"}"),
      problem_context(None, None, None),
    ).is_empty(),
  )
}

///|
test "missing raw type about blank does not require base" {
  assert_true(
    validate_context(unwrap_problem("{}"), problem_context(None, None, None)).is_empty(),
  )
}