feat: 레거시 재이관과 계정 복구 기반을 추가
중앙 이전 기록 스키마와 버전 정규화기를 도입하고, 재실행 시 현행 계정 상태를 보존한다. 카카오 인증 뒤 이관 비밀번호를 1회 설정하는 흐름과 비카카오 계정용 안전한 CLI 복구 경로를 추가한다.
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
import type { PoolClient } from 'pg';
|
||||
import { describe, expect, it, vi } from 'vitest';
|
||||
|
||||
import { quoteQualifiedIdentifier, upsertRows } from '../src/db.js';
|
||||
|
||||
describe('qualified archive identifiers', () => {
|
||||
it('quotes a schema-qualified table and still parameterizes values', async () => {
|
||||
const query = vi.fn().mockResolvedValue({});
|
||||
await upsertRows(
|
||||
{ query } as unknown as PoolClient,
|
||||
'legacy_archive.general',
|
||||
[{ id: 1, data: { ok: true } }],
|
||||
['id']
|
||||
);
|
||||
expect(query).toHaveBeenCalledOnce();
|
||||
expect(query.mock.calls[0]?.[0]).toContain('INSERT INTO "legacy_archive"."general"');
|
||||
expect(query.mock.calls[0]?.[1]).toEqual([1, JSON.stringify({ ok: true })]);
|
||||
});
|
||||
|
||||
it.each(['legacy_archive.general.extra', 'legacy-archive.general', 'legacy_archive.General', 'public.;drop'])(
|
||||
'rejects unsafe qualified identifier %s',
|
||||
(value) => expect(() => quoteQualifiedIdentifier(value)).toThrow('Unsafe SQL identifier')
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user