51 lines
1.8 KiB
TypeScript
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/
|
|
);
|
|
});
|
|
});
|