import { describe, it, expect } from 'vitest';
import { TestConductor } from '@ensemble-edge/conductor/testing';
describe('transform member', () => {
it('should transform data', async () => {
const conductor = await TestConductor.create();
const result = await conductor.executeMember('transform', {
data: {
users: [
{ id: 1, firstName: 'Alice', lastName: 'Smith' },
{ id: 2, firstName: 'Bob', lastName: 'Jones' }
]
},
expression: 'users[].{ "fullName": firstName & " " & lastName }'
});
expect(result).toBeSuccessful();
expect(result.output).toEqual([
{ fullName: 'Alice Smith' },
{ fullName: 'Bob Jones' }
]);
});
it('should filter and sort', async () => {
const conductor = await TestConductor.create();
const result = await conductor.executeMember('transform', {
data: {
users: [
{ name: 'Charlie', age: 25 },
{ name: 'Alice', age: 30 },
{ name: 'Bob', age: 20 }
]
},
expression: '$sort(users[age >= 25], function($a, $b) { $a.name < $b.name })'
});
expect(result.output).toEqual([
{ name: 'Alice', age: 30 },
{ name: 'Charlie', age: 25 }
]);
});
it('should aggregate data', async () => {
const conductor = await TestConductor.create();
const result = await conductor.executeMember('transform', {
data: {
orders: [
{ id: 1, total: 100 },
{ id: 2, total: 200 },
{ id: 3, total: 150 }
]
},
expression: '{ "sum": $sum(orders.total), "avg": $average(orders.total) }'
});
expect(result.output).toEqual({
sum: 450,
avg: 150
});
});
});