use http::HeaderValue;
use qubit_redact::Redactor;
use qubit_redact::formats::http::BodyCapture;
use crate::http::support::redaction::redact_body;
#[test]
fn test_json_masks_secret_field_value() {
let rendered = redact_body(
&Redactor::standard(),
BodyCapture::complete(br#"{"password":"raw"}"#),
Some(&HeaderValue::from_static("application/json")),
);
assert!(!rendered.contains("raw"));
}
#[test]
fn test_ndjson_masks_secrets_without_exposing_later_records() {
let content_type = HeaderValue::from_static("application/x-ndjson");
let rendered = redact_body(
&Redactor::standard(),
BodyCapture::complete(b"{\"password\":\"first-secret\"}\n{\"token\":\"second-secret\"}\n"),
Some(&content_type),
);
assert!(!rendered.contains("first-secret"));
assert!(!rendered.contains("second-secret"));
assert!(rendered.contains("password"));
assert!(rendered.contains("token"));
}
#[test]
fn test_malformed_ndjson_does_not_expose_source_text() {
let content_type = HeaderValue::from_static("application/ndjson");
let rendered = redact_body(
&Redactor::standard(),
BodyCapture::complete(b"{\"password\":\"safe\"}\n{\"token\":\"raw-secret\""),
Some(&content_type),
);
assert!(!rendered.contains("raw-secret"));
}
#[test]
fn test_ndjson_rejects_integer_above_u64_without_exposing_source_text() {
let content_type = HeaderValue::from_static("application/x-ndjson");
let rendered = redact_body(
&Redactor::standard(),
BodyCapture::complete(b"{\"password\":\"safe\"}\n{\"id\":18446744073709551616,\"token\":\"raw-secret\"}\n"),
Some(&content_type),
);
assert!(!rendered.contains("raw-secret"));
}