import { mocked } from 'jest-mock'; import { act, renderHook } from '@testing-library/react'; import { isDebugEnabled, LogLevel, observeStateChange } from '@atlassian/clientside-extensions-debug'; import useDebug from './useDebug'; jest.mock('@atlassian/clientside-extensions-debug'); describe('useDebug hook', () => { beforeEach(() => { mocked(isDebugEnabled).mockClear(); mocked(observeStateChange).mockClear(); }); it('should return the current state of the debug state', () => { const INITIAL_VALUE = false; mocked(isDebugEnabled).mockReturnValueOnce(INITIAL_VALUE); mocked(observeStateChange).mockReturnValueOnce({ unsubscribe() {} }); const { result } = renderHook(() => useDebug()); const [debugValue] = result.current; expect(debugValue).toBe(INITIAL_VALUE); }); it('should react to changes to the discover debug setting', () => { const INITIAL_VALUE = true; const CHANGED_BOOLEAN_VALUE = false; let updateCallback: Parameters[0]; mocked(isDebugEnabled).mockReturnValueOnce(INITIAL_VALUE); mocked(observeStateChange).mockImplementation((expectedCallback) => { updateCallback = expectedCallback; return { unsubscribe() {}, }; }); const { result } = renderHook(() => useDebug()); let [debugValue] = result.current; expect(debugValue).toBe(INITIAL_VALUE); act(() => { updateCallback({ discovery: CHANGED_BOOLEAN_VALUE, debug: CHANGED_BOOLEAN_VALUE, logging: CHANGED_BOOLEAN_VALUE, validation: CHANGED_BOOLEAN_VALUE, logLevel: LogLevel.warn, }); }); [debugValue] = result.current; expect(debugValue).toBe(CHANGED_BOOLEAN_VALUE); }); });