diff options
author | EuAndreh <eu@euandre.org> | 2024-03-16 06:55:20 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2024-03-16 06:55:20 -0300 |
commit | afe9d6f77ea2386732e6d7646c298584321d44cf (patch) | |
tree | dbb80c84f3158c7b6591057e16525c2fa6a5678f /tests | |
parent | src/hero.mjs: Remove current makeUpgradeListener() and its helpers (diff) | |
download | papod-afe9d6f77ea2386732e6d7646c298584321d44cf.tar.gz papod-afe9d6f77ea2386732e6d7646c298584321d44cf.tar.xz |
src/hero.mjs: Add writeHead() and its helper functions
Diffstat (limited to 'tests')
-rw-r--r-- | tests/js/hero.mjs | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/tests/js/hero.mjs b/tests/js/hero.mjs index 468f4a8..33403d0 100644 --- a/tests/js/hero.mjs +++ b/tests/js/hero.mjs @@ -33,6 +33,10 @@ import { findDynamicHandler, findHandler, extractQueryParams, + renderStatus, + renderHeaders, + buildHeader, + writeHead, handle404, make404Handler, handleRequest, @@ -1331,6 +1335,74 @@ const test_extractQueryParams = async t => { }); }; +const test_renderStatus = async t => { + t.start("renderStatus()"); + + await t.test("good statuses", () => { + assert.equal(renderStatus(101), "HTTP/1.1 101 Switching Protocols"); + assert.equal(renderStatus(202), "HTTP/1.1 202 Accepted"); + assert.equal(renderStatus(409), "HTTP/1.1 409 Conflict"); + }); +}; + +const test_renderHeaders = async t => { + t.start("renderHeaders()"); + + await t.test("empty values", () => { + assert.deepEqual(renderHeaders({}), []); + }) + + await t.test("values are rendered and sorted", () => { + assert.deepEqual(renderHeaders({ a: "one", Z: "two" }), [ + "a: one", + "Z: two", + ]); + }); + + await t.test("GIGO for newlines", () => { + assert.deepEqual(renderHeaders({ a: "\nx: 1\r\n", }), [ + "a: \nx: 1\r\n", + ]); + }); +}; + +const test_buildHeader = async t => { + t.start("buildHeader()"); + + await t.test("empty values", () => { + assert.equal( + buildHeader(200, {}), + "HTTP/1.1 200 OK\r\n" + + "\r\n", + ); + }); + + await t.test("we compose the status line and the headers", () => { + assert.equal( + buildHeader(201, { a: "1", b: "2" }), + "HTTP/1.1 201 Created\r\n" + + "a: 1\r\n" + + "b: 2\r\n" + + "\r\n", + ); + }); +}; + +const test_writeHead = async t => { + t.start("writeHead()"); + + await t.test("we simply write what buildHeader() gives us", () => { + const contents = []; + const socket = { write: x => contents.push(x) }; + writeHead(socket, 202, { "Key": "Value" }); + assert.deepEqual(contents, [ + "HTTP/1.1 202 Accepted\r\n" + + "Key: Value\r\n" + + "\r\n", + ]); + }); +}; + const test_make404Handler = async t => { t.start("make404Handler"); @@ -2146,6 +2218,10 @@ await runner.runTests([ test_findDynamicHandler, test_findHandler, test_extractQueryParams, + test_renderStatus, + test_renderHeaders, + test_buildHeader, + test_writeHead, test_make404Handler, test_handleRequest, test_makeRequestListener, |