gongxiangp2/lib/__tests__/public-app-url.test.ts

48 lines
1.5 KiB
TypeScript

/** @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',
)
})
})