62 lines
2.0 KiB
JavaScript
62 lines
2.0 KiB
JavaScript
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
|
|
require('../src/common');
|
|
|
|
const { buildAuditChanges, recordRequestAuditEvent } = require('../src/data/audit-log');
|
|
|
|
function createPool(settings) {
|
|
const inserts = [];
|
|
return {
|
|
inserts,
|
|
async query(sql, params) {
|
|
if (String(sql).includes('SELECT id, setting_key, setting_value FROM o_app_settings')) {
|
|
return [[
|
|
{ setting_key: 'audit.enabled', setting_value: JSON.stringify(settings.enabled) },
|
|
{ setting_key: 'audit.categories', setting_value: JSON.stringify(settings.categories) },
|
|
{ setting_key: 'audit.include_request_metadata', setting_value: JSON.stringify(settings.includeMetadata) }
|
|
]];
|
|
}
|
|
if (String(sql).includes('INSERT INTO o_audit_events')) {
|
|
inserts.push(params);
|
|
}
|
|
return [[]];
|
|
}
|
|
};
|
|
}
|
|
|
|
const request = {
|
|
ip: '192.0.2.10',
|
|
headers: {
|
|
'user-agent': 'audit-test'
|
|
}
|
|
};
|
|
|
|
test('audit writer skips disabled categories', async () => {
|
|
const pool = createPool({ enabled: true, categories: ['security'], includeMetadata: true });
|
|
await recordRequestAuditEvent(pool, request, { category: 'authentication', eventType: 'login.success' });
|
|
assert.equal(pool.inserts.length, 0);
|
|
});
|
|
|
|
test('audit writer omits request metadata when disabled', async () => {
|
|
const pool = createPool({ enabled: true, categories: ['authentication'], includeMetadata: false });
|
|
await recordRequestAuditEvent(pool, request, { category: 'authentication', eventType: 'login.success' });
|
|
assert.equal(pool.inserts.length, 1);
|
|
assert.equal(pool.inserts[0][6], null);
|
|
assert.equal(pool.inserts[0][7], null);
|
|
});
|
|
|
|
test('audit changes include only fields with different from and to values', () => {
|
|
assert.deepEqual(buildAuditChanges({
|
|
name: 'Old name',
|
|
playlistId: 4,
|
|
roleIds: [1, 2]
|
|
}, {
|
|
name: 'New name',
|
|
playlistId: 4,
|
|
roleIds: [2, 3]
|
|
}), {
|
|
name: { from: 'Old name', to: 'New name' },
|
|
roleIds: { from: [1, 2], to: [2, 3] }
|
|
});
|
|
}); |