@mjackson/headers
Version:
A toolkit for working with HTTP headers in JavaScript
83 lines (74 loc) • 4.36 kB
text/typescript
import * as assert from 'node:assert/strict';
import { describe, it } from 'node:test';
import { canonicalHeaderName } from './header-names.ts';
describe('normalizeHeaderName', () => {
it('handles common headers correctly', () => {
assert.equal(canonicalHeaderName('content-type'), 'Content-Type');
assert.equal(canonicalHeaderName('content-length'), 'Content-Length');
assert.equal(canonicalHeaderName('user-agent'), 'User-Agent');
assert.equal(canonicalHeaderName('accept'), 'Accept');
});
it('handles special case headers correctly', () => {
assert.equal(canonicalHeaderName('etag'), 'ETag');
assert.equal(canonicalHeaderName('www-authenticate'), 'WWW-Authenticate');
assert.equal(canonicalHeaderName('x-forwarded-for'), 'X-Forwarded-For');
assert.equal(canonicalHeaderName('x-xss-protection'), 'X-XSS-Protection');
assert.equal(canonicalHeaderName('te'), 'TE');
assert.equal(canonicalHeaderName('expect-ct'), 'Expect-CT');
});
it('normalizes mixed-case input', () => {
assert.equal(canonicalHeaderName('CoNtEnT-TyPe'), 'Content-Type');
assert.equal(canonicalHeaderName('x-FoRwArDeD-fOr'), 'X-Forwarded-For');
});
it('handles single-word headers', () => {
assert.equal(canonicalHeaderName('authorization'), 'Authorization');
assert.equal(canonicalHeaderName('host'), 'Host');
});
it('normalizes other common HTTP headers', () => {
assert.equal(canonicalHeaderName('accept-charset'), 'Accept-Charset');
assert.equal(canonicalHeaderName('accept-encoding'), 'Accept-Encoding');
assert.equal(canonicalHeaderName('accept-language'), 'Accept-Language');
assert.equal(canonicalHeaderName('cache-control'), 'Cache-Control');
assert.equal(canonicalHeaderName('connection'), 'Connection');
assert.equal(canonicalHeaderName('cookie'), 'Cookie');
assert.equal(canonicalHeaderName('date'), 'Date');
assert.equal(canonicalHeaderName('expect'), 'Expect');
assert.equal(canonicalHeaderName('forwarded'), 'Forwarded');
assert.equal(canonicalHeaderName('from'), 'From');
assert.equal(canonicalHeaderName('if-match'), 'If-Match');
assert.equal(canonicalHeaderName('if-modified-since'), 'If-Modified-Since');
assert.equal(canonicalHeaderName('if-none-match'), 'If-None-Match');
assert.equal(canonicalHeaderName('if-range'), 'If-Range');
assert.equal(canonicalHeaderName('if-unmodified-since'), 'If-Unmodified-Since');
assert.equal(canonicalHeaderName('max-forwards'), 'Max-Forwards');
assert.equal(canonicalHeaderName('origin'), 'Origin');
assert.equal(canonicalHeaderName('pragma'), 'Pragma');
assert.equal(canonicalHeaderName('proxy-authorization'), 'Proxy-Authorization');
assert.equal(canonicalHeaderName('range'), 'Range');
assert.equal(canonicalHeaderName('referer'), 'Referer');
assert.equal(canonicalHeaderName('server'), 'Server');
assert.equal(canonicalHeaderName('transfer-encoding'), 'Transfer-Encoding');
assert.equal(canonicalHeaderName('upgrade'), 'Upgrade');
assert.equal(canonicalHeaderName('via'), 'Via');
assert.equal(canonicalHeaderName('warning'), 'Warning');
assert.equal(canonicalHeaderName('alt-svc'), 'Alt-Svc');
assert.equal(canonicalHeaderName('content-disposition'), 'Content-Disposition');
assert.equal(canonicalHeaderName('content-encoding'), 'Content-Encoding');
assert.equal(canonicalHeaderName('content-language'), 'Content-Language');
assert.equal(canonicalHeaderName('content-location'), 'Content-Location');
assert.equal(canonicalHeaderName('content-range'), 'Content-Range');
assert.equal(canonicalHeaderName('link'), 'Link');
assert.equal(canonicalHeaderName('location'), 'Location');
assert.equal(canonicalHeaderName('retry-after'), 'Retry-After');
assert.equal(canonicalHeaderName('strict-transport-security'), 'Strict-Transport-Security');
assert.equal(canonicalHeaderName('vary'), 'Vary');
});
it('handles custom X- headers', () => {
assert.equal(canonicalHeaderName('x-custom-header'), 'X-Custom-Header');
assert.equal(canonicalHeaderName('x-requested-with'), 'X-Requested-With');
});
it('preserves casing for unknown acronyms', () => {
assert.equal(canonicalHeaderName('x-csrf-token'), 'X-Csrf-Token');
assert.equal(canonicalHeaderName('x-api-key'), 'X-Api-Key');
});
});