Skip to content
Snippets Groups Projects
AvailablePluginsDrawer.component.test.tsx 1.76 KiB
Newer Older
import { PLUGINS_MOCK } from '@/models/mocks/pluginsMock';
import { INITIAL_STORE_STATE_MOCK } from '@/redux/root/root.fixtures';
import { StoreType } from '@/redux/store';
import { InitialStoreState } from '@/utils/testing/getReduxStoreActionsListener';
import { getReduxWrapperWithStore } from '@/utils/testing/getReduxWrapperWithStore';
import { render, screen } from '@testing-library/react';
import { AvailablePluginsDrawer } from './AvailablePluginsDrawer.component';

const renderComponent = (initialStore?: InitialStoreState): { store: StoreType } => {
  const { Wrapper, store } = getReduxWrapperWithStore(initialStore);
  return (
    render(
      <Wrapper>
        <AvailablePluginsDrawer />
      </Wrapper>,
    ),
    {
      store,
    }
  );
};

describe('AvailablePluginsDrawer - component', () => {
  describe('when always', () => {
    it('should render drawer heading', () => {
      renderComponent(INITIAL_STORE_STATE_MOCK);
      const drawerTitle = screen.getByText('Available plugins');
      expect(drawerTitle).toBeInTheDocument();
    });

    it('should render load plugin from url', () => {
      renderComponent(INITIAL_STORE_STATE_MOCK);
      const loadPluginFromUrlInput = screen.getByTestId('load-plugin-input-url');
      expect(loadPluginFromUrlInput).toBeInTheDocument();
    });

    it.each(PLUGINS_MOCK)('should render render all public plugins', currentPlugin => {
      renderComponent({
        ...INITIAL_STORE_STATE_MOCK,
        plugins: {
          ...INITIAL_STORE_STATE_MOCK.plugins,
          list: {
            ...INITIAL_STORE_STATE_MOCK.plugins.list,
            data: PLUGINS_MOCK,
          },
        },
      });

      const pluginLabel = screen.getByText(currentPlugin.name);
      expect(pluginLabel).toBeInTheDocument();
    });
  });
});