import { nextTestSetup } from 'e2e-utils'
import { check } from 'next-test-utils'
describe('parallel-routes-catchall', () => {
const { next } = nextTestSetup({
files: __dirname,
})
it('should match correctly when defining an explicit page & slot', async () => {
const browser = await next.browser('/')
await check(() => browser.elementById('slot').text(), /@slot default/)
await browser.elementByCss('[href="/foo"]').click()
// foo has defined a page route and a corresponding parallel slot
// so we'd expect to see the custom slot content & the page content
await check(() => browser.elementById('children').text(), /foo/)
await check(() => browser.elementById('slot').text(), /foo slot/)
})
it('should match correctly when defining an explicit page but no slot', async () => {
const browser = await next.browser('/')
await check(() => browser.elementById('slot').text(), /@slot default/)
await browser.elementByCss('[href="/bar"]').click()
// bar has defined a slot but no page route
// so we'd expect to see the catch-all slot & the page content
await check(() => browser.elementById('children').text(), /bar/)
await check(() => browser.elementById('slot').text(), /slot catchall/)
await check(
() => browser.elementById('slot').text(),
/catchall slot client component/
)
})
it('should match correctly when defining an explicit slot but no page', async () => {
const browser = await next.browser('/')
await check(() => browser.elementById('slot').text(), /@slot default/)
await browser.elementByCss('[href="/baz"]').click()
// baz has defined a page route and a corresponding parallel slot
// so we'd expect to see the custom slot content & the page content
await check(() => browser.elementById('children').text(), /main catchall/)
await check(() => browser.elementById('slot').text(), /baz slot/)
})
it('should match both the catch-all page & slot', async () => {
const browser = await next.browser('/')
await check(() => browser.elementById('slot').text(), /@slot default/)
await browser.elementByCss('[href="/quux"]').click()
// quux doesn't have a page or slot defined. It should use the catch-all for both
await check(() => browser.elementById('children').text(), /main catchall/)
await check(() => browser.elementById('slot').text(), /slot catchall/)
await check(
() => browser.elementById('slot').text(),
/catchall slot client component/
)
})
})