FocusToGlobalSearch.spec.tsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { cleanup, render } from '@testing-library/react';
  2. import { afterEach, describe, expect, it, vi } from 'vitest';
  3. const mockOpen = vi.hoisted(() => vi.fn());
  4. const mockUseIsEditable = vi.hoisted(() => vi.fn());
  5. const mockUseSearchModalStatus = vi.hoisted(() => vi.fn());
  6. vi.mock('~/states/page', () => ({
  7. useIsEditable: mockUseIsEditable,
  8. }));
  9. vi.mock('~/features/search/client/states/modal/search', () => ({
  10. useSearchModalStatus: mockUseSearchModalStatus,
  11. useSearchModalActions: vi.fn(() => ({ open: mockOpen })),
  12. }));
  13. const { FocusToGlobalSearch, hotkeyBindings } = await import(
  14. './FocusToGlobalSearch'
  15. );
  16. afterEach(() => {
  17. cleanup();
  18. vi.clearAllMocks();
  19. });
  20. describe('FocusToGlobalSearch', () => {
  21. describe('hotkeyBindings', () => {
  22. it('defines "/" key as single category', () => {
  23. expect(hotkeyBindings).toEqual({
  24. keys: '/',
  25. category: 'single',
  26. });
  27. });
  28. });
  29. describe('behavior', () => {
  30. it('opens search modal when editable and not already opened, then calls onDeleteRender', () => {
  31. mockUseIsEditable.mockReturnValue(true);
  32. mockUseSearchModalStatus.mockReturnValue({ isOpened: false });
  33. const onDeleteRender = vi.fn();
  34. render(<FocusToGlobalSearch onDeleteRender={onDeleteRender} />);
  35. expect(mockOpen).toHaveBeenCalledOnce();
  36. expect(onDeleteRender).toHaveBeenCalledOnce();
  37. });
  38. it('does not open search modal when not editable', () => {
  39. mockUseIsEditable.mockReturnValue(false);
  40. mockUseSearchModalStatus.mockReturnValue({ isOpened: false });
  41. const onDeleteRender = vi.fn();
  42. render(<FocusToGlobalSearch onDeleteRender={onDeleteRender} />);
  43. expect(mockOpen).not.toHaveBeenCalled();
  44. expect(onDeleteRender).not.toHaveBeenCalled();
  45. });
  46. it('does not open search modal when already opened', () => {
  47. mockUseIsEditable.mockReturnValue(true);
  48. mockUseSearchModalStatus.mockReturnValue({ isOpened: true });
  49. const onDeleteRender = vi.fn();
  50. render(<FocusToGlobalSearch onDeleteRender={onDeleteRender} />);
  51. expect(mockOpen).not.toHaveBeenCalled();
  52. expect(onDeleteRender).not.toHaveBeenCalled();
  53. });
  54. });
  55. });