@trieb.work/nextjs-turbo-redis-cache
Version:
Designed for speed, scalability, and optimized performance, nextjs-turbo-redis-cache is your custom cache handler for demanding production environments.
42 lines (33 loc) • 1.66 kB
text/typescript
import { test, expect } from 'vitest';
// Base URL of the running Next 16 app.
// Start it separately, e.g.:
// cd test/integration/next-app-16-0-3 && pnpm dev
// and ensure it listens on the same origin as below.
const BASE_URL =
(globalThis as any).NEXT_BROWSER_BASE_URL || 'http://localhost:3000';
// This test exercises a real Server Action that calls updateTag.
// It does not assert Redis state, but it verifies that calling the
// server action endpoint does not trigger the "Server Action only" error.
test('Server Action calling updateTag responds without server-action-only error', async () => {
// 1) Fetch the SSR HTML for the page containing the Server Action form
const res = await fetch(`${BASE_URL}/update-tag-test`);
expect(res.status).toBeLessThan(500);
const html = await res.text();
// 2) Parse the HTML to find the form action URL that Next generated
const parser = new DOMParser();
const doc = parser.parseFromString(html, 'text/html');
const form = doc.querySelector('form');
expect(form).not.toBeNull();
const actionAttr = form!.getAttribute('action');
expect(actionAttr).toBeTruthy();
const actionUrl = new URL(actionAttr!, BASE_URL).toString();
// 3) Call the Server Action endpoint directly.
// If updateTag were not allowed here, Next.js would respond with
// an error page that contains the specific error message.
const actionRes = await fetch(actionUrl, { method: 'POST' });
const actionText = await actionRes.text();
expect(actionRes.status).toBeLessThan(500);
expect(actionText).not.toContain(
'updateTag can only be called from within a Server Action',
);
});