-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcompressor.test.ts
97 lines (89 loc) · 2.62 KB
/
compressor.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import { Compressor } from './compressor';
import { COMPRESSOR_OPTS } from './compressor';
import { Handler } from '../handler';
import { HttpApp } from '../http/app';
import { Message } from '../interfaces';
import { Route } from '../interfaces';
import * as zlib from 'zlib';
import { Injectable } from 'injection-js';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';
@Injectable()
class Hello extends Handler {
handle(message$: Observable<Message>): Observable<Message> {
return message$.pipe(
tap(({ response }) => {
response.body = 'Hello, http!';
})
);
}
}
const routes: Route[] = [
{
path: '',
middlewares: [Compressor],
services: [{ provide: COMPRESSOR_OPTS, useValue: { threshold: 0 } }],
children: [
{
methods: ['GET'],
path: '/foo/bar',
handler: Hello
}
]
}
];
describe('Compressor unit tests', () => {
test('performs gzip compression', (done) => {
const app = new HttpApp(routes);
const listener = app.listen();
app['response$'].subscribe((response) => {
expect(response.headers['Content-Encoding']).toEqual('gzip');
expect(zlib.unzipSync(response.body).toString()).toEqual(
'"Hello, http!"'
);
expect(response.statusCode).toEqual(200);
done();
});
listener(
{
method: 'GET',
url: '/foo/bar',
// eslint-disable-next-line @typescript-eslint/naming-convention
headers: { 'Accept-Encoding': 'gzip, deflate' }
} as any,
{} as any
);
});
test('performs deflate compression', (done) => {
const app = new HttpApp(routes);
const listener = app.listen();
app['response$'].subscribe((response) => {
expect(response.headers['Content-Encoding']).toEqual('deflate');
expect(zlib.inflateSync(response.body).toString()).toEqual(
'"Hello, http!"'
);
expect(response.statusCode).toEqual(200);
done();
});
listener(
{
method: 'GET',
url: '/foo/bar',
// eslint-disable-next-line @typescript-eslint/naming-convention
headers: { 'Accept-Encoding': 'deflate' }
} as any,
{} as any
);
});
test('performs no compression', (done) => {
const app = new HttpApp(routes);
const listener = app.listen();
app['response$'].subscribe((response) => {
expect(response.headers['Content-Encoding']).toBeUndefined();
expect(response.body).toEqual('"Hello, http!"');
expect(response.statusCode).toEqual(200);
done();
});
listener({ method: 'GET', url: '/foo/bar', headers: {} } as any, {} as any);
});
});