148 lines
4.8 KiB
TypeScript
148 lines
4.8 KiB
TypeScript
import { renderHook, act } from '@testing-library/react-hooks';
|
|
import useDefaultPreference from './useDefaultPreference';
|
|
import DefaultPreference from './index';
|
|
|
|
jest.mock('./index');
|
|
|
|
describe('useDefaultPreference', () => {
|
|
const mockSetName = jest.fn(); // Renamed mock
|
|
const mockGet = jest.fn();
|
|
const mockSet = jest.fn();
|
|
const mockClear = jest.fn();
|
|
const mockGetMultiple = jest.fn();
|
|
const mockSetMultiple = jest.fn();
|
|
const mockClearMultiple = jest.fn();
|
|
const mockGetAll = jest.fn();
|
|
const mockClearAll = jest.fn();
|
|
const mockgetName = jest.fn();
|
|
|
|
beforeEach(() => {
|
|
(DefaultPreference as unknown as jest.Mock).mockImplementation(() => ({
|
|
setGroupName: mockSetName, // Updated mock method
|
|
getName: mockgetName, // Added mock method
|
|
get: mockGet,
|
|
set: mockSet,
|
|
clear: mockClear,
|
|
getMultiple: mockGetMultiple,
|
|
setMultiple: mockSetMultiple,
|
|
clearMultiple: mockClearMultiple,
|
|
getAll: mockGetAll,
|
|
clearAll: mockClearAll,
|
|
}));
|
|
});
|
|
|
|
afterEach(() => {
|
|
jest.clearAllMocks();
|
|
});
|
|
|
|
it('should initialize with the correct group name', () => {
|
|
renderHook(() => useDefaultPreference('testGroup'));
|
|
expect(mockSetName).toHaveBeenCalledWith('testGroup'); // Updated expectation
|
|
});
|
|
|
|
it('should use default group name when none is provided', () => {
|
|
renderHook(() => useDefaultPreference());
|
|
expect(mockSetName).toHaveBeenCalledWith('default'); // Updated expectation
|
|
});
|
|
|
|
it('should handle different group names correctly', () => {
|
|
renderHook(() => useDefaultPreference('group1'));
|
|
expect(mockSetName).toHaveBeenCalledWith('group1');
|
|
|
|
renderHook(() => useDefaultPreference('group2'));
|
|
expect(mockSetName).toHaveBeenCalledWith('group2');
|
|
});
|
|
|
|
it('should retrieve the current group name', async () => {
|
|
// Arrange
|
|
const currentGroupName = 'testGroup';
|
|
mockgetName.mockResolvedValue(currentGroupName);
|
|
|
|
// Act
|
|
const { result, waitForNextUpdate } = renderHook(() => useDefaultPreference());
|
|
|
|
// Assuming the hook exposes a method to get the group name
|
|
// If not, this test should be adjusted based on the hook's implementation
|
|
const groupName = await DefaultPreference.getName();
|
|
|
|
// Assert
|
|
expect(mockgetName).toHaveBeenCalled();
|
|
expect(groupName).toBe(currentGroupName);
|
|
});
|
|
|
|
it('should get a preference value', async () => {
|
|
mockGet.mockResolvedValue('testValue');
|
|
const { result } = renderHook(() => useDefaultPreference());
|
|
|
|
const value = await result.current.getPreference('testKey');
|
|
expect(mockGet).toHaveBeenCalledWith('testKey');
|
|
expect(value).toBe('testValue');
|
|
});
|
|
|
|
it('should set a preference value', async () => {
|
|
const { result } = renderHook(() => useDefaultPreference());
|
|
|
|
await act(async () => {
|
|
await result.current.setPreference('testKey', 'testValue');
|
|
});
|
|
expect(mockSet).toHaveBeenCalledWith('testKey', 'testValue');
|
|
});
|
|
|
|
it('should clear a preference value', async () => {
|
|
const { result } = renderHook(() => useDefaultPreference());
|
|
|
|
await act(async () => {
|
|
await result.current.clearPreference('testKey');
|
|
});
|
|
expect(mockClear).toHaveBeenCalledWith('testKey');
|
|
});
|
|
|
|
it('should get multiple preferences', async () => {
|
|
const mockValues = ['value1', 'value2', null];
|
|
mockGetMultiple.mockResolvedValue(mockValues);
|
|
const { result } = renderHook(() => useDefaultPreference());
|
|
|
|
const values = await result.current.getMultiplePreferences(['key1', 'key2', 'key3']);
|
|
expect(mockGetMultiple).toHaveBeenCalledWith(['key1', 'key2', 'key3']);
|
|
expect(values).toEqual(mockValues);
|
|
});
|
|
|
|
it('should set multiple preferences', async () => {
|
|
const data = { key1: 'value1', key2: 2, key3: true };
|
|
const { result } = renderHook(() => useDefaultPreference());
|
|
|
|
await act(async () => {
|
|
await result.current.setMultiplePreferences(data);
|
|
});
|
|
expect(mockSetMultiple).toHaveBeenCalledWith(data);
|
|
});
|
|
|
|
it('should clear multiple preferences', async () => {
|
|
const keys = ['key1', 'key2', 'key3'];
|
|
const { result } = renderHook(() => useDefaultPreference());
|
|
|
|
await act(async () => {
|
|
await result.current.clearMultiplePreferences(keys);
|
|
});
|
|
expect(mockClearMultiple).toHaveBeenCalledWith(keys);
|
|
});
|
|
|
|
it('should get all preferences', async () => {
|
|
const mockAll = { key1: 'value1', key2: 2, key3: true };
|
|
mockGetAll.mockResolvedValue(mockAll);
|
|
const { result } = renderHook(() => useDefaultPreference());
|
|
|
|
const all = await result.current.getAllPreferences();
|
|
expect(mockGetAll).toHaveBeenCalled();
|
|
expect(all).toEqual(mockAll);
|
|
});
|
|
|
|
it('should clear all preferences', async () => {
|
|
const { result } = renderHook(() => useDefaultPreference());
|
|
|
|
await act(async () => {
|
|
await result.current.clearAllPreferences();
|
|
});
|
|
expect(mockClearAll).toHaveBeenCalled();
|
|
});
|
|
}); |