Skip to content

Commit 674f0f7

Browse files
committed
test: add test for preview mode when using middleware
1 parent 0c60cec commit 674f0f7

File tree

4 files changed

+71
-0
lines changed

4 files changed

+71
-0
lines changed

cypress/e2e/middleware/preview.cy.ts

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
describe('Preview Mode', () => {
2+
it('enters and exits preview mode', () => {
3+
Cypress.Cookies.debug(true)
4+
cy.getCookies().then((cookie) => cy.log('cookies', cookie))
5+
6+
cy.intercept('/previewTest', (req) => {
7+
req.continue((res) => {
8+
expect(res.headers?.['x-middleware-executed']).to.equal('true')
9+
})
10+
}).as('previewTestVisit')
11+
12+
// preview mode is off by default
13+
cy.visit('/previewTest')
14+
cy.findByText('Is preview? No', { selector: 'h1' })
15+
16+
// enter preview mode
17+
cy.request('/api/enterPreview').then((response) => {
18+
expect(response.body).to.have.property('name', 'preview mode')
19+
})
20+
21+
// exptected content is rendered
22+
cy.visit('/previewTest')
23+
cy.findByText('Is preview? Yes!', { selector: 'h1' })
24+
25+
// exit preview mode
26+
cy.request('/api/exitPreview')
27+
cy.visit('/previewTest')
28+
cy.findByText('Is preview? No', { selector: 'h1' })
29+
30+
// we should hit /previewTest 3 times (before entering preview, after entering preview, after exiting preview)
31+
// this assertion is mainly to ensure interception works and assertion on response header is made
32+
cy.get('@previewTestVisit.all').should('have.length', 3)
33+
})
34+
})

demos/middleware/middleware.ts

+9
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,14 @@ export async function middleware(req: NextRequest) {
109109
return response
110110
}
111111

112+
if (pathname.startsWith('/previewTest')) {
113+
console.log('Preview test middleware')
114+
response = NextResponse.next()
115+
116+
response.headers.set('x-middleware-executed', 'true')
117+
return response
118+
}
119+
112120
if (pathname.includes('locale-preserving-rewrite')) {
113121
return NextResponse.rewrite(new URL('/locale-test', req.url))
114122
}
@@ -189,5 +197,6 @@ export const config = {
189197
}
190198
],
191199
},
200+
'/previewTest',
192201
],
193202
}

demos/middleware/pages/index.js

+3
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ export default function Home() {
4848
<p>
4949
<Link href="/headers">Adds `x-hello` request header to a rewrite</Link>
5050
</p>
51+
<p>
52+
<Link href="/previewTest">Preview mode</Link>
53+
</p>
5154
</main>
5255
</div>
5356
)

demos/middleware/pages/previewTest.js

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import Link from 'next/link'
2+
3+
const StaticTest = ({ isPreview }) => {
4+
return (
5+
<div>
6+
<h1>Is preview? {isPreview ? 'Yes!' : 'No'}</h1>
7+
<p>
8+
<a href={isPreview ? '/api/exitPreview' : '/api/enterPreview'}>
9+
{isPreview ? 'Exit Preview' : 'Enter Preview'}
10+
</a>
11+
</p>
12+
<Link href="/">Go back home</Link>
13+
</div>
14+
)
15+
}
16+
17+
export const getStaticProps = async ({ preview }) => {
18+
return {
19+
props: {
20+
isPreview: Boolean(preview),
21+
},
22+
}
23+
}
24+
25+
export default StaticTest

0 commit comments

Comments
 (0)