test: limit + audit_log sections (38/38 pass)
This commit is contained in:
@@ -433,6 +433,89 @@ async function cleanup() {
|
||||
log(res.status === 200, 'admin: GET /export → 200 (все компании)');
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// 14. Лимит — добавить сверх лимита → ошибка
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
console.log('\n── 14. Лимит ──');
|
||||
|
||||
{
|
||||
// client_id пользователя 'test' — WZ01325 (из MOCK_USERS)
|
||||
const { MOCK_USERS } = require('../src/config');
|
||||
const testUser = MOCK_USERS.find(u => u.id === 'test');
|
||||
const userClientId = testUser?.clientId;
|
||||
|
||||
const uRes = await pool.query(
|
||||
`SELECT id FROM companies WHERE client_id = $1 LIMIT 1`,
|
||||
[userClientId]
|
||||
);
|
||||
const userCompanyId = uRes.rows[0]?.id;
|
||||
|
||||
if (userCompanyId) {
|
||||
// Считаем активные записи компании
|
||||
const cntRes = await pool.query(
|
||||
`SELECT COUNT(*)::int AS c FROM whitelist_entries WHERE company_id = $1 AND deleted_at IS NULL`,
|
||||
[userCompanyId]
|
||||
);
|
||||
const currentCount = cntRes.rows[0].c;
|
||||
|
||||
// Ставим лимит = текущее количество записей → следующее добавление упадёт
|
||||
const csrf = await getCsrfFromIndex(adminAgent);
|
||||
const limitRes = await adminAgent.post(`/admin/limit/${userCompanyId}`).type('form')
|
||||
.send({ limit: String(currentCount), _csrf: csrf });
|
||||
log(limitRes.status === 302, 'admin: выставил лимит=currentCount для user', `status=${limitRes.status} count=${currentCount}`);
|
||||
|
||||
// Добавляем запись — должна упасть с "Лимит исчерпан"
|
||||
const csrf3 = await getCsrfFromIndex(userAgent);
|
||||
const r2 = await userAgent.post('/add').type('form')
|
||||
.send({ value: '8.8.4.100', comment: 'лимит тест', _csrf: csrf3 });
|
||||
const err2 = getRedirectParam(r2, 'error');
|
||||
log(err2?.includes('Лимит'), 'user: лимит исчерпан → ошибка', `err=${err2}`);
|
||||
|
||||
// Возвращаем лимит обратно (пустая строка = дефолт)
|
||||
const csrf4 = await getCsrfFromIndex(adminAgent);
|
||||
await adminAgent.post(`/admin/limit/${userCompanyId}`).type('form')
|
||||
.send({ limit: '', _csrf: csrf4 });
|
||||
|
||||
// Чистим тестовые записи лимит-теста
|
||||
await pool.query(
|
||||
`UPDATE whitelist_entries SET deleted_at = NOW(), deleted_by = 'test-cleanup'
|
||||
WHERE value_cidr IN ('8.8.8.8/32', '8.8.4.100/32') AND deleted_at IS NULL`
|
||||
);
|
||||
} else {
|
||||
log(false, 'admin: не нашли компанию user для теста лимита');
|
||||
log(false, 'user: лимит исчерпан → ошибка');
|
||||
}
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// 15. Audit log — операции пишутся в БД
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
console.log('\n── 15. Audit log ──');
|
||||
|
||||
{
|
||||
const { MOCK_USERS } = require('../src/config');
|
||||
const testUser = MOCK_USERS.find(u => u.id === 'test');
|
||||
const uRes = await pool.query(
|
||||
`SELECT id FROM companies WHERE client_id = $1 LIMIT 1`,
|
||||
[testUser?.clientId]
|
||||
);
|
||||
const userCompanyId = uRes.rows[0]?.id;
|
||||
if (userCompanyId) {
|
||||
const r = await pool.query(
|
||||
`SELECT action FROM audit_log WHERE company_id = $1 ORDER BY created_at DESC LIMIT 20`,
|
||||
[userCompanyId]
|
||||
);
|
||||
const actions = r.rows.map(row => row.action);
|
||||
log(actions.some(a => /add|create/i.test(a)),
|
||||
'audit: операция add записана в audit_log', `actions=${JSON.stringify(actions.slice(0,5))}`);
|
||||
log(actions.some(a => /delete/i.test(a)),
|
||||
'audit: операция delete записана в audit_log', `actions=${JSON.stringify(actions.slice(0,5))}`);
|
||||
} else {
|
||||
log(false, 'audit: не нашли компанию user');
|
||||
log(false, 'audit: не нашли компанию user (delete)');
|
||||
}
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// Cleanup
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user