open source is social v-it.org
at main 84 lines 2.7 kB view raw
1// SPDX-License-Identifier: MIT 2// Copyright (c) 2026 sol pbc 3 4import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; 5import { detectCodingAgent, requireAgent, requireNotAgent } from '../src/lib/agent.js'; 6 7describe('agent', () => { 8 let originalClaudeCode; 9 let originalGeminiCli; 10 let originalCodexCi; 11 12 beforeEach(() => { 13 originalClaudeCode = process.env.CLAUDECODE; 14 originalGeminiCli = process.env.GEMINI_CLI; 15 originalCodexCi = process.env.CODEX_CI; 16 delete process.env.CLAUDECODE; 17 delete process.env.GEMINI_CLI; 18 delete process.env.CODEX_CI; 19 }); 20 21 afterEach(() => { 22 if (originalClaudeCode === undefined) delete process.env.CLAUDECODE; 23 else process.env.CLAUDECODE = originalClaudeCode; 24 25 if (originalGeminiCli === undefined) delete process.env.GEMINI_CLI; 26 else process.env.GEMINI_CLI = originalGeminiCli; 27 28 if (originalCodexCi === undefined) delete process.env.CODEX_CI; 29 else process.env.CODEX_CI = originalCodexCi; 30 }); 31 32 describe('detectCodingAgent', () => { 33 test('returns null when no agent env vars are set', () => { 34 expect(detectCodingAgent()).toBe(null); 35 }); 36 37 test('returns claude code when CLAUDECODE=1', () => { 38 process.env.CLAUDECODE = '1'; 39 expect(detectCodingAgent()).toEqual({ name: 'claude code', envVar: 'CLAUDECODE' }); 40 }); 41 42 test('returns gemini cli when GEMINI_CLI=1', () => { 43 process.env.GEMINI_CLI = '1'; 44 expect(detectCodingAgent()).toEqual({ name: 'gemini cli', envVar: 'GEMINI_CLI' }); 45 }); 46 47 test('returns codex when CODEX_CI=1', () => { 48 process.env.CODEX_CI = '1'; 49 expect(detectCodingAgent()).toEqual({ name: 'codex', envVar: 'CODEX_CI' }); 50 }); 51 52 test('returns null when env var is 0', () => { 53 process.env.CLAUDECODE = '0'; 54 expect(detectCodingAgent()).toBe(null); 55 }); 56 57 test('returns null when env var is empty', () => { 58 process.env.CLAUDECODE = ''; 59 expect(detectCodingAgent()).toBe(null); 60 }); 61 }); 62 63 describe('requireAgent', () => { 64 test('returns ok true when agent detected', () => { 65 process.env.CLAUDECODE = '1'; 66 expect(requireAgent()).toEqual({ ok: true, name: 'claude code', envVar: 'CLAUDECODE' }); 67 }); 68 69 test('returns ok false when no agent detected', () => { 70 expect(requireAgent()).toEqual({ ok: false }); 71 }); 72 }); 73 74 describe('requireNotAgent', () => { 75 test('returns ok true when no agent detected', () => { 76 expect(requireNotAgent()).toEqual({ ok: true }); 77 }); 78 79 test('returns ok false when agent detected', () => { 80 process.env.CLAUDECODE = '1'; 81 expect(requireNotAgent()).toEqual({ ok: false, name: 'claude code', envVar: 'CLAUDECODE' }); 82 }); 83 }); 84});