mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
TeamMemberRow: Convert tests to RTL (#49875)
* TeamMemberRow: Remove legacy select * TeamMemberRow: Update attributes * TeamMemberRow: Refactor tests to RTL
This commit is contained in:
@@ -1,9 +1,8 @@
|
||||
import { shallow } from 'enzyme';
|
||||
import { render, screen } from '@testing-library/react';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import React from 'react';
|
||||
|
||||
import { SelectableValue } from '@grafana/data';
|
||||
|
||||
import { TeamMember, TeamPermissionLevel } from '../../types';
|
||||
import { TeamPermissionLevel } from '../../types';
|
||||
|
||||
import { TeamMemberRow, Props } from './TeamMemberRow';
|
||||
import { getMockTeamMember } from './__mocks__/teamMocks';
|
||||
@@ -20,75 +19,60 @@ const setup = (propOverrides?: object) => {
|
||||
|
||||
Object.assign(props, propOverrides);
|
||||
|
||||
const wrapper = shallow(<TeamMemberRow {...props} />);
|
||||
const instance = wrapper.instance() as TeamMemberRow;
|
||||
|
||||
return {
|
||||
wrapper,
|
||||
instance,
|
||||
};
|
||||
render(
|
||||
<table>
|
||||
<tbody>
|
||||
<TeamMemberRow {...props} />
|
||||
</tbody>
|
||||
</table>
|
||||
);
|
||||
};
|
||||
|
||||
describe('Render', () => {
|
||||
it('should render team members when sync enabled', () => {
|
||||
it('should render team member labels when sync enabled', () => {
|
||||
const member = getMockTeamMember();
|
||||
member.labels = ['LDAP'];
|
||||
const { wrapper } = setup({ member, syncEnabled: true });
|
||||
|
||||
expect(wrapper).toMatchSnapshot();
|
||||
setup({ member, syncEnabled: true });
|
||||
expect(screen.getByText('LDAP')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
describe('when feature toggle editorsCanAdmin is turned on', () => {
|
||||
it('should render permissions select if user is team admin', () => {
|
||||
const { wrapper } = setup({ editorsCanAdmin: true, signedInUserIsTeamAdmin: true });
|
||||
|
||||
expect(wrapper).toMatchSnapshot();
|
||||
});
|
||||
|
||||
it('should render span and disable buttons if user is team member', () => {
|
||||
const { wrapper } = setup({ editorsCanAdmin: true, signedInUserIsTeamAdmin: false });
|
||||
|
||||
expect(wrapper).toMatchSnapshot();
|
||||
const member = getMockTeamMember();
|
||||
setup({ editorsCanAdmin: true, signedInUserIsTeamAdmin: true, member });
|
||||
expect(screen.getByLabelText(`Select member's ${member.name} permission level`)).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
|
||||
describe('when feature toggle editorsCanAdmin is turned off', () => {
|
||||
it('should not render permissions', () => {
|
||||
const { wrapper } = setup({ editorsCanAdmin: false, signedInUserIsTeamAdmin: true });
|
||||
|
||||
expect(wrapper).toMatchSnapshot();
|
||||
const member = getMockTeamMember();
|
||||
setup({ editorsCanAdmin: false, signedInUserIsTeamAdmin: true, member });
|
||||
expect(screen.queryByLabelText(`Select member's ${member.name} permission level`)).not.toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('Functions', () => {
|
||||
describe('on remove member', () => {
|
||||
it('should remove member on remove button click', async () => {
|
||||
const member = getMockTeamMember();
|
||||
const { instance } = setup({ member });
|
||||
const mockRemove = jest.fn();
|
||||
setup({ member, removeTeamMember: mockRemove, editorsCanAdmin: true, signedInUserIsTeamAdmin: true });
|
||||
await userEvent.click(screen.getByRole('button', { name: `Remove team member ${member.name}` }));
|
||||
await userEvent.click(screen.getByRole('button', { name: 'Delete' }));
|
||||
|
||||
instance.onRemoveMember(member);
|
||||
|
||||
expect(instance.props.removeTeamMember).toHaveBeenCalledWith(1);
|
||||
expect(mockRemove).toHaveBeenCalledWith(member.userId);
|
||||
});
|
||||
|
||||
describe('on update permision for user in team', () => {
|
||||
const member: TeamMember = {
|
||||
userId: 3,
|
||||
teamId: 2,
|
||||
avatarUrl: '',
|
||||
email: 'user@user.org',
|
||||
login: 'member',
|
||||
name: 'member',
|
||||
labels: [],
|
||||
permission: TeamPermissionLevel.Member,
|
||||
};
|
||||
const { instance } = setup({ member });
|
||||
it('should update permission for user in team', async () => {
|
||||
const member = getMockTeamMember();
|
||||
const mockUpdate = jest.fn();
|
||||
setup({ member, editorsCanAdmin: true, signedInUserIsTeamAdmin: true, updateTeamMember: mockUpdate });
|
||||
const permission = TeamPermissionLevel.Admin;
|
||||
const item: SelectableValue<TeamPermissionLevel> = { value: permission };
|
||||
const expectedTeamMemeber = { ...member, permission };
|
||||
const expectedTeamMember = { ...member, permission };
|
||||
await userEvent.click(screen.getByLabelText(`Select member's ${member.name} permission level`));
|
||||
await userEvent.click(screen.getByText('Admin'));
|
||||
|
||||
instance.onPermissionChange(item, member);
|
||||
|
||||
expect(instance.props.updateTeamMember).toHaveBeenCalledWith(expectedTeamMemeber);
|
||||
expect(mockUpdate).toHaveBeenCalledWith(expectedTeamMember);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user