react-native-default-prefer.../useDefaultPreference.test.ts
Marcos Rodriguez Velez 20c807a49c test
2024-11-19 22:16:26 -04:00

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();
});
});