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 (все компании)');
|
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
|
// Cleanup
|
||||||
// ─────────────────────────────────────────────────────────────────────────────
|
// ─────────────────────────────────────────────────────────────────────────────
|
||||||
|
|||||||
Reference in New Issue
Block a user