// test_body_contains_key.el — verifies body_contains_key correctly // distinguishes "user asserted this field" from "user did not mention it". // This is the gate the PATCH endpoint uses to enforce immutability. fn body_contains_key(body: String, key: String) -> Bool { return str_contains(body, "\"" + key + "\":") } fn assert_true(name: String, got: Bool) -> Bool { if got { println("PASS " + name) return true } println("FAIL " + name + " want=true got=false") return false } fn assert_false(name: String, got: Bool) -> Bool { if got { println("FAIL " + name + " want=false got=true") return false } println("PASS " + name) return true } fn main() -> Void { let b1: String = "{\"post_reasoning\":\"x\"}" assert_true("present-non-empty", body_contains_key(b1, "post_reasoning")) // Empty value still counts as "asserted" — user mentioned the key. let b2: String = "{\"post_reasoning\":\"\"}" assert_true("present-empty-string", body_contains_key(b2, "post_reasoning")) // Key absent. let b3: String = "{\"gap_summary\":\"x\"}" assert_false("absent", body_contains_key(b3, "post_reasoning")) // Substring of another key must NOT match. // E.g. "tags": vs "tag": — distinct. let b4: String = "{\"tags\":\"a,b,c\"}" assert_false("substring-distinct", body_contains_key(b4, "tag")) assert_true("exact-tags", body_contains_key(b4, "tags")) // Immutable-field detection: PATCH must reject these. let b5: String = "{\"pre_reasoning\":\"new value\",\"post_reasoning\":\"x\"}" assert_true("detect-pre_reasoning", body_contains_key(b5, "pre_reasoning")) assert_true("detect-post_reasoning", body_contains_key(b5, "post_reasoning")) let b6: String = "{\"cgi_id\":\"x\"}" assert_true("detect-cgi_id", body_contains_key(b6, "cgi_id")) // No false-positive if the value happens to contain the same string. let b7: String = "{\"trigger\":\"contained pre_reasoning string\"}" assert_false("no-false-positive-from-value", body_contains_key(b7, "pre_reasoning")) }