summaryrefslogtreecommitdiff
path: root/packages/cli/src/ui/hooks/useHistoryManager.test.ts
diff options
context:
space:
mode:
authorMarat Boshernitsan <[email protected]>2025-06-03 23:01:26 -0700
committerGitHub <[email protected]>2025-06-03 23:01:26 -0700
commit7de790fbf236193191a33482793ee3ec5943d62d (patch)
tree793bd860550f91238e91b65177c88b53c6b820b7 /packages/cli/src/ui/hooks/useHistoryManager.test.ts
parentc313762ba06ab1324dccd4c7663038cb56d24e53 (diff)
Fix several bugs in prompt history (#734)
Co-authored-by: Marat Boshernitsan <[email protected]>
Diffstat (limited to 'packages/cli/src/ui/hooks/useHistoryManager.test.ts')
-rw-r--r--packages/cli/src/ui/hooks/useHistoryManager.test.ts61
1 files changed, 61 insertions, 0 deletions
diff --git a/packages/cli/src/ui/hooks/useHistoryManager.test.ts b/packages/cli/src/ui/hooks/useHistoryManager.test.ts
index 35964612..c7f925e2 100644
--- a/packages/cli/src/ui/hooks/useHistoryManager.test.ts
+++ b/packages/cli/src/ui/hooks/useHistoryManager.test.ts
@@ -138,4 +138,65 @@ describe('useHistoryManager', () => {
expect(result.current.history).toEqual([]);
});
+
+ it('should not add consecutive duplicate user messages', () => {
+ const { result } = renderHook(() => useHistory());
+ const timestamp = Date.now();
+ const itemData1: Omit<HistoryItem, 'id'> = {
+ type: 'user', // Replaced HistoryItemType.User
+ text: 'Duplicate message',
+ };
+ const itemData2: Omit<HistoryItem, 'id'> = {
+ type: 'user', // Replaced HistoryItemType.User
+ text: 'Duplicate message',
+ };
+ const itemData3: Omit<HistoryItem, 'id'> = {
+ type: 'gemini', // Replaced HistoryItemType.Gemini
+ text: 'Gemini response',
+ };
+ const itemData4: Omit<HistoryItem, 'id'> = {
+ type: 'user', // Replaced HistoryItemType.User
+ text: 'Another user message',
+ };
+
+ act(() => {
+ result.current.addItem(itemData1, timestamp);
+ result.current.addItem(itemData2, timestamp + 1); // Same text, different timestamp
+ result.current.addItem(itemData3, timestamp + 2);
+ result.current.addItem(itemData4, timestamp + 3);
+ });
+
+ expect(result.current.history).toHaveLength(3);
+ expect(result.current.history[0].text).toBe('Duplicate message');
+ expect(result.current.history[1].text).toBe('Gemini response');
+ expect(result.current.history[2].text).toBe('Another user message');
+ });
+
+ it('should add duplicate user messages if they are not consecutive', () => {
+ const { result } = renderHook(() => useHistory());
+ const timestamp = Date.now();
+ const itemData1: Omit<HistoryItem, 'id'> = {
+ type: 'user', // Replaced HistoryItemType.User
+ text: 'Message 1',
+ };
+ const itemData2: Omit<HistoryItem, 'id'> = {
+ type: 'gemini', // Replaced HistoryItemType.Gemini
+ text: 'Gemini response',
+ };
+ const itemData3: Omit<HistoryItem, 'id'> = {
+ type: 'user', // Replaced HistoryItemType.User
+ text: 'Message 1', // Duplicate text, but not consecutive
+ };
+
+ act(() => {
+ result.current.addItem(itemData1, timestamp);
+ result.current.addItem(itemData2, timestamp + 1);
+ result.current.addItem(itemData3, timestamp + 2);
+ });
+
+ expect(result.current.history).toHaveLength(3);
+ expect(result.current.history[0].text).toBe('Message 1');
+ expect(result.current.history[1].text).toBe('Gemini response');
+ expect(result.current.history[2].text).toBe('Message 1');
+ });
});