import { describe, it, expect } from 'vitest';
import { TestConductor } from '@ensemble-edge/conductor/testing';
describe('fetch member', () => {
it('should fetch API data', async () => {
const conductor = await TestConductor.create({
mocks: {
http: {
responses: {
'https://api.example.com/users': {
status: 200,
data: { id: 1, name: 'Alice' }
}
}
}
}
});
const result = await conductor.executeMember('fetch-data', {
url: 'https://api.example.com/users'
});
expect(result).toBeSuccessful();
expect(result.output.status).toBe(200);
expect(result.output.data.name).toBe('Alice');
});
it('should retry on failure', async () => {
let attempts = 0;
const conductor = await TestConductor.create({
mocks: {
http: {
handler: async () => {
attempts++;
if (attempts < 3) {
throw new Error('Network error');
}
return { status: 200, data: { success: true } };
}
}
}
});
const result = await conductor.executeMember('fetch-with-retry', {
retries: 3
});
expect(result).toBeSuccessful();
expect(attempts).toBe(3);
});
it('should handle timeout', async () => {
const conductor = await TestConductor.create({
mocks: {
http: {
handler: async () => {
await new Promise(resolve => setTimeout(resolve, 10000));
return { status: 200, data: {} };
}
}
}
});
const result = await conductor.executeMember('fetch-data', {
timeout: 1000
});
expect(result).toHaveError(/timeout/i);
});
});