Files
gemini-cli/packages/core/src/config/userHintService.test.ts

78 lines
2.3 KiB
TypeScript

/**
* @license
* Copyright 2026 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { describe, it, expect, vi } from 'vitest';
import { UserHintService } from './userHintService.js';
describe('UserHintService', () => {
it('is disabled by default and ignores hints', () => {
const service = new UserHintService(() => false);
service.addUserHint('this hint should be ignored');
expect(service.getUserHints()).toEqual([]);
expect(service.getLatestHintIndex()).toBe(-1);
});
it('stores trimmed hints and exposes them via indexing when enabled', () => {
const service = new UserHintService(() => true);
service.addUserHint(' first hint ');
service.addUserHint('second hint');
service.addUserHint(' ');
expect(service.getUserHints()).toEqual(['first hint', 'second hint']);
expect(service.getLatestHintIndex()).toBe(1);
expect(service.getUserHintsAfter(-1)).toEqual([
'first hint',
'second hint',
]);
expect(service.getUserHintsAfter(0)).toEqual(['second hint']);
expect(service.getUserHintsAfter(1)).toEqual([]);
});
it('tracks the last hint timestamp', () => {
const service = new UserHintService(() => true);
expect(service.getLastUserHintAt()).toBeNull();
service.addUserHint('hint');
const timestamp = service.getLastUserHintAt();
expect(timestamp).not.toBeNull();
expect(typeof timestamp).toBe('number');
});
it('notifies listeners when a hint is added', () => {
const service = new UserHintService(() => true);
const listener = vi.fn();
service.onUserHint(listener);
service.addUserHint('new hint');
expect(listener).toHaveBeenCalledWith('new hint');
});
it('does NOT notify listeners after they are unregistered', () => {
const service = new UserHintService(() => true);
const listener = vi.fn();
service.onUserHint(listener);
service.offUserHint(listener);
service.addUserHint('ignored hint');
expect(listener).not.toHaveBeenCalled();
});
it('should clear all hints', () => {
const service = new UserHintService(() => true);
service.addUserHint('hint 1');
service.addUserHint('hint 2');
expect(service.getUserHints()).toHaveLength(2);
service.clear();
expect(service.getUserHints()).toHaveLength(0);
expect(service.getLatestHintIndex()).toBe(-1);
});
});