0
0
mirror of https://github.com/honojs/hono.git synced 2024-11-30 01:56:18 +01:00
hono/lagon_test/index.test.ts
Tom Lienard 884b287f3d
feat: Lagon support with runtime detection & tests (#742)
* feat: Lagon support with runtime detection & tests

* ci: build before running test:lagon

* refactor: remove mentions of Lagon since it's still in dev

* test: enable ETag test
2022-12-25 01:42:59 +09:00

201 lines
6.2 KiB
TypeScript

describe('Example', () => {
test('GET /', async () => {
const res = await fetch('http://127.0.0.1:1234')
expect(res.status).toBe(200)
expect(await res.text()).toBe('Hono!!')
expect(res.headers.get('x-powered-by')).toBe('Hono')
expect(res.headers.get('x-response-time')).toContain('ms')
})
test('GET /hello/anything', async () => {
const res = await fetch('http://127.0.0.1:1234/hello/anything')
expect(res.status).toBe(404)
expect(res.headers.get('x-message')).toBe('This is addHeader middleware!')
})
test('GET /hello', async () => {
const res = await fetch('http://127.0.0.1:1234/hello')
expect(res.status).toBe(200)
expect(await res.text()).toBe('This is /hello')
})
test('GET /runtime', async () => {
const res = await fetch('http://127.0.0.1:1234/runtime')
expect(res.status).toBe(200)
expect(await res.text()).toBe('lagon')
})
test('GET /entry/:id', async () => {
const res = await fetch('http://127.0.0.1:1234/entry/42')
expect(res.status).toBe(200)
expect(await res.text()).toBe('Your ID is 42')
})
describe('/book', () => {
test('GET /book', async () => {
const res = await fetch('http://127.0.0.1:1234/book')
expect(res.status).toBe(200)
expect(await res.text()).toBe('List Books')
})
test('GET /book/:id', async () => {
const res = await fetch('http://127.0.0.1:1234/book/3')
expect(res.status).toBe(200)
expect(await res.text()).toBe('Get Book: 3')
})
test('POST /book', async () => {
const res = await fetch('http://127.0.0.1:1234/book', {
method: 'POST',
})
expect(res.status).toBe(200)
expect(await res.text()).toBe('Create Book')
})
})
test('GET /redirect', async () => {
const res = await fetch('http://127.0.0.1:1234/redirect', {
redirect: 'manual',
})
expect(res.status).toBe(302)
expect(res.headers.get('location')).toBe('/')
})
describe('/basic-auth', () => {
test('GET /basic-auth/anyroute unauthorized', async () => {
const res = await fetch('http://127.0.0.1:1234/basic-auth/anyroute')
expect(res.status).toBe(401)
expect(await res.text()).toBe('Unauthorized')
})
test('GET /basic-auth/anyroute', async () => {
const res = await fetch('http://127.0.0.1:1234/basic-auth/anyroute', {
headers: {
authorization: `Basic ${btoa('hono:acoolproject')}`,
},
})
expect(res.status).toBe(200)
expect(await res.text()).toBe('You are authorized')
})
})
describe('/bearer-auth', () => {
test('GET /bearer-auth/anyroute unauthorized', async () => {
const res = await fetch('http://127.0.0.1:1234/bearer-auth/anyroute')
expect(res.status).toBe(401)
expect(await res.text()).toBe('Unauthorized')
})
test('GET /bearer-auth/anyroute', async () => {
const res = await fetch('http://127.0.0.1:1234/bearer-auth/anyroute', {
headers: {
authorization: 'Bearer secrettoken',
},
})
expect(res.status).toBe(200)
expect(await res.text()).toBe('You are authorized')
})
})
test('GET /etag/cached', async () => {
const res = await fetch('http://127.0.0.1:1234/etag/cached')
expect(res.status).toBe(200)
expect(res.headers.get('etag')).toBe('"90ea638841fff3c326fc22cbd156f1146ac0ac02"')
expect(await res.text()).toBe('Is this cached?')
})
test('GET /fetch-url', async () => {
const res = await fetch('http://127.0.0.1:1234/fetch-url')
expect(res.status).toBe(200)
expect(await res.text()).toBe('https://example.com/ is 200')
})
test('GET /user-agent', async () => {
const res = await fetch('http://127.0.0.1:1234/user-agent', {
headers: {
'user-agent': 'Lagon',
},
})
expect(res.status).toBe(200)
expect(await res.text()).toBe('Your UserAgent is Lagon')
})
test('GET /api/posts', async () => {
const res = await fetch('http://127.0.0.1:1234/api/posts')
expect(res.status).toBe(200)
expect(await res.json()).toEqual([
{ id: 1, title: 'Good Morning' },
{ id: 2, title: 'Good Aternoon' },
{ id: 3, title: 'Good Evening' },
{ id: 4, title: 'Good Night' },
])
})
test('POST /api/posts', async () => {
const res = await fetch('http://127.0.0.1:1234/api/posts', {
method: 'POST',
})
expect(res.status).toBe(201)
expect(await res.json()).toEqual({ message: 'Created!' })
})
test('GET /api/default-route', async () => {
const res = await fetch('http://127.0.0.1:1234/api/default-route')
expect(res.status).toBe(404)
expect(await res.text()).toBe('API endpoint is not found')
})
describe('/form', () => {
test('POST /form x-www-form-urlencoded', async () => {
const res = await fetch('http://127.0.0.1:1234/form', {
method: 'POST',
headers: {
'content-type': 'application/x-www-form-urlencoded',
},
body: 'username=john&password=Pa%24%24w0rd',
})
expect(res.status).toBe(200)
expect(await res.json()).toEqual({
password: 'Pa$$w0rd',
username: 'john',
})
})
test('POST /form', async () => {
const res = await fetch('http://127.0.0.1:1234/form', {
method: 'POST',
headers: {
'content-type':
'multipart/form-data; boundary=---------------------------9051914041544843365972754266',
},
body: `-----------------------------9051914041544843365972754266
Content-Disposition: form-data; name="hello"
world!
-----------------------------9051914041544843365972754266
Content-Disposition: form-data; name="description"
this is another field
-----------------------------9051914041544843365972754266--`,
})
expect(res.status).toBe(200)
expect(await res.json()).toEqual({
description: 'this is another field',
hello: 'world!',
})
})
})
test('GET /error', async () => {
const res = await fetch('http://127.0.0.1:1234/error')
expect(res.status).toBe(500)
expect(await res.text()).toBe('Custom Error Message')
})
test('GET /api/default-route', async () => {
const res = await fetch('http://127.0.0.1:1234/api/default-route')
expect(res.status).toBe(404)
expect(await res.text()).toBe('API endpoint is not found')
})
})