import { act, renderHook } from '@testing-library/react'; import { log } from 'console'; import Cookies from 'js-cookie'; import React from 'react'; import config from '../examples/config'; import { Provider } from '../TrackingManagerContext'; import { Region, TrackingCategory } from '../types'; import useSetTrackingPreference from './useSetTrackingPreference'; jest.mock('js-cookie', () => ({ __esModule: true, default: { get: jest.fn(), set: jest.fn(), remove: jest.fn(), }, })); describe('useSetTrackingPreference', () => { const onError = jest.fn(); const onPreferenceChange = jest.fn(); const region = Region.DEFAULT; const renderFormHook = () => renderHook(() => useSetTrackingPreference(), { wrapper: ({ children }: { children: React.ReactNode }) => ( {children} ), }); it('adds required category if not set', () => { const { result } = renderFormHook(); act(() => { result.current({ region: Region.DEFAULT, consent: [TrackingCategory.FUNCTIONAL], }); }); expect(onError).toHaveBeenCalled(); expect(onPreferenceChange).toHaveBeenCalledWith({ region: 'DEFAULT', consent: ['functional', 'necessary'], }); }); it('sets new consent', () => { const mockGet = Cookies.get as jest.MockedFunction; mockGet.mockImplementation(() => ({ cm_default_preferences: JSON.stringify({ region: Region.DEFAULT, consent: [TrackingCategory.NECESSARY, TrackingCategory.PERFORMANCE], }), })); const { result } = renderFormHook(); const newPreference = { region: Region.DEFAULT, consent: [ TrackingCategory.NECESSARY, TrackingCategory.PERFORMANCE, TrackingCategory.FUNCTIONAL, ], }; act(() => { result.current(newPreference); }); expect(onPreferenceChange).toHaveBeenCalledWith(newPreference); }); });