Skip to content

Commit

Permalink
Test cached form action with revalidate
Browse files Browse the repository at this point in the history
  • Loading branch information
sebmarkbage committed Oct 23, 2024
1 parent 465d1bb commit 06bdac3
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 1 deletion.
18 changes: 18 additions & 0 deletions test/e2e/app-dir/use-cache/app/form/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { revalidateTag, unstable_cacheTag as cacheTag } from 'next/cache'

async function refresh() {
'use server'
revalidateTag('home')
}

export default async function Page() {
'use cache'
cacheTag('home')

return (
<form action={refresh}>
<button id="refresh">Refresh</button>
<p id="t">{Date.now()}</p>
</form>
)
}
27 changes: 26 additions & 1 deletion test/e2e/app-dir/use-cache/use-cache.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { nextTestSetup } from 'e2e-utils'
import { retry } from 'next-test-utils'
import { retry, waitFor } from 'next-test-utils'

const GENERIC_RSC_ERROR =
'An error occurred in the Server Components render. The specific message is omitted in production builds to avoid leaking sensitive details. A digest property is included on this error instance which may provide additional details about the nature of the error.'
Expand Down Expand Up @@ -241,4 +241,29 @@ describe('use-cache', () => {
expect(await browser.elementByCss('p').text()).toBe('result')
})
})

it('should be able to revalidate a page using', async () => {
const browser = await next.browser(`/form`)
const time1 = await browser.waitForElementByCss('#t').text()

await browser.loadPage(new URL(`/form`, next.url).toString())

const time2 = await browser.waitForElementByCss('#t').text()

expect(time1).toBe(time2)

await browser.elementByCss('#refresh').click()

await waitFor(500)

const time3 = await browser.waitForElementByCss('#t').text()

expect(time3).not.toBe(time2)

// Reloading again should ideally be the same value but because the Action seeds
// the cache with real params as the argument it has a different cache key.
// await browser.loadPage(new URL(`/form?c`, next.url).toString())
// const time4 = await browser.waitForElementByCss('#t').text()
// expect(time4).toBe(time3);
})
})

0 comments on commit 06bdac3

Please sign in to comment.