Skip to content

Commit 8c536cb

Browse files
committed
test: add unit tests for ClearChatsButton and ThemeSelector components
1 parent 931a892 commit 8c536cb

File tree

3 files changed

+71
-1
lines changed

3 files changed

+71
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import React from 'react';
2+
import { render, fireEvent } from '@testing-library/react';
3+
import '@testing-library/jest-dom/extend-expect';
4+
import { ClearChatsButton } from './General';
5+
6+
describe('ClearChatsButton', () => {
7+
let mockOnClick;
8+
9+
beforeEach(() => {
10+
mockOnClick = jest.fn();
11+
});
12+
13+
it('renders correctly', () => {
14+
const { getByText } = render(
15+
<ClearChatsButton confirmClear={false} showText={true} onClick={mockOnClick} />
16+
);
17+
18+
expect(getByText('Clear all chats')).toBeInTheDocument();
19+
expect(getByText('Clear')).toBeInTheDocument();
20+
});
21+
22+
it('renders confirm clear when confirmClear is true', () => {
23+
const { getByText } = render(
24+
<ClearChatsButton confirmClear={true} showText={true} onClick={mockOnClick} />
25+
);
26+
27+
expect(getByText('Confirm Clear')).toBeInTheDocument();
28+
});
29+
30+
it('calls onClick when the button is clicked', () => {
31+
const { getByText } = render(
32+
<ClearChatsButton confirmClear={false} showText={true} onClick={mockOnClick} />
33+
);
34+
35+
fireEvent.click(getByText('Clear'));
36+
37+
expect(mockOnClick).toHaveBeenCalled();
38+
});
39+
});

client/src/components/Nav/SettingsTabs/General.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { ThemeContext } from '~/hooks/ThemeContext';
44
import React, { useState, useContext, useCallback } from 'react';
55
import { useClearConversationsMutation } from '~/data-provider';
66

7-
const ThemeSelector = ({ theme, onChange }: { theme: string, onChange: (value: string) => void }) => (
7+
export const ThemeSelector = ({ theme, onChange }: { theme: string, onChange: (value: string) => void }) => (
88
<div className="flex items-center justify-between">
99
<div>Theme</div>
1010
<select
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import React from 'react';
2+
import { render, fireEvent } from '@testing-library/react';
3+
import '@testing-library/jest-dom/extend-expect';
4+
import { ThemeSelector } from './General';
5+
6+
describe('ThemeSelector', () => {
7+
let mockOnChange;
8+
9+
beforeEach(() => {
10+
mockOnChange = jest.fn();
11+
});
12+
13+
it('renders correctly', () => {
14+
const { getByText, getByDisplayValue } = render(
15+
<ThemeSelector theme="system" onChange={mockOnChange} />
16+
);
17+
18+
expect(getByText('Theme')).toBeInTheDocument();
19+
expect(getByDisplayValue('System')).toBeInTheDocument();
20+
});
21+
22+
it('calls onChange when the select value changes', () => {
23+
const { getByDisplayValue } = render(
24+
<ThemeSelector theme="system" onChange={mockOnChange} />
25+
);
26+
27+
fireEvent.change(getByDisplayValue('System'), { target: { value: 'dark' } });
28+
29+
expect(mockOnChange).toHaveBeenCalledWith('dark');
30+
});
31+
});

0 commit comments

Comments
 (0)