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