48 lines
1.5 KiB
TypeScript
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',
|
|
)
|
|
})
|
|
})
|