Skip to content

Commit e043e9d

Browse files
committed
test: add tests for refresh hooks
1 parent 443beca commit e043e9d

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@
100100
"testMatch": [
101101
"**/test/**/*.spec.js",
102102
"**/test/**/*.spec.ts",
103+
"**/*.test.ts",
103104
"!**/test/e2e/**",
104105
"!**/test/fixtures/**",
105106
"!**/test/sample/**",
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import { mockRequest } from 'next/dist/server/lib/mock-request'
2+
3+
import { netlifyApiFetch, getNextServer, NextServerType } from './handlerUtils'
4+
import NetlifyNextServer from './server'
5+
6+
const NextServer: NextServerType = getNextServer()
7+
8+
jest.mock('./handlerUtils', () => {
9+
const originalModule = jest.requireActual('./handlerUtils')
10+
11+
return {
12+
__esModule: true,
13+
...originalModule,
14+
netlifyApiFetch: jest.fn(({ payload }) => {
15+
switch (payload.paths[0]) {
16+
case '/getStaticProps/with-revalidate/':
17+
return Promise.resolve({ code: 200, message: 'Revalidated' })
18+
case '/not-a-path/':
19+
return Promise.resolve({ code: 404, message: '404' })
20+
default:
21+
return Promise.reject(new Error('Error'))
22+
}
23+
}),
24+
}
25+
})
26+
27+
jest.spyOn(NextServer.prototype, 'getRequestHandler').mockImplementation(() => () => Promise.resolve())
28+
29+
Object.setPrototypeOf(NetlifyNextServer, jest.fn())
30+
31+
const nextServer = new NetlifyNextServer({ conf: {}, dev: false })
32+
const requestHandler = nextServer.getRequestHandler()
33+
34+
describe('the netlify next server', () => {
35+
it('intercepts a request containing an x-prerender-revalidate header', async () => {
36+
const { req: mockReq, res: mockRes } = mockRequest(
37+
'/getStaticProps/with-revalidate/',
38+
{ 'x-prerender-revalidate': 'test' },
39+
'GET',
40+
)
41+
await requestHandler(mockReq, mockRes)
42+
expect(netlifyApiFetch).toHaveBeenCalled()
43+
})
44+
45+
it('silently revalidates and returns the original handler response', async () => {
46+
const { req: mockReq, res: mockRes } = mockRequest(
47+
'/getStaticProps/with-revalidate/',
48+
{ 'x-prerender-revalidate': 'test' },
49+
'GET',
50+
)
51+
await expect(requestHandler(mockReq, mockRes)).resolves.toBe(undefined)
52+
})
53+
54+
it('throws an error when the revalidate API returns a 404 response', async () => {
55+
const { req: mockReq, res: mockRes } = mockRequest('/not-a-path/', { 'x-prerender-revalidate': 'test' }, 'GET')
56+
await expect(requestHandler(mockReq, mockRes)).rejects.toThrow('Unsuccessful revalidate - 404')
57+
})
58+
59+
it('throws an error when the revalidate API is unreachable', async () => {
60+
const { req: mockReq, res: mockRes } = mockRequest('', { 'x-prerender-revalidate': 'test' }, 'GET')
61+
await expect(requestHandler(mockReq, mockRes)).rejects.toThrow('Unsuccessful revalidate - Error')
62+
})
63+
})

0 commit comments

Comments
 (0)