63 lines
1.9 KiB
TypeScript
63 lines
1.9 KiB
TypeScript
import assert from 'node:assert/strict'
|
|
import test from 'node:test'
|
|
import {
|
|
assertKeycloakConfiguration,
|
|
assertSupportedAuthMode,
|
|
resolveAuthMode,
|
|
resolveSessionSecret
|
|
} from '../authMode'
|
|
|
|
test('认证模式缺省时统一使用本地登录', () => {
|
|
assert.equal(resolveAuthMode(undefined), 'local')
|
|
assert.equal(resolveAuthMode(''), 'local')
|
|
assert.equal(resolveAuthMode('keycloak'), 'keycloak')
|
|
})
|
|
|
|
test('认证模式拒绝无法识别的部署值', () => {
|
|
assert.throws(() => assertSupportedAuthMode('oauth'), /仅支持 local 或 keycloak/)
|
|
})
|
|
|
|
test('生产环境拒绝缺失或默认 Session 密钥', () => {
|
|
assert.throws(() => resolveSessionSecret('', 'production'), /SESSION_SECRET/)
|
|
assert.throws(
|
|
() => resolveSessionSecret('change-me-session-secret', 'production'),
|
|
/SESSION_SECRET/
|
|
)
|
|
assert.equal(resolveSessionSecret('a-real-production-secret', 'production'), 'a-real-production-secret')
|
|
assert.equal(
|
|
resolveSessionSecret(undefined, 'development'),
|
|
'equipment-management-development-secret'
|
|
)
|
|
})
|
|
|
|
test('Keycloak 模式缺少前后端共同必需项时启动失败', () => {
|
|
assert.throws(
|
|
() => assertKeycloakConfiguration({ AUTH_MODE: 'keycloak' }),
|
|
/KEYCLOAK_URL, KEYCLOAK_REALM, KEYCLOAK_CLIENT_ID/
|
|
)
|
|
assert.throws(
|
|
() => assertKeycloakConfiguration({
|
|
AUTH_MODE: 'keycloak',
|
|
KEYCLOAK_URL: 'not-a-url',
|
|
KEYCLOAK_REALM: 'equipment',
|
|
KEYCLOAK_CLIENT_ID: 'equipment-client'
|
|
}),
|
|
/http\/https/
|
|
)
|
|
assert.deepEqual(
|
|
assertKeycloakConfiguration({
|
|
AUTH_MODE: 'keycloak',
|
|
KEYCLOAK_URL: 'https://sso.example.com/',
|
|
KEYCLOAK_REALM: 'equipment',
|
|
KEYCLOAK_CLIENT_ID: 'equipment-client'
|
|
}),
|
|
{
|
|
serverUrl: 'https://sso.example.com',
|
|
realm: 'equipment',
|
|
clientId: 'equipment-client',
|
|
clientSecret: undefined
|
|
}
|
|
)
|
|
assert.equal(assertKeycloakConfiguration({ AUTH_MODE: 'local' }), null)
|
|
})
|