PageItemControl.spec.tsx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { type IPageInfoForOperation } from '@growi/core/dist/interfaces';
  2. import {
  3. fireEvent, render, screen, within,
  4. } from '@testing-library/react';
  5. import { mock } from 'vitest-mock-extended';
  6. import { PageItemControl } from './PageItemControl';
  7. // mock for isIPageInfoForOperation
  8. const mocks = vi.hoisted(() => ({
  9. isIPageInfoForOperationMock: vi.fn(),
  10. }));
  11. vi.mock('@growi/core/dist/interfaces', () => ({
  12. isIPageInfoForOperation: mocks.isIPageInfoForOperationMock,
  13. }));
  14. describe('PageItemControl.tsx', () => {
  15. describe('Should trigger onClickRenameMenuItem() when clicking the rename button', () => {
  16. it('without fetching PageInfo by useSWRxPageInfo', async() => {
  17. // setup
  18. const pageInfo = mock<IPageInfoForOperation>();
  19. const onClickRenameMenuItemMock = vi.fn();
  20. // return true when the argument is pageInfo in order to supress fetching
  21. mocks.isIPageInfoForOperationMock.mockImplementation((arg) => {
  22. if (arg === pageInfo) {
  23. return true;
  24. }
  25. });
  26. const props = {
  27. pageId: 'dummy-page-id',
  28. isEnableActions: true,
  29. pageInfo,
  30. onClickRenameMenuItem: onClickRenameMenuItemMock,
  31. };
  32. render(<PageItemControl {...props} />);
  33. // when
  34. const button = within(screen.getByTestId('open-page-item-control-btn')).getByText(/more_vert/);
  35. fireEvent.click(button);
  36. const renameMenuItem = await screen.findByTestId('rename-page-btn');
  37. fireEvent.click(renameMenuItem);
  38. // then
  39. expect(onClickRenameMenuItemMock).toHaveBeenCalled();
  40. });
  41. });
  42. });