|
| 1 | +/* eslint-disable max-nested-callbacks */ |
1 | 2 | import { mockRequest } from 'next/dist/server/lib/mock-request'
|
2 | 3 |
|
3 |
| -import { netlifyApiFetch, getNextServer, NextServerType } from './handlerUtils' |
| 4 | +import { getNextServer, NextServerType, netlifyApiFetch } from './handlerUtils' |
4 | 5 | import { NetlifyNextServer } from './server'
|
5 | 6 |
|
6 |
| -const NextServer: NextServerType = getNextServer() |
7 |
| - |
8 | 7 | jest.mock('./handlerUtils', () => {
|
9 | 8 | const originalModule = jest.requireActual('./handlerUtils')
|
10 | 9 |
|
11 | 10 | return {
|
12 | 11 | __esModule: true,
|
13 | 12 | ...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 |
| - }), |
| 13 | + netlifyApiFetch: jest.fn().mockResolvedValue({ ok: true }), |
24 | 14 | }
|
25 | 15 | })
|
| 16 | +const mockedApiFetch = netlifyApiFetch as jest.MockedFunction<typeof netlifyApiFetch> |
26 | 17 |
|
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() |
| 18 | +beforeAll(() => { |
| 19 | + const NextServer: NextServerType = getNextServer() |
| 20 | + jest.spyOn(NextServer.prototype, 'getRequestHandler').mockImplementation(() => () => Promise.resolve()) |
| 21 | + Object.setPrototypeOf(NetlifyNextServer, jest.fn()) |
| 22 | +}) |
33 | 23 |
|
34 | 24 | 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 |
| - }) |
| 25 | + it('revalidates a request containing an `x-prerender-revalidate` header', async () => { |
| 26 | + const netlifyNextServer = new NetlifyNextServer({ conf: {} }, {}) |
| 27 | + const requestHandler = netlifyNextServer.getRequestHandler() |
44 | 28 |
|
45 |
| - it('silently revalidates and returns the original handler response', async () => { |
46 | 29 | const { req: mockReq, res: mockRes } = mockRequest(
|
47 | 30 | '/getStaticProps/with-revalidate/',
|
48 | 31 | { 'x-prerender-revalidate': 'test' },
|
49 | 32 | 'GET',
|
50 | 33 | )
|
51 |
| - await expect(requestHandler(mockReq, mockRes)).resolves.toBe(undefined) |
| 34 | + const response = await requestHandler(mockReq, mockRes) |
| 35 | + |
| 36 | + expect(mockedApiFetch).toHaveBeenCalled() |
| 37 | + expect(response).toBe(undefined) |
52 | 38 | })
|
53 | 39 |
|
54 |
| - it('throws an error when the revalidate API returns a 404 response', async () => { |
| 40 | + it('throws an error when invalid paths are revalidated', async () => { |
| 41 | + const netlifyNextServer = new NetlifyNextServer({ conf: {} }, {}) |
| 42 | + const requestHandler = netlifyNextServer.getRequestHandler() |
| 43 | + |
55 | 44 | 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') |
| 45 | + |
| 46 | + mockedApiFetch.mockResolvedValueOnce({ code: 404, message: 'Invalid paths' }) |
| 47 | + await expect(requestHandler(mockReq, mockRes)).rejects.toThrow('Invalid paths') |
57 | 48 | })
|
58 | 49 |
|
59 | 50 | it('throws an error when the revalidate API is unreachable', async () => {
|
| 51 | + const netlifyNextServer = new NetlifyNextServer({ conf: {} }, {}) |
| 52 | + const requestHandler = netlifyNextServer.getRequestHandler() |
| 53 | + |
60 | 54 | const { req: mockReq, res: mockRes } = mockRequest('', { 'x-prerender-revalidate': 'test' }, 'GET')
|
61 |
| - await expect(requestHandler(mockReq, mockRes)).rejects.toThrow('Unsuccessful revalidate - Error') |
| 55 | + |
| 56 | + mockedApiFetch.mockRejectedValueOnce(new Error('Unable to connect')) |
| 57 | + await expect(requestHandler(mockReq, mockRes)).rejects.toThrow('Unable to connect') |
62 | 58 | })
|
63 | 59 | })
|
| 60 | +/* eslint-enable max-nested-callbacks */ |
0 commit comments