/** @jest-environment node */ import { buildPublicMaterialShareUrl, getPublicAppOrigin } from '@/lib/public-app-url' const originalNextPublicAppUrl = process.env.NEXT_PUBLIC_APP_PUBLIC_URL const originalAppPublicUrl = process.env.APP_PUBLIC_URL const originalNextAuthUrl = process.env.NEXTAUTH_URL function restoreEnv(name: string, value: string | undefined) { if (value === undefined) { delete process.env[name] return } process.env[name] = value } describe('public app origin', () => { afterEach(() => { restoreEnv('NEXT_PUBLIC_APP_PUBLIC_URL', originalNextPublicAppUrl) restoreEnv('APP_PUBLIC_URL', originalAppPublicUrl) restoreEnv('NEXTAUTH_URL', originalNextAuthUrl) }) test('uses the configured public origin', () => { process.env.NEXT_PUBLIC_APP_PUBLIC_URL = 'https://sc.jiansun.vip/some-path' process.env.APP_PUBLIC_URL = 'http://192.168.58.20:4320' process.env.NEXTAUTH_URL = 'http://localhost:3000' expect(getPublicAppOrigin()).toBe('https://sc.jiansun.vip') }) test.each([ 'http://192.168.58.20:4320', 'http://10.0.0.8:3000', 'http://172.16.0.9:3000', 'http://localhost:3000', ])('never exposes a private origin: %s', (privateOrigin) => { process.env.NEXT_PUBLIC_APP_PUBLIC_URL = privateOrigin process.env.APP_PUBLIC_URL = privateOrigin process.env.NEXTAUTH_URL = privateOrigin expect(getPublicAppOrigin()).toBe('https://sc.jiansun.vip') expect(buildPublicMaterialShareUrl('material/id')).toBe( 'https://sc.jiansun.vip/share/material%2Fid', ) }) })