Files
next.js/test/unit/incremental-cache/file-system-cache.test.ts
Arian Tron 61f56f997c
Some checks failed
Test examples / Test Examples (20) (push) Has been cancelled
Test examples / Test Examples (22) (push) Has been cancelled
Lock Threads / action (push) Has been cancelled
Trigger Release / start (push) Has been cancelled
Stale issue handler / stale (push) Has been cancelled
Update Font Data / create-pull-request (push) Has been cancelled
build-and-deploy / deploy-target (push) Has been cancelled
build-and-deploy / build (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / build-wasm (nodejs) (push) Has been cancelled
build-and-deploy / build-wasm (web) (push) Has been cancelled
build-and-deploy / Deploy preview tarball (push) Has been cancelled
build-and-deploy / Potentially publish release (push) Has been cancelled
build-and-deploy / publish-turbopack-npm-packages (push) Has been cancelled
build-and-deploy / Deploy examples (push) Has been cancelled
build-and-deploy / thank you, build (push) Has been cancelled
build-and-deploy / Upload Turbopack Bytesize metrics to Datadog (push) Has been cancelled
Rspack Next.js development integration tests / Rspack integration tests (push) Has been cancelled
Rspack Next.js production integration tests / Rspack integration tests (push) Has been cancelled
Turbopack Next.js development integration tests / Next.js integration tests (push) Has been cancelled
Turbopack Next.js production integration tests / Next.js integration tests (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack development test manifest (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack production test manifest (push) Has been cancelled
Upload bundler test manifests to areweturboyet.com / Upload test results (push) Has been cancelled
Update React / create-pull-request (push) Has been cancelled
test-e2e-project-reset-cron / reset-test-project (push) Has been cancelled
Notify about the top 15 issues/PRs/feature requests (most reacted) in the last 90 days / run (push) Has been cancelled
first commit
2026-03-10 19:37:31 +03:30

130 lines
3.0 KiB
TypeScript

import { promises as fs } from 'node:fs'
import { fileURLToPath } from 'node:url'
import FileSystemCache from 'next/dist/server/lib/incremental-cache/file-system-cache'
import { nodeFs } from 'next/dist/server/lib/node-fs-methods'
import {
CachedRouteKind,
IncrementalCacheKind,
} from 'next/dist/server/response-cache'
const cacheDir = fileURLToPath(new URL('./cache', import.meta.url))
describe('FileSystemCache', () => {
it('set image route', async () => {
const fsCache = new FileSystemCache({
_requestHeaders: {},
flushToDisk: true,
fs: nodeFs,
serverDistDir: cacheDir,
revalidatedTags: [],
})
const binary = await fs.readFile(
fileURLToPath(new URL('./images/icon.png', import.meta.url))
)
await fsCache.set(
'icon.png',
{
body: binary,
headers: {
'Content-Type': 'image/png',
},
status: 200,
kind: CachedRouteKind.APP_ROUTE,
},
{}
)
expect(
(
await fsCache.get('icon.png', {
kind: IncrementalCacheKind.APP_ROUTE,
isFallback: undefined,
})
)?.value
).toEqual({
body: binary,
headers: {
'Content-Type': 'image/png',
},
status: 200,
kind: IncrementalCacheKind.APP_ROUTE,
})
})
})
describe('FileSystemCache (isrMemory 0)', () => {
const fsCache = new FileSystemCache({
_requestHeaders: {},
flushToDisk: true,
fs: nodeFs,
serverDistDir: cacheDir,
revalidatedTags: [],
maxMemoryCacheSize: 0, // disable memory cache
})
it('should cache fetch', async () => {
await fsCache.set(
'fetch-cache',
{
kind: CachedRouteKind.FETCH,
data: {
headers: {},
body: 'MTcwMDA1NjM4MQ==',
status: 200,
url: 'http://my-api.local',
},
revalidate: 30,
},
{
fetchCache: true,
fetchUrl: 'http://my-api.local',
fetchIdx: 5,
tags: ['server-time'],
}
)
const res = await fsCache.get('fetch-cache', {
tags: ['server-time'],
kind: IncrementalCacheKind.FETCH,
})
expect(res?.value).toEqual({
kind: 'FETCH',
data: {
headers: {},
body: 'MTcwMDA1NjM4MQ==',
status: 200,
url: 'http://my-api.local',
},
revalidate: 30,
tags: ['server-time'],
})
})
it('should cache unstable_cache', async () => {
await fsCache.set(
'unstable-cache',
{
kind: CachedRouteKind.FETCH,
data: { headers: {}, body: '1700056381', status: 200, url: '' },
revalidate: 30,
},
{ fetchCache: true, tags: ['server-time2'] }
)
const res = await fsCache.get('unstable-cache', {
tags: ['server-time'],
kind: IncrementalCacheKind.FETCH,
})
expect(res?.value).toEqual({
kind: 'FETCH',
data: { headers: {}, body: '1700056381', status: 200, url: '' },
revalidate: 30,
tags: ['server-time2'],
})
})
})