/**
 * delegate ライブコンソール Task 3 — SSE delegate イベント整形の純関数テスト。
 */
import { describe, expect, it } from 'vitest';
import { formatDelegateSseFrame } from './local-tasks-stream-api.js';

describe('formatDelegateSseFrame', () => {
  it('delegate_text を delegate_text_delta フレームに整形（delegateRunId 保持）', () => {
    const frame = formatDelegateSseFrame({ type: 'delegate_text', delegateRunId: 'r1', text: 'hello' });
    expect(frame).toEqual({ type: 'delegate_text_delta', delegateRunId: 'r1', text: 'hello' });
  });
  it('delegate_lifecycle はフィールドを保持して転送', () => {
    const frame = formatDelegateSseFrame({
      type: 'delegate_lifecycle', delegateRunId: 'r1', parentRunId: null, depth: 1,
      description: 'sub A', status: 'running',
    });
    expect(frame).toEqual({
      type: 'delegate_lifecycle', delegateRunId: 'r1', parentRunId: null, depth: 1,
      description: 'sub A', status: 'running', originJobId: null,
    });
  });
  it('delegate_tool は toolName/toolInput を保持して転送', () => {
    const frame = formatDelegateSseFrame({
      type: 'delegate_tool', delegateRunId: 'r1', toolName: 'WebFetch', toolInput: 'https://x',
    });
    expect(frame).toEqual({
      type: 'delegate_tool', delegateRunId: 'r1', toolName: 'WebFetch', toolInput: 'https://x',
    });
  });
  it('delegate 以外は null（このフォーマッタの対象外）', () => {
    expect(formatDelegateSseFrame({ type: 'text', text: 'x' })).toBeNull();
  });
});
