* feat: group configurations - index page * feat: [AXIMST-63] Index group configurations page * fix: resolve discussions * fix: resolve second round discussions * feat: group configurations - content group actions * feat: [AXIMST-75, AXIMST-69, AXIMST-81] Content group actions * fix: resolve conversations * feat: group configurations - sidebar * feat: [AXIMST-87] group-configuration page sidebar * refactor: [AXIMST-87] add changes after review * refactor: [AXIMST-87] add changes after review * refactor: [AXIMST-87] add changes ater review --------- Co-authored-by: Kyrylo Hudym-Levkovych <kyr.hudym@kyrs-MacBook-Pro.local> * fix: group configurations - the page reloads after the user saves changes * feat: group configurations - experiment groups * feat: [AXIMST-93, 99, 105] Group configuration - Experiment Groups * fix: [AXIMST-518, 537] Group configuration - resolve bugs * fix: review discussions * fix: revert classname case * fix: group configurations - resolve discussions fix: [AXIMST-714] icon is aligned with text (#210) * fix: add hook tests * fix: add thunk tests * fix: add slice tests * chore: group configurations - messages * fix: group configurations - remove delete in edit mode --------- Co-authored-by: Kyr <40792129+khudym@users.noreply.github.com> Co-authored-by: Kyrylo Hudym-Levkovych <kyr.hudym@kyrs-MacBook-Pro.local> Co-authored-by: monteri <lansevermore>
94 lines
3.4 KiB
JavaScript
94 lines
3.4 KiB
JavaScript
import { render } from '@testing-library/react';
|
|
import userEvent from '@testing-library/user-event';
|
|
import { IntlProvider } from '@edx/frontend-platform/i18n';
|
|
|
|
import { contentGroupsMock } from '../__mocks__';
|
|
import commonMessages from '../common/messages';
|
|
import rootMessages from '../messages';
|
|
import ContentGroupCard from './ContentGroupCard';
|
|
|
|
const handleCreateMock = jest.fn();
|
|
const handleDeleteMock = jest.fn();
|
|
const handleEditMock = jest.fn();
|
|
const contentGroupActions = {
|
|
handleCreate: handleCreateMock,
|
|
handleDelete: handleDeleteMock,
|
|
handleEdit: handleEditMock,
|
|
};
|
|
|
|
const handleEditGroupMock = jest.fn();
|
|
const contentGroup = contentGroupsMock.groups[0];
|
|
const contentGroupWithUsages = contentGroupsMock.groups[1];
|
|
const contentGroupWithOnlyOneUsage = contentGroupsMock.groups[2];
|
|
|
|
const renderComponent = (props = {}) => render(
|
|
<IntlProvider locale="en">
|
|
<ContentGroupCard
|
|
group={contentGroup}
|
|
groupNames={contentGroupsMock.groups?.map((group) => group.name)}
|
|
parentGroupId={contentGroupsMock.id}
|
|
contentGroupActions={contentGroupActions}
|
|
handleEditGroup={handleEditGroupMock}
|
|
{...props}
|
|
/>
|
|
</IntlProvider>,
|
|
);
|
|
|
|
describe('<ContentGroupCard />', () => {
|
|
it('renders component correctly', () => {
|
|
const { getByText, getByTestId } = renderComponent();
|
|
expect(getByText(contentGroup.name)).toBeInTheDocument();
|
|
expect(
|
|
getByText(
|
|
commonMessages.titleId.defaultMessage.replace('{id}', contentGroup.id),
|
|
),
|
|
).toBeInTheDocument();
|
|
expect(getByText(rootMessages.notInUse.defaultMessage)).toBeInTheDocument();
|
|
expect(getByTestId('content-group-card-header-edit')).toBeInTheDocument();
|
|
expect(getByTestId('content-group-card-header-delete')).toBeInTheDocument();
|
|
});
|
|
|
|
it('expands/collapses the container group content on title click', () => {
|
|
const {
|
|
getByText, queryByTestId, getByTestId, queryByText,
|
|
} = renderComponent();
|
|
const cardTitle = getByTestId('configuration-card-header-button');
|
|
userEvent.click(cardTitle);
|
|
expect(queryByTestId('content-group-card-content')).toBeInTheDocument();
|
|
expect(
|
|
queryByText(rootMessages.notInUse.defaultMessage),
|
|
).not.toBeInTheDocument();
|
|
|
|
userEvent.click(cardTitle);
|
|
expect(queryByTestId('content-group-card-content')).not.toBeInTheDocument();
|
|
expect(getByText(rootMessages.notInUse.defaultMessage)).toBeInTheDocument();
|
|
});
|
|
|
|
it('renders content group badge with used only one location', () => {
|
|
const { queryByTestId } = renderComponent({
|
|
group: contentGroupWithOnlyOneUsage,
|
|
});
|
|
const usageBlock = queryByTestId('configuration-card-header-button-usage');
|
|
expect(usageBlock).toBeInTheDocument();
|
|
});
|
|
|
|
it('renders content group badge with used locations', () => {
|
|
const { queryByTestId } = renderComponent({
|
|
group: contentGroupWithUsages,
|
|
});
|
|
const usageBlock = queryByTestId('configuration-card-header-button-usage');
|
|
expect(usageBlock).toBeInTheDocument();
|
|
});
|
|
|
|
it('renders group controls without access to units', () => {
|
|
const { queryByText, getByTestId } = renderComponent();
|
|
expect(
|
|
queryByText(commonMessages.accessTo.defaultMessage),
|
|
).not.toBeInTheDocument();
|
|
|
|
const cardTitle = getByTestId('configuration-card-header-button');
|
|
userEvent.click(cardTitle);
|
|
expect(getByTestId('configuration-card-usage-empty')).toBeInTheDocument();
|
|
});
|
|
});
|