Files
openchamber/packages/ui/src/components/chat/__tests__/fileMentionAutocompleteState.test.ts
T

75 lines
2.4 KiB
TypeScript

import { describe, expect, test } from 'bun:test';
import { getFileMentionAutocompleteQuery } from '../fileMentionAutocompleteState';
describe('getFileMentionAutocompleteQuery', () => {
test('opens file mention autocomplete for manually typed boundary @ text', () => {
expect(getFileMentionAutocompleteQuery({
value: '@config',
cursorPosition: '@config'.length,
inputSource: 'manual',
})).toBe('config');
expect(getFileMentionAutocompleteQuery({
value: 'check @main.ts',
cursorPosition: 'check @main.ts'.length,
inputSource: 'manual',
})).toBe('main.ts');
expect(getFileMentionAutocompleteQuery({
value: 'check @docs',
cursorPosition: 'check @docs'.length,
})).toBe('docs');
});
test('does not open file mention autocomplete when pasted text contains @', () => {
const pastedValues = [
'@config',
'@/path/to/file',
'Use @main.ts',
];
for (const value of pastedValues) {
expect(getFileMentionAutocompleteQuery({
value,
cursorPosition: value.length,
inputSource: 'paste',
insertedText: value,
})).toBeNull();
}
});
test('does not open file mention autocomplete for pasted package and email text', () => {
const pastedValues = [
'user@email.com',
'npx @scope/pkg@latest',
];
for (const value of pastedValues) {
expect(getFileMentionAutocompleteQuery({
value,
cursorPosition: value.length,
inputSource: 'paste',
insertedText: value,
})).toBeNull();
}
});
test('keeps autocomplete open when pasting a query fragment after a manually typed @', () => {
expect(getFileMentionAutocompleteQuery({
value: '@config',
cursorPosition: '@config'.length,
inputSource: 'paste',
insertedText: 'config',
})).toBe('config');
});
test('uses current value when paste source lacks inserted text context', () => {
expect(getFileMentionAutocompleteQuery({
value: '@config',
cursorPosition: '@config'.length,
inputSource: 'paste',
})).toBe('config');
});
});