mirror of
https://github.com/Kaelio/ktx.git
synced 2026-06-16 08:25:14 +02:00
38 lines
1.6 KiB
TypeScript
38 lines
1.6 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import {
|
|
assertSemanticLayerTargetPathsAllowed,
|
|
findDisallowedSemanticLayerTargetPaths,
|
|
semanticLayerConnectionIdFromPath,
|
|
} from '../../../src/context/ingest/semantic-layer-target-policy.js';
|
|
|
|
describe('semantic-layer target policy', () => {
|
|
it('extracts connection ids from semantic-layer paths', () => {
|
|
expect(semanticLayerConnectionIdFromPath('semantic-layer/warehouse/orders.yaml')).toBe('warehouse');
|
|
expect(semanticLayerConnectionIdFromPath('a/semantic-layer/finance/orders.yaml')).toBe('finance');
|
|
expect(semanticLayerConnectionIdFromPath('wiki/global/orders.md')).toBeNull();
|
|
});
|
|
|
|
it('finds semantic-layer paths outside the allowed target connections', () => {
|
|
expect(
|
|
findDisallowedSemanticLayerTargetPaths({
|
|
paths: [
|
|
'semantic-layer/warehouse/orders.yaml',
|
|
'semantic-layer/finance/orders.yaml',
|
|
'wiki/global/orders.md',
|
|
],
|
|
allowedConnectionIds: new Set(['warehouse']),
|
|
}),
|
|
).toEqual([{ path: 'semantic-layer/finance/orders.yaml', connectionId: 'finance' }]);
|
|
});
|
|
|
|
it('throws a deterministic error for unauthorized semantic-layer targets', () => {
|
|
expect(() =>
|
|
assertSemanticLayerTargetPathsAllowed({
|
|
paths: ['semantic-layer/finance/orders.yaml', 'semantic-layer/marketing/accounts.yaml'],
|
|
allowedConnectionIds: new Set(['warehouse']),
|
|
}),
|
|
).toThrow(
|
|
/semantic-layer target connection not allowed: semantic-layer\/finance\/orders\.yaml \(finance\), semantic-layer\/marketing\/accounts\.yaml \(marketing\); allowed: warehouse/,
|
|
);
|
|
});
|
|
});
|