test(accept): одноразовая БД *_rehome_test для rehome-tenant.test.ts

Почему: tests/integration/rehome-tenant.test.ts (codex/fix-tenant-rehome) выполняется только
при DATABASE_REHOME_TEST_URL на пустую БД с именем *_rehome_test под суперпользователем и
DATABASE_REHOME_TEST_CONFIRM (docs/TENANT-REHOME.md); без них файл пропускается целиком и
приёмка ничего не проверяет. В admin-режиме accept-branch создаёт пустую krona_acc_rehome_test
только для файлов, которые читают DATABASE_REHOME_TEST_URL.
Проверено: accept-branch --skip-check --skip-e2e codex/fix-tenant-rehome →
rehome-tenant.test.ts | OK | 1 passed (1) | 1 passed (1).
This commit is contained in:
grok 2026-09-26 16:59:10 +07:00
parent 986843d8d4
commit 18f944e3c3

View file

@ -23,6 +23,8 @@
// Интеграционная БД в этом режиме заведомо изолирована, поэтому для тестов с «предохранителем»
// (codex/fix-live-database: DATABASE_TEST_ISOLATED, DATABASE_TEST_GUARD_TOKEN, таблица
// krona_staff_test_guard, имя БД krona_staff_audit_*) он выставляется со случайным маркером.
// Для tests/integration/rehome-tenant.test.ts (codex/fix-tenant-rehome) — отдельная пустая БД
// krona_acc_rehome_test под суперпользователем и DATABASE_REHOME_TEST_CONFIRM (docs/TENANT-REHOME.md).
// Файл, где все тесты пропущены, — отдельный вердикт SKIP (ничего не проверил).
// Если заданы E2E_MIGRATOR_URL и E2E_APP_URL — роли не создаются и пароли не меняются,
// все прогоны идут последовательно в БД из этих URL со сбросом через откат всех миграций.
@ -318,6 +320,19 @@ async function createGuard(db) {
return marker;
}
/**
* Отдельная пустая одноразовая БД для tests/integration/rehome-tenant.test.ts (codex/fix-tenant-rehome,
* docs/TENANT-REHOME.md): имя на `_rehome_test`, суперпользователь, явное подтверждение.
*/
async function rehomeTestDatabase() {
const name = 'krona_acc_rehome_test';
const db = await freshDatabase(name);
return {
DATABASE_REHOME_TEST_URL: db.admin,
DATABASE_REHOME_TEST_CONFIRM: 'I_ACKNOWLEDGE_DISPOSABLE_PG17_DATABASE',
};
}
async function stepIntegration(target, wt) {
const dir = path.join(wt.dir, 'tests/integration');
const files = existsSync(dir)
@ -332,6 +347,12 @@ async function stepIntegration(target, wt) {
const db = await freshDatabase('krona_staff_audit_acc_it');
const m = await migrate(wt, db, path.join(logDir, `${slug}-migrate.txt`));
const guard = m.code === 0 && dbMode === 'admin' ? await createGuard(db) : null;
const rehomeEnv =
m.code === 0 &&
dbMode === 'admin' &&
readFileSync(path.join(dir, file), 'utf8').includes('DATABASE_REHOME_TEST_URL')
? await rehomeTestDatabase()
: {};
if (m.code !== 0) {
results.push({
file,
@ -352,6 +373,7 @@ async function stepIntegration(target, wt) {
DATABASE_TEST_MIGRATION_URL: db.migrator,
DATABASE_MIGRATION_URL: db.migrator,
...(guard ? { DATABASE_TEST_ISOLATED: 'true', DATABASE_TEST_GUARD_TOKEN: guard } : {}),
...rehomeEnv,
}),
logFile: path.join(logDir, `${slug}.txt`),
},