53 lines
1.8 KiB
JavaScript
53 lines
1.8 KiB
JavaScript
'use strict';
|
|
|
|
const assert = require('node:assert/strict');
|
|
const test = require('node:test');
|
|
|
|
const {
|
|
getEnvironmentConfig,
|
|
stripSecretFields,
|
|
toAdminConfig,
|
|
} = require('../src/services/yydNotificationCenterSettings');
|
|
|
|
test('notification settings accept project variables returned by the notification center', () => {
|
|
const keys = [
|
|
'YYD_NOTIFICATION_PROJECT_CODE',
|
|
'YYD_NOTIFICATION_PROJECT_SECRET',
|
|
'YYD_NOTIFICATION_CENTER_PROJECT_CODE',
|
|
'YYD_NOTIFICATION_CENTER_PROJECT_SECRET',
|
|
];
|
|
const previous = Object.fromEntries(keys.map((key) => [key, process.env[key]]));
|
|
try {
|
|
delete process.env.YYD_NOTIFICATION_PROJECT_CODE;
|
|
delete process.env.YYD_NOTIFICATION_PROJECT_SECRET;
|
|
process.env.YYD_NOTIFICATION_CENTER_PROJECT_CODE = 'project_alias';
|
|
process.env.YYD_NOTIFICATION_CENTER_PROJECT_SECRET = 'alias-secret-value';
|
|
const config = getEnvironmentConfig();
|
|
assert.equal(config.projectCode, 'project_alias');
|
|
assert.equal(config.projectSecret, 'alias-secret-value');
|
|
} finally {
|
|
for (const key of keys) {
|
|
if (previous[key] === undefined) delete process.env[key];
|
|
else process.env[key] = previous[key];
|
|
}
|
|
}
|
|
});
|
|
|
|
test('notification admin config masks its secret and never returns the plaintext value', () => {
|
|
const admin = toAdminConfig({
|
|
baseUrl: 'https://notify.example.com',
|
|
projectCode: 'project_demo',
|
|
projectSecret: 'top-secret-not-for-browser',
|
|
recipientAlias: '苏适',
|
|
timeoutMs: 15000,
|
|
source: 'database',
|
|
});
|
|
assert.equal(admin.configured, true);
|
|
assert.equal(admin.projectSecretConfigured, true);
|
|
assert.equal(admin.projectSecretPreview, 'top-**********wser');
|
|
assert.equal(Object.hasOwn(admin, 'projectSecret'), false);
|
|
assert.deepEqual(stripSecretFields({ projectSecret: 'plain', projectCode: 'demo' }), {
|
|
projectCode: 'demo',
|
|
});
|
|
});
|