PageItemControl.spec.tsx 1.6 KB

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