@flancer32/teq-web 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/package.json +1 -1
- package/teqfw.json +8 -0
- package/test/unit/Back/Helper/Respond.test.mjs +83 -0
package/CHANGELOG.md
CHANGED
package/package.json
CHANGED
package/teqfw.json
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import {describe, it, beforeEach} from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import {buildTestContainer} from '../../common.js';
|
|
4
|
+
|
|
5
|
+
/** Minimal HTTP/2 constants mock */
|
|
6
|
+
const mockHttp2 = {
|
|
7
|
+
constants: {
|
|
8
|
+
HTTP2_HEADER_ALLOW: 'allow',
|
|
9
|
+
HTTP_STATUS_OK: 200,
|
|
10
|
+
HTTP_STATUS_CREATED: 201,
|
|
11
|
+
HTTP_STATUS_NO_CONTENT: 204,
|
|
12
|
+
HTTP_STATUS_MOVED_PERMANENTLY: 301,
|
|
13
|
+
HTTP_STATUS_FOUND: 302,
|
|
14
|
+
HTTP_STATUS_SEE_OTHER: 303,
|
|
15
|
+
HTTP_STATUS_NOT_MODIFIED: 304,
|
|
16
|
+
HTTP_STATUS_BAD_REQUEST: 400,
|
|
17
|
+
HTTP_STATUS_UNAUTHORIZED: 401,
|
|
18
|
+
HTTP_STATUS_PAYMENT_REQUIRED: 402,
|
|
19
|
+
HTTP_STATUS_FORBIDDEN: 403,
|
|
20
|
+
HTTP_STATUS_NOT_FOUND: 404,
|
|
21
|
+
HTTP_STATUS_METHOD_NOT_ALLOWED: 405,
|
|
22
|
+
HTTP_STATUS_CONFLICT: 409,
|
|
23
|
+
HTTP_STATUS_INTERNAL_SERVER_ERROR: 500,
|
|
24
|
+
HTTP_STATUS_BAD_GATEWAY: 502,
|
|
25
|
+
HTTP_STATUS_SERVICE_UNAVAILABLE: 503,
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
class MockRes {
|
|
30
|
+
constructor() {
|
|
31
|
+
this.statusCode = undefined;
|
|
32
|
+
this.headers = undefined;
|
|
33
|
+
this.body = undefined;
|
|
34
|
+
this.headersSent = false;
|
|
35
|
+
this.writableEnded = false;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
writeHead(status, headers) {
|
|
39
|
+
this.statusCode = status;
|
|
40
|
+
this.headers = headers;
|
|
41
|
+
this.headersSent = true;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
end(chunk = '') {
|
|
45
|
+
this.body = chunk;
|
|
46
|
+
this.writableEnded = true;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
describe('Fl32_Web_Back_Helper_Respond', () => {
|
|
51
|
+
let container;
|
|
52
|
+
let respond;
|
|
53
|
+
|
|
54
|
+
beforeEach(async () => {
|
|
55
|
+
container = buildTestContainer();
|
|
56
|
+
container.register('node:http2', mockHttp2);
|
|
57
|
+
respond = await container.get('Fl32_Web_Back_Helper_Respond$');
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('sends 200 OK response', () => {
|
|
61
|
+
const res = new MockRes();
|
|
62
|
+
const ok = respond.code200_Ok({res, headers: {a: 'b'}, body: 'hi'});
|
|
63
|
+
assert.strictEqual(ok, true);
|
|
64
|
+
assert.strictEqual(res.statusCode, 200);
|
|
65
|
+
assert.deepStrictEqual(res.headers, {a: 'b'});
|
|
66
|
+
assert.strictEqual(res.body, 'hi');
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('adds Allow header for 405 Method Not Allowed', () => {
|
|
70
|
+
const res = new MockRes();
|
|
71
|
+
respond.code405_MethodNotAllowed({res});
|
|
72
|
+
assert.strictEqual(res.statusCode, 405);
|
|
73
|
+
assert.strictEqual(res.headers.allow, 'HEAD, GET, POST');
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it('isWritable detects ended responses', () => {
|
|
77
|
+
const res = new MockRes();
|
|
78
|
+
respond.code200_Ok({res});
|
|
79
|
+
assert.strictEqual(respond.isWritable(res), false);
|
|
80
|
+
const again = respond.code200_Ok({res});
|
|
81
|
+
assert.strictEqual(again, false);
|
|
82
|
+
});
|
|
83
|
+
});
|