mirror of
https://github.com/Kaelio/ktx.git
synced 2026-07-19 11:41:02 +02:00
57 lines
2.2 KiB
TypeScript
57 lines
2.2 KiB
TypeScript
import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises';
|
|
import { tmpdir } from 'node:os';
|
|
import { join } from 'node:path';
|
|
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
import type { SourceAdapter } from '../../../../../src/context/ingest/types.js';
|
|
import { DbtSourceAdapter } from '../../../../../src/context/ingest/adapters/dbt/dbt.adapter.js';
|
|
|
|
describe('DbtSourceAdapter', () => {
|
|
let stagedDir: string;
|
|
let adapter: SourceAdapter;
|
|
|
|
beforeEach(async () => {
|
|
stagedDir = await mkdtemp(join(tmpdir(), 'dbt-adapter-'));
|
|
adapter = new DbtSourceAdapter();
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await rm(stagedDir, { recursive: true, force: true });
|
|
});
|
|
|
|
it('declares the expected source key and skill list', () => {
|
|
expect(adapter.source).toBe('dbt');
|
|
expect(adapter.skillNames).toEqual(['dbt_ingest']);
|
|
});
|
|
|
|
it('detects a staged dbt project root (dbt_project.yml)', async () => {
|
|
await writeFile(join(stagedDir, 'dbt_project.yml'), "name: 'jaffle'\nversion: '1.0.0'\n", 'utf-8');
|
|
expect(await adapter.detect(stagedDir)).toBe(true);
|
|
});
|
|
|
|
it('chunk: dbt_project.yml + models/a.yml yields one WU (≤25 files)', async () => {
|
|
await writeFile(join(stagedDir, 'dbt_project.yml'), "name: 'jaffle'\n", 'utf-8');
|
|
await mkdir(join(stagedDir, 'models'), { recursive: true });
|
|
await writeFile(
|
|
join(stagedDir, 'models/a.yml'),
|
|
'version: 2\nmodels:\n - name: orders\n description: Orders\n',
|
|
'utf-8',
|
|
);
|
|
const result = await adapter.chunk(stagedDir);
|
|
expect(result.workUnits).toHaveLength(1);
|
|
expect(result.workUnits[0].unitKey).toBe('dbt-all');
|
|
expect(result.parseArtifacts).toMatchObject({
|
|
projectName: 'jaffle',
|
|
tables: [{ name: 'orders', description: 'Orders' }],
|
|
});
|
|
});
|
|
|
|
it('implements fetch() for git-backed dbt source setup', () => {
|
|
expect(adapter.fetch).toBeTypeOf('function');
|
|
});
|
|
|
|
it('reports mapped warehouse targets for bundle SL discovery', async () => {
|
|
adapter = new DbtSourceAdapter({ targetConnectionIds: ['postgres-warehouse', 'postgres-warehouse'] });
|
|
|
|
await expect(adapter.listTargetConnectionIds?.(stagedDir)).resolves.toEqual(['postgres-warehouse']);
|
|
});
|
|
});
|