| TestNew - with header | POST request with X-Requested-With: XMLHttpRequest | Returns 200 OK |
| TestNew - without header | POST request without X-Requested-With header | Returns 400 Bad Request |
| TestNew_SkipsGET | GET request without header (default skip) | Returns 200 OK (skipped validation) |
| TestWithOptions_CustomValue - correct value | Request with custom header value “CustomValue” | Returns 200 OK |
| TestWithOptions_CustomValue - wrong value | Request with XMLHttpRequest when CustomValue expected | Returns 400 Bad Request |
| TestWithOptions_SkipPaths - skipped path | POST to /webhook (in skip list) without header | Returns 200 OK (path skipped) |
| TestWithOptions_SkipPaths - non-skipped path | POST to /api (not in skip list) without header | Returns 400 Bad Request |
| TestWithOptions_ErrorHandler | Request without header with custom error handler | Returns 403 Forbidden with custom JSON |
| TestRequire | Request with custom required value “FetchRequest” | Returns 200 OK |
| TestAJAXOnly - with AJAX header | GET request with XMLHttpRequest header | Returns 200 OK |
| TestAJAXOnly - without AJAX header | GET request without header (no methods skipped) | Returns 400 Bad Request |
| TestIsAJAX - is AJAX | Request with X-Requested-With: XMLHttpRequest | IsAJAX() returns true |
| TestIsAJAX - not AJAX | Request without X-Requested-With header | IsAJAX() returns false |
| TestCaseInsensitive | POST with lowercase “xmlhttprequest” | Returns 200 OK (case-insensitive match) |