cangku/backend/test/yydNotificationCenterSettings.test.js

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',
});
});