Skip to content

Commit

Permalink
indenpendent from node env
Browse files Browse the repository at this point in the history
  • Loading branch information
huozhi committed Jul 24, 2023
1 parent 2cd0c8a commit 24f3e51
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 94 deletions.
13 changes: 5 additions & 8 deletions packages/next/src/server/app-render/app-render.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -944,18 +944,15 @@ export async function renderToHTMLOrFlight(

// If it's a not found route, and we don't have any matched parallel
// routes, we try to render the not found component if it exists.
let isLeaf =
process.env.NODE_ENV === 'production'
? !segment && !rootLayoutIncluded
: !parallelRouteMap.length && segment === '__DEFAULT__' // hit parallel-route-default

let notFoundComponent = {}
if (
NotFound &&
// For action not-found we force render the NotFound and stop checking the parallel routes.
(asNotFound === 'force' ||
// For normal case where we should look up for not-found, keep checking the parallel routes.
(asNotFound && isLeaf))
// In production, /_not-found parallel routes is empty {}, only need to check if children routes are empty.
// In development, it could hit the parallel-route-default not found, so we only need to check the segment.
(asNotFound &&
(!parallelRouteMap.length || segment === '__DEFAULT__')))
) {
notFoundComponent = {
children: (
Expand Down Expand Up @@ -1777,7 +1774,7 @@ export async function renderToHTMLOrFlight(
})
} catch (finalErr: any) {
if (
process.env.NODE_ENV !== 'production' &&
process.env.NODE_ENV === 'development' &&
isNotFoundError(finalErr)
) {
const bailOnNotFound: typeof import('../../client/components/dev-root-not-found-boundary').bailOnNotFound =
Expand Down
Original file line number Diff line number Diff line change
@@ -1,104 +1,119 @@
import { createNextDescribe } from 'e2e-utils'

createNextDescribe(
'not-found-linking',
{
files: __dirname,
},
({ next }) => {
it('should allow navigation on not-found', async () => {
const browser = await next.browser('/trigger-404')
expect(await browser.elementByCss('#not-found-component').text()).toBe(
'Not Found!'
)

expect(
await browser
.elementByCss('#to-result')
.click()
.waitForElementByCss('#result-page')
.text()
).toBe('Result Page!')
})

it('should allow navigation on error', async () => {
const browser = await next.browser('/trigger-error')
expect(await browser.elementByCss('#error-component').text()).toBe(
'Error Happened!'
)

expect(
await browser
.elementByCss('#to-result')
.click()
.waitForElementByCss('#result-page')
.text()
).toBe('Result Page!')
})

it('should allow navigation to other routes on route that was initially not-found', async () => {
// Intentionally non-existent route.
const browser = await next.browser('/testabc')
expect(await browser.elementByCss('#not-found-component').text()).toBe(
'Not Found!'
)

expect(
await browser
.elementByCss('#to-result')
.click()
.waitForElementByCss('#result-page')
.text()
).toBe('Result Page!')
})

it('should allow navigation back to route that was initially not-found', async () => {
// Intentionally non-existent route.
const browser = await next.browser('/testabc')
expect(await browser.elementByCss('#not-found-component').text()).toBe(
'Not Found!'
)

function runTest({ next }) {
it('should allow navigation on not-found', async () => {
const browser = await next.browser('/trigger-404')
expect(await browser.elementByCss('#not-found-component').text()).toBe(
'Not Found!'
)

expect(
await browser
.elementByCss('#to-result')
.click()
.waitForElementByCss('#result-page')
.back()
.waitForElementByCss('#not-found-component')
})
.text()
).toBe('Result Page!')
})

it('should allow navigating to a page calling notfound', async () => {
const browser = await next.browser('/')
it('should allow navigation on error', async () => {
const browser = await next.browser('/trigger-error')
expect(await browser.elementByCss('#error-component').text()).toBe(
'Error Happened!'
)

expect(
await browser
.elementByCss('#to-result')
.click()
.waitForElementByCss('#result-page')
.text()
).toBe('Result Page!')
})

it('should allow navigation to other routes on route that was initially not-found', async () => {
// Intentionally non-existent route.
const browser = await next.browser('/testabc')
expect(await browser.elementByCss('#not-found-component').text()).toBe(
'Not Found!'
)

expect(
await browser
.elementByCss('#trigger-404-link')
.elementByCss('#to-result')
.click()
.waitForElementByCss('#not-found-component')
.waitForElementByCss('#result-page')
.text()
).toBe('Result Page!')
})

expect(await browser.elementByCss('#not-found-component').text()).toBe(
'Not Found!'
)
it('should allow navigation back to route that was initially not-found', async () => {
// Intentionally non-existent route.
const browser = await next.browser('/testabc')
expect(await browser.elementByCss('#not-found-component').text()).toBe(
'Not Found!'
)

await browser.back().waitForElementByCss('#homepage')
await browser
.elementByCss('#to-result')
.click()
.waitForElementByCss('#result-page')
.back()
.waitForElementByCss('#not-found-component')
})

expect(await browser.elementByCss('#homepage').text()).toBe('Home')
})
it('should allow navigating to a page calling notfound', async () => {
const browser = await next.browser('/')

it('should allow navigating to a non-existent page', async () => {
const browser = await next.browser('/')
await browser
.elementByCss('#trigger-404-link')
.click()
.waitForElementByCss('#not-found-component')

await browser
.elementByCss('#non-existent-link')
.click()
.waitForElementByCss('#not-found-component')
expect(await browser.elementByCss('#not-found-component').text()).toBe(
'Not Found!'
)

await browser.back().waitForElementByCss('#homepage')

expect(await browser.elementByCss('#homepage').text()).toBe('Home')
})

expect(await browser.elementByCss('#not-found-component').text()).toBe(
'Not Found!'
)
it('should allow navigating to a non-existent page', async () => {
const browser = await next.browser('/')

await browser.back().waitForElementByCss('#homepage')
await browser
.elementByCss('#non-existent-link')
.click()
.waitForElementByCss('#not-found-component')

expect(await browser.elementByCss('#homepage').text()).toBe('Home')
})
expect(await browser.elementByCss('#not-found-component').text()).toBe(
'Not Found!'
)

await browser.back().waitForElementByCss('#homepage')

expect(await browser.elementByCss('#homepage').text()).toBe('Home')
})
}

createNextDescribe(
'app dir - not found navigation',
{
files: __dirname,
},
({ next }) => {
runTest({ next })
}
)

createNextDescribe(
'app dir - not found navigation - with overridden node env',
{
files: __dirname,
env: { NODE_ENV: 'test' },
},
({ next }) => {
runTest({ next })
}
)
2 changes: 1 addition & 1 deletion test/lib/next-modes/next-dev.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export class NextDevInstance extends NextInstance {
env: {
...process.env,
...this.env,
NODE_ENV: '' as any,
NODE_ENV: this.env.NODE_ENV || ('' as any),
PORT: this.forcedPort || '0',
__NEXT_TEST_MODE: 'e2e',
__NEXT_TEST_WITH_DEVTOOL: '1',
Expand Down
2 changes: 1 addition & 1 deletion test/lib/next-modes/next-start.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ export class NextStartInstance extends NextInstance {
env: {
...process.env,
...this.env,
NODE_ENV: '' as any,
NODE_ENV: this.env.NODE_ENV || ('' as any),
PORT: this.forcedPort || '0',
__NEXT_TEST_MODE: 'e2e',
},
Expand Down

0 comments on commit 24f3e51

Please sign in to comment.