diff --git a/.betterer.results b/.betterer.results
index 7e4d9cdd1b3..99f04a4c775 100644
--- a/.betterer.results
+++ b/.betterer.results
@@ -170,9 +170,6 @@ exports[`no enzyme tests`] = {
"public/app/features/org/OrgProfile.test.tsx:623809345": [
[0, 19, 13, "RegExp match", "2409514259"]
],
- "public/app/features/teams/TeamMemberRow.test.tsx:1649328210": [
- [0, 19, 13, "RegExp match", "2409514259"]
- ],
"public/app/features/teams/TeamMembers.test.tsx:4089428239": [
[0, 19, 13, "RegExp match", "2409514259"]
],
diff --git a/public/app/features/teams/TeamMemberRow.test.tsx b/public/app/features/teams/TeamMemberRow.test.tsx
index c2318e946fd..77724589c7d 100644
--- a/public/app/features/teams/TeamMemberRow.test.tsx
+++ b/public/app/features/teams/TeamMemberRow.test.tsx
@@ -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();
- const instance = wrapper.instance() as TeamMemberRow;
-
- return {
- wrapper,
- instance,
- };
+ render(
+
+ );
};
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 = { 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);
});
});
diff --git a/public/app/features/teams/TeamMemberRow.tsx b/public/app/features/teams/TeamMemberRow.tsx
index 7c65e9e1150..86fb06f39b8 100644
--- a/public/app/features/teams/TeamMemberRow.tsx
+++ b/public/app/features/teams/TeamMemberRow.tsx
@@ -2,15 +2,13 @@ import React, { PureComponent } from 'react';
import { connect, ConnectedProps } from 'react-redux';
import { SelectableValue } from '@grafana/data';
-import { LegacyForms, DeleteButton } from '@grafana/ui';
+import { Select, DeleteButton } from '@grafana/ui';
import { TagBadge } from 'app/core/components/TagFilter/TagBadge';
import { WithFeatureToggle } from 'app/core/components/WithFeatureToggle';
import { TeamMember, teamsPermissionLevels, TeamPermissionLevel } from 'app/types';
import { updateTeamMember, removeTeamMember } from './state/actions';
-const { Select } = LegacyForms;
-
const mapDispatchToProps = {
removeTeamMember,
updateTeamMember,
@@ -54,18 +52,18 @@ export class TeamMemberRow extends PureComponent {
return (
-
- {signedInUserIsTeamAdmin && (
-
+ {signedInUserIsTeamAdmin ? (
+ |
);
@@ -91,7 +89,7 @@ export class TeamMemberRow extends PureComponent {
@@ -103,7 +101,7 @@ export class TeamMemberRow extends PureComponent {
{syncEnabled && this.renderLabels(member.labels)}
this.onRemoveMember(member)}
diff --git a/public/app/features/teams/__snapshots__/TeamMemberRow.test.tsx.snap b/public/app/features/teams/__snapshots__/TeamMemberRow.test.tsx.snap
deleted file mode 100644
index 84467bdfb36..00000000000
--- a/public/app/features/teams/__snapshots__/TeamMemberRow.test.tsx.snap
+++ /dev/null
@@ -1,294 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`Render should render team members when sync enabled 1`] = `
-
-
-
- |
-
- testUser
- |
-
- test@test.com
- |
-
- testName
- |
-
-
-
-
- Member
-
-
- |
-
-
-
- |
-
-
- |
-
-`;
-
-exports[`Render when feature toggle editorsCanAdmin is turned off should not render permissions 1`] = `
-
-
-
- |
-
- testUser
- |
-
- test@test.com
- |
-
- testName
- |
-
-
-
-
-
- |
-
-
-
- |
-
-`;
-
-exports[`Render when feature toggle editorsCanAdmin is turned on should render permissions select if user is team admin 1`] = `
-
-
-
- |
-
- testUser
- |
-
- test@test.com
- |
-
- testName
- |
-
-
-
-
-
- |
-
-
-
- |
-
-`;
-
-exports[`Render when feature toggle editorsCanAdmin is turned on should render span and disable buttons if user is team member 1`] = `
-
-
-
- |
-
- testUser
- |
-
- test@test.com
- |
-
- testName
- |
-
-
-
-
- Member
-
-
- |
-
-
-
- |
-
-`;
| |