takt/src/__tests__/arpeggio-data-source-factory.test.ts
nrs 7e15691ba2
github-issue-200-arpeggio (#203)
* fix: stable release時にnext dist-tagを自動同期

* takt: github-issue-200-arpeggio
2026-02-10 13:37:15 +09:00

51 lines
1.8 KiB
TypeScript

/**
* Tests for the arpeggio data source factory.
*
* Covers:
* - Built-in 'csv' source type returns CsvDataSource
* - Custom module: valid default export returns a data source
* - Custom module: non-function default export throws
* - Custom module: missing default export throws
*/
import { describe, it, expect } from 'vitest';
import { createDataSource } from '../core/piece/arpeggio/data-source-factory.js';
import { CsvDataSource } from '../core/piece/arpeggio/csv-data-source.js';
describe('createDataSource', () => {
it('should return a CsvDataSource for built-in "csv" type', async () => {
const source = await createDataSource('csv', '/path/to/data.csv');
expect(source).toBeInstanceOf(CsvDataSource);
});
it('should return a valid data source from a custom module with correct default export', async () => {
const tempModulePath = new URL(
'data:text/javascript,export default function(path) { return { readBatches: async () => [] }; }'
).href;
const source = await createDataSource(tempModulePath, '/some/path');
expect(source).toBeDefined();
expect(typeof source.readBatches).toBe('function');
});
it('should throw when custom module does not export a default function', async () => {
const tempModulePath = new URL(
'data:text/javascript,export default "not-a-function"'
).href;
await expect(createDataSource(tempModulePath, '/some/path')).rejects.toThrow(
/must export a default factory function/
);
});
it('should throw when custom module has no default export', async () => {
const tempModulePath = new URL(
'data:text/javascript,export const foo = 42'
).href;
await expect(createDataSource(tempModulePath, '/some/path')).rejects.toThrow(
/must export a default factory function/
);
});
});