mirror of
https://github.com/Kaelio/ktx.git
synced 2026-06-16 08:25:14 +02:00
70 lines
2.1 KiB
TypeScript
70 lines
2.1 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { constraintDiscoveryWarning, tryConstraintQuery } from '../../../src/context/scan/constraint-discovery.js';
|
|
|
|
describe('tryConstraintQuery', () => {
|
|
it('returns the query value when the query succeeds', async () => {
|
|
await expect(
|
|
tryConstraintQuery(
|
|
{
|
|
schema: 'public',
|
|
kind: 'primary_key',
|
|
isDeniedError: () => false,
|
|
},
|
|
async () => ['id'],
|
|
),
|
|
).resolves.toEqual({ ok: true, value: ['id'] });
|
|
});
|
|
|
|
it('returns a recoverable warning when the classifier recognizes denial', async () => {
|
|
const error = Object.assign(new Error('permission denied'), { code: '42501' });
|
|
|
|
await expect(
|
|
tryConstraintQuery(
|
|
{
|
|
schema: 'analytics',
|
|
kind: 'foreign_key',
|
|
isDeniedError: (candidate) => candidate === error,
|
|
},
|
|
async () => {
|
|
throw error;
|
|
},
|
|
),
|
|
).resolves.toEqual({
|
|
ok: false,
|
|
warning: {
|
|
code: 'constraint_discovery_unauthorized',
|
|
message: 'Skipped foreign-key discovery in analytics (insufficient grants on system catalogs)',
|
|
recoverable: true,
|
|
metadata: { schema: 'analytics', kind: 'foreign_key' },
|
|
},
|
|
});
|
|
});
|
|
|
|
it('rethrows non-denial errors unchanged', async () => {
|
|
const error = Object.assign(new Error('connection reset'), { code: 'ECONNRESET' });
|
|
|
|
await expect(
|
|
tryConstraintQuery(
|
|
{
|
|
schema: 'public',
|
|
kind: 'primary_key',
|
|
isDeniedError: () => false,
|
|
},
|
|
async () => {
|
|
throw error;
|
|
},
|
|
),
|
|
).rejects.toBe(error);
|
|
});
|
|
});
|
|
|
|
describe('constraintDiscoveryWarning', () => {
|
|
it('formats stable primary-key warning text and metadata', () => {
|
|
expect(constraintDiscoveryWarning({ schema: 'public', kind: 'primary_key' })).toEqual({
|
|
code: 'constraint_discovery_unauthorized',
|
|
message: 'Skipped primary-key discovery in public (insufficient grants on system catalogs)',
|
|
recoverable: true,
|
|
metadata: { schema: 'public', kind: 'primary_key' },
|
|
});
|
|
});
|
|
});
|