Skip to content

Commit 6433fcc

Browse files
v1rtlv1rtl
authored andcommitted
add tests, lower the node target version, add set to req
1 parent 59610af commit 6433fcc

28 files changed

Lines changed: 263 additions & 188 deletions

README.md

Lines changed: 11 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
## Installation
1414

15-
Node.js 13 is required.
15+
Node.js 12.4.0 or newer (according to https://node.green/#ES2019) is required.
1616

1717
```sh
1818
# npm
@@ -45,31 +45,14 @@ import logger from '@tinyhttp/logger'
4545

4646
const app = new App()
4747

48-
app.all('/', (req, res) => {
49-
res.status(200).send(`
50-
<h1>tinyhttp example</h1>
51-
<ul>
52-
<li>Protocol: ${req.protocol}</li>
53-
<li>HTTPS: ${req.secure ? 'yes' : 'no'}</li>
54-
<li>URL: ${req.url}</li>
55-
<li>Method: ${req.method}</li>
56-
<li>Host: ${req.hostname}</li>
57-
<li>Status: ${res.statusCode}</li>
58-
</ul>
59-
<h2>Request headers</h2>
60-
<pre>
61-
${JSON.stringify(req.headers, null, 2)}
62-
</pre>
63-
`)
64-
})
65-
66-
app.get('/:first/:second', (req, res) => {
67-
res.json({ URLParams: req.params, QueryParams: req.query })
68-
})
69-
70-
app.use(staticFolder())
71-
72-
app.use(logger())
73-
74-
app.listen(3000)
48+
app
49+
.get('/', (_, res) => {
50+
res.send('<h1>Hello World</h1>')
51+
})
52+
.get('/page/:page/', (req, res) => {
53+
res.status(200).send(`${JSON.stringify(req.params, null, 2)}`)
54+
})
55+
.use(logger())
56+
.use(staticFolder())
57+
.listen(3000)
7558
```

__tests__/app.test.ts

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,25 @@
11
import supertest, { SuperTest, Request, Test, Response } from 'supertest'
2-
import { App } from '../packages/app/src'
2+
import { App, Handler } from '../packages/app/src'
33

4-
describe('Testing App', () => {
5-
it('should launch a basic server', done => {
6-
const app = new App()
4+
export const InitAppAndTest = (handler: Handler, route?: string, method: string = 'get') => {
5+
const app = new App()
76

8-
const server = app.use((_req, res) => void res.send('Hello world')).listen()
7+
if (route) {
8+
app[method](route, handler)
9+
} else {
10+
app.use(handler)
11+
}
912

10-
const request: any = supertest(server)
13+
const server = app.listen()
14+
15+
const request: any = supertest(server)
16+
17+
return { request, server }
18+
}
19+
20+
describe('Testing App', () => {
21+
it('should launch a basic server', done => {
22+
const { request, server } = InitAppAndTest((_req, res) => void res.send('Hello world'))
1123

1224
request
1325
.get('/')
@@ -29,13 +41,7 @@ describe('Testing App', () => {
2941

3042
describe('Testing routes', () => {
3143
it('should respond on matched route', done => {
32-
const app = new App()
33-
34-
app.get('/route', (_req, res) => void res.send('Hello world'))
35-
36-
const server = app.listen()
37-
38-
const request: any = supertest(server)
44+
const { request, server } = InitAppAndTest((_req, res) => void res.send('Hello world'), '/route')
3945

4046
request
4147
.get('/route')
@@ -55,7 +61,7 @@ describe('Testing routes', () => {
5561

5662
const server = app.listen()
5763

58-
const request: any = supertest(server)
64+
const request = supertest(server)
5965

6066
request
6167
.get('/route')

__tests__/request.ts

Lines changed: 60 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { App, Request } from '../packages/app/src/index'
22
import supertest from 'supertest'
3+
import { InitAppAndTest } from './app.test'
34

45
// From https://gist.github.com/nicbell/6081098
56
const compare = (obj1: any, obj2: any) => {
@@ -32,19 +33,13 @@ const compare = (obj1: any, obj2: any) => {
3233

3334
describe('Request extensions', () => {
3435
it('should have default HTTP Request properties', done => {
35-
const app = new App()
36-
37-
app.get('/', (req: Request, res) => {
36+
const { request, server } = InitAppAndTest((req, res) => {
3837
res.status(200).json({
3938
url: req.url,
4039
complete: req.complete
4140
})
4241
})
4342

44-
const server = app.listen()
45-
46-
const request: any = supertest(server)
47-
4843
request
4944
.get('/')
5045
.expect(200, { url: '/', complete: false })
@@ -72,14 +67,8 @@ describe('Request extensions', () => {
7267
done()
7368
})
7469
})
75-
it('query params are being parsed properly', done => {
76-
const app = new App()
77-
78-
app.use((req, res) => void res.send(req.query))
79-
80-
const server = app.listen()
81-
82-
const request: any = supertest(server)
70+
it('req.query is being parsed properly', done => {
71+
const { request, server } = InitAppAndTest((req, res) => void res.send(req.query))
8372

8473
request
8574
.get('/?param1=val1&param2=val2')
@@ -93,14 +82,8 @@ describe('Request extensions', () => {
9382
done()
9483
})
9584
})
96-
it('request params are being parsed properly', done => {
97-
const app = new App()
98-
99-
app.get('/:param1/:param2', (req, res) => void res.send(req.params))
100-
101-
const server = app.listen()
102-
103-
const request: any = supertest(server)
85+
it('req.params is being parsed properly', done => {
86+
const { request, server } = InitAppAndTest((req, res) => void res.send(req.params), '/:param1/:param2')
10487

10588
request
10689
.get('/val1/val2')
@@ -114,4 +97,58 @@ describe('Request extensions', () => {
11497
done()
11598
})
11699
})
100+
it('default req.protocol is HTTP', done => {
101+
const { request, server } = InitAppAndTest((req, res) => void res.send(req.protocol))
102+
103+
request
104+
.get('/')
105+
.expect(200, `http`)
106+
.end((err: Error) => {
107+
server.close()
108+
if (err) return done(err)
109+
done()
110+
})
111+
})
112+
// TODO: add the same test but for HTTPS
113+
it('req.secure is false on HTTP', done => {
114+
const { request, server } = InitAppAndTest((req, res) => void res.send(`HTTPS: ${req.secure ? 'yes' : 'no'}`))
115+
116+
request
117+
.get('/')
118+
.expect(200, `HTTPS: no`)
119+
.end((err: Error) => {
120+
server.close()
121+
if (err) return done(err)
122+
done()
123+
})
124+
})
125+
it('req.set sets the header and req.get returns a header', done => {
126+
const { request, server } = InitAppAndTest((req, res) => {
127+
req.set('X-Header', '123')
128+
res.send(req.get('X-Header'))
129+
})
130+
131+
request
132+
.get('/')
133+
.expect(200, `123`)
134+
.end((err: Error) => {
135+
server.close()
136+
if (err) return done(err)
137+
done()
138+
})
139+
})
140+
it('req.xhr is false because of node-superagent', done => {
141+
const { request, server } = InitAppAndTest((req, res) => {
142+
res.send(`XMLHttpRequest: ${req.xhr ? 'yes' : 'no'}`)
143+
})
144+
145+
request
146+
.get('/')
147+
.expect(200, `XMLHttpRequest: no`)
148+
.end((err: Error) => {
149+
server.close()
150+
if (err) return done(err)
151+
done()
152+
})
153+
})
117154
})

examples/basic/index.ts

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,16 @@
1-
import { App } from '../../packages/app/src/index'
2-
import staticFolder from '../../packages/static/src/index'
3-
import logger from '../../packages/logger/src/index'
1+
import { App } from '@tinyhttp/app'
2+
import staticFolder from '@tinyhttp/static'
3+
import logger from '@tinyhttp/logger'
44

5-
const app = new App({
6-
noMatchHandler: (_req, res) => {
7-
res.status(404)
8-
res.write(`<h1>404</h1>`)
9-
res.write(`<h2>Not found</h2>`)
10-
res.end(':(')
11-
}
12-
})
5+
const app = new App()
136

14-
app.get('/', (_, res) => void res.send('<h1>Hello World</h1>'))
15-
16-
app.get('/page/:page/', (req, res) => {
17-
res.status(200).send(`
18-
<h1>Some cool page</h1>
19-
<h2>URL</h2>
20-
${req.url}
21-
<h2>Params</h2>
22-
${JSON.stringify(req.params, null, 2)}
23-
`)
24-
})
25-
26-
app.use(logger()).use(staticFolder())
27-
28-
app.listen(3000)
7+
app
8+
.get('/', (_, res) => {
9+
res.send('<h1>Hello World</h1>')
10+
})
11+
.get('/page/:page/', (req, res) => {
12+
res.status(200).send(`${JSON.stringify(req.params, null, 2)}`)
13+
})
14+
.use(logger())
15+
.use(staticFolder())
16+
.listen(3000)

examples/basic/package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,10 @@
33
"private": true,
44
"scripts": {
55
"dev": "ts-node index.ts"
6+
},
7+
"dependencies": {
8+
"@tinyhttp/app": "workspace:^0.1.22",
9+
"@tinyhttp/logger": "workspace:^0.1.20",
10+
"@tinyhttp/static": "workspace:^0.1.20"
611
}
712
}

examples/no-match-handler/index.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { App } from '@tinyhttp/app'
2+
3+
new App({
4+
noMatchHandler: (_req, res) => {
5+
res.status(404).end(`<h1>Not found</h1>`)
6+
}
7+
})
8+
.get('/', (_, res) => void res.send('<h1>Hello World</h1>'))
9+
.listen(3000)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"name": "basic",
3+
"private": true,
4+
"scripts": {
5+
"dev": "ts-node index.ts"
6+
},
7+
"dependencies": {
8+
"@tinyhttp/app": "workspace:^0.1.22"
9+
}
10+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"extends": "../../tsconfig.json",
3+
"compilerOptions": {
4+
"module": "CommonJS",
5+
"outDir": "dist"
6+
}
7+
}

package.json

Lines changed: 38 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,40 @@
11
{
2-
"name": "@tinyhttp/monorepo",
3-
"version": "0.0.1",
4-
"private": true,
5-
"repository": "https://github.com/talentlessguy/tinyhttp.git",
6-
"author": "talentlessguy <pilll.PL22@gmail.com>",
7-
"license": "MIT",
8-
"engines": {
9-
"node": ">=13"
10-
},
11-
"files": [
12-
"dist"
13-
],
14-
"devDependencies": {
15-
"@types/jest": "^26.0.0",
16-
"@types/node": "^14.0.13",
17-
"@types/supertest": "^2.0.9",
18-
"@wessberg/rollup-plugin-ts": "^1.2.25",
19-
"jest": "^26.0.1",
20-
"rollup": "^2.17.1",
21-
"rollup-plugin-auto-external": "^2.0.0",
22-
"rollup-plugin-terser": "^6.1.0",
23-
"supertest": "^4.0.2",
24-
"ts-jest": "^26.1.0",
25-
"tslib": "^2.0.0",
26-
"typescript": "^3.9.5"
27-
},
28-
"scripts": {
29-
"prebuild": "rm -rf packages/*/dist",
30-
"build": "rollup -c",
31-
"dev": "rollup -cw",
32-
"postbuild": "rm packages/*/dist/index.esm.d.ts",
33-
"prepare": "pnpm run build && pnpm run test",
34-
"test": "jest"
35-
},
36-
"dependencies": {
37-
"@changesets/cli": "^2.9.1"
38-
}
2+
"name": "@tinyhttp/monorepo",
3+
"version": "0.0.1",
4+
"private": true,
5+
"repository": "https://github.com/talentlessguy/tinyhttp.git",
6+
"author": "talentlessguy <pilll.PL22@gmail.com>",
7+
"license": "MIT",
8+
"engines": {
9+
"node": ">=12.4.0",
10+
"pnpm": ">=5.2.3"
11+
},
12+
"files": [
13+
"dist"
14+
],
15+
"devDependencies": {
16+
"@types/jest": "^26.0.0",
17+
"@types/node": "^14.0.13",
18+
"@types/supertest": "^2.0.9",
19+
"@wessberg/rollup-plugin-ts": "^1.2.25",
20+
"jest": "^26.0.1",
21+
"rollup": "^2.17.1",
22+
"rollup-plugin-auto-external": "^2.0.0",
23+
"rollup-plugin-terser": "^6.1.0",
24+
"supertest": "^4.0.2",
25+
"ts-jest": "^26.1.0",
26+
"tslib": "^2.0.0",
27+
"typescript": "^3.9.5"
28+
},
29+
"scripts": {
30+
"prebuild": "rm -rf packages/*/dist",
31+
"build": "rollup -c",
32+
"dev": "rollup -cw",
33+
"postbuild": "rm packages/*/dist/index.esm.d.ts",
34+
"prepare": "pnpm run build && pnpm run test",
35+
"test": "jest"
36+
},
37+
"dependencies": {
38+
"@changesets/cli": "^2.9.1"
39+
}
3940
}

packages/app/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"dist"
1616
],
1717
"engines": {
18-
"node": ">=14"
18+
"node": ">=12.4.0"
1919
},
2020
"keywords": [
2121
"tinyhttp",

0 commit comments

Comments
 (0)