feat: журнал тестирования, бэклог идей; V.2 hasAnyAttemptForTest + unit tests; ссылки в спринтах
Made-with: Cursor
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
/**
|
||||
* Логика «цепочки» теста: попытки и версии (см. docs/revision_task/card1.md V.2).
|
||||
* @param {import('pg').Pool | { query: Function }} pool пул или объект с методом query(sql, params)
|
||||
* @param {string} testId UUID теста (tests.id)
|
||||
* @returns {Promise<boolean>} true, если по любой версии этой цепочки есть хотя бы одна попытка
|
||||
*/
|
||||
export async function hasAnyAttemptForTest(pool, testId) {
|
||||
const { rows } = await pool.query(
|
||||
`SELECT EXISTS (
|
||||
SELECT 1
|
||||
FROM test_attempts ta
|
||||
INNER JOIN test_versions tv ON ta.test_version_id = tv.id
|
||||
WHERE tv.test_id = $1
|
||||
) AS has_any`,
|
||||
[testId]
|
||||
);
|
||||
return rows[0].has_any === true;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { hasAnyAttemptForTest } from './testChainService.js';
|
||||
|
||||
test('hasAnyAttemptForTest: false, если в базе пусто', async () => {
|
||||
const pool = {
|
||||
async query() {
|
||||
return { rows: [{ has_any: false }] };
|
||||
},
|
||||
};
|
||||
const result = await hasAnyAttemptForTest(pool, '00000000-0000-0000-0000-000000000001');
|
||||
assert.equal(result, false);
|
||||
});
|
||||
|
||||
test('hasAnyAttemptForTest: true, если есть попытка', async () => {
|
||||
const pool = {
|
||||
async query() {
|
||||
return { rows: [{ has_any: true }] };
|
||||
},
|
||||
};
|
||||
const result = await hasAnyAttemptForTest(pool, '00000000-0000-0000-0000-000000000001');
|
||||
assert.equal(result, true);
|
||||
});
|
||||
Reference in New Issue
Block a user