import { describe, expect, it, vi } from 'vitest';
import { buildSpawnSpec } from '../src/core/claude-launcher.js';

// resolveClaudeBin() fait `which claude` : on le stub pour ne pas dépendre d'un claude réel en PATH.
vi.mock('node:child_process', () => ({ execFileSync: () => '/usr/bin/claude\n' }));

describe('buildSpawnSpec — session de groupe multi-repo (P6)', () => {
  it('émet un --add-dir par répertoire supplémentaire (claude)', () => {
    const spec = buildSpawnSpec({ command: 'claude', addDirs: ['/a', '/b', '/c'] });
    expect(spec.file).toBe('/usr/bin/claude');
    expect(spec.args).toEqual(['--add-dir', '/a', '--add-dir', '/b', '--add-dir', '/c']);
  });

  it('combine --resume et --add-dir (reprise d’une session de groupe)', () => {
    const spec = buildSpawnSpec({ command: 'claude', resume: { claudeSessionId: 'sid' }, addDirs: ['/x'] });
    expect(spec.args).toEqual(['--resume', 'sid', '--add-dir', '/x']);
  });

  it('aucun --add-dir quand addDirs est vide/absent', () => {
    expect(buildSpawnSpec({ command: 'claude' }).args).toEqual([]);
    expect(buildSpawnSpec({ command: 'claude', addDirs: [] }).args).toEqual([]);
  });

  it('ignore addDirs pour bash (pas de --add-dir)', () => {
    const spec = buildSpawnSpec({ command: 'bash', addDirs: ['/a', '/b'] });
    expect(spec.file).toBe('bash');
    expect(spec.args).toEqual(['--norc']);
  });
});
