| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- /**
- * CODEGRAPH_WATCH_DEBOUNCE_MS env override (issue #403).
- *
- * Lets users tune the watcher quiet window from MCP-launched configs without
- * editing the agent's command line — formatter-on-save chains and large
- * generated outputs benefit from a longer window. Clamped to [100ms, 60s];
- * out-of-range / non-numeric values fall back to the FileWatcher default
- * (2000ms) rather than throwing or silently capping a likely typo.
- */
- import { describe, it, expect } from 'vitest';
- import { parseDebounceEnv } from '../src/mcp/engine';
- describe('parseDebounceEnv', () => {
- it('returns undefined for unset / empty values', () => {
- expect(parseDebounceEnv(undefined)).toBeUndefined();
- expect(parseDebounceEnv('')).toBeUndefined();
- expect(parseDebounceEnv(' ')).toBeUndefined();
- });
- it('accepts integer values inside [100, 60000]', () => {
- expect(parseDebounceEnv('100')).toBe(100);
- expect(parseDebounceEnv('2000')).toBe(2000);
- expect(parseDebounceEnv('5000')).toBe(5000);
- expect(parseDebounceEnv('60000')).toBe(60000);
- });
- it('rejects out-of-range values (returns undefined, lets default win)', () => {
- expect(parseDebounceEnv('0')).toBeUndefined();
- expect(parseDebounceEnv('50')).toBeUndefined(); // below 100
- expect(parseDebounceEnv('99')).toBeUndefined();
- expect(parseDebounceEnv('60001')).toBeUndefined(); // above 60s
- expect(parseDebounceEnv('-500')).toBeUndefined();
- });
- it('rejects non-integer / non-numeric values', () => {
- expect(parseDebounceEnv('abc')).toBeUndefined();
- expect(parseDebounceEnv('500.5')).toBeUndefined();
- expect(parseDebounceEnv('NaN')).toBeUndefined();
- expect(parseDebounceEnv('Infinity')).toBeUndefined();
- });
- it('accepts scientific notation that resolves to an in-range integer', () => {
- // Number('1e3') === 1000, Number.isInteger(1000) === true. Power users
- // who write debounce as 1e3 should not be surprised; the clamp still applies.
- expect(parseDebounceEnv('1e3')).toBe(1000);
- });
- });
|