import { resolve } from 'path'; import type { NextConfig } from 'next'; function findBaseDir() { const insideNodeModules = __dirname.includes('node_modules'); if (insideNodeModules) { return resolve(__dirname, '../../../../'); } else { return resolve(__dirname, '../../../apps/projectzeronext'); } } const baseDir = findBaseDir(); jest.mock('next-pwa', () => { return () => (config: NextConfig) => config; }); jest.mock('@sentry/nextjs', () => ({ withSentryConfig: (config: NextConfig) => config })); jest.mock('../with-pz-config.js', () => { return (config: NextConfig) => { const originalHeaders = config.headers; config.headers = async () => { const originalHeadersResult = (await originalHeaders?.()) ?? []; return [ { source: '/(.*)', headers: [ { key: 'Content-Security-Policy', value: 'https://*.akifast.com akifast.com' } ] }, ...originalHeadersResult ]; }; return config; }; }); interface Header { key: string; value: string; } interface HeaderGroup { source: string; headers: Header[]; } const nextConfigPath = resolve(baseDir, 'next.config.mjs'); let nextConfig: any; beforeAll(async () => { nextConfig = await import(nextConfigPath); }); describe('Next.js Configuration', () => { it('should contain Content-Security-Policy header with akifast domain values', async () => { const headers = nextConfig.default.headers; expect(headers).toBeDefined(); const headersResult = await headers(); const cspHeaders = headersResult .flatMap((headerGroup: HeaderGroup) => headerGroup.headers) .filter((header: Header) => header.key === 'Content-Security-Policy'); expect(cspHeaders.length).toBeGreaterThan(0); const lastCspHeader = cspHeaders[cspHeaders.length - 1]; expect(lastCspHeader.value).toContain('akifast.com'); expect(lastCspHeader.value).toContain('https://*.akifast.com'); }); });