diff --git a/.betterer.results b/.betterer.results index 9d094e27732..cccbb6fad1b 100644 --- a/.betterer.results +++ b/.betterer.results @@ -146,9 +146,6 @@ exports[`no enzyme tests`] = { "public/app/features/org/OrgDetailsPage.test.tsx:3835042085": [ [0, 19, 13, "RegExp match", "2409514259"] ], - "public/app/features/teams/TeamSettings.test.tsx:2043271249": [ - [0, 19, 13, "RegExp match", "2409514259"] - ], "public/app/features/users/UsersListPage.test.tsx:2518052139": [ [0, 19, 13, "RegExp match", "2409514259"] ], diff --git a/public/app/features/teams/TeamSettings.test.tsx b/public/app/features/teams/TeamSettings.test.tsx index 2b6bb754ca3..1092aefede7 100644 --- a/public/app/features/teams/TeamSettings.test.tsx +++ b/public/app/features/teams/TeamSettings.test.tsx @@ -1,15 +1,20 @@ -import { shallow } from 'enzyme'; +import { fireEvent, render, screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import React from 'react'; import { Props, TeamSettings } from './TeamSettings'; import { getMockTeam } from './__mocks__/teamMocks'; -jest.mock('app/core/core', () => ({ +jest.mock('app/core/services/context_srv', () => ({ contextSrv: { hasPermissionInMetadata: () => true, }, })); +jest.mock('app/core/components/SharedPreferences/SharedPreferences', () => { + return { SharedPreferences: () =>
}; +}); + const setup = (propOverrides?: object) => { const props: Props = { team: getMockTeam(), @@ -18,19 +23,36 @@ const setup = (propOverrides?: object) => { Object.assign(props, propOverrides); - const wrapper = shallow(); - const instance = wrapper.instance() as any; - - return { - wrapper, - instance, - }; + render(); }; -describe('Render', () => { +describe('Team settings', () => { it('should render component', () => { - const { wrapper } = setup(); + setup(); + + expect(screen.getByText('Team settings')).toBeInTheDocument(); + }); + + it('should validate required fields', async () => { + const mockUpdate = jest.fn(); + setup({ updateTeam: mockUpdate }); + await userEvent.clear(screen.getByRole('textbox', { name: /Name/ })); + await userEvent.type(screen.getByLabelText(/Email/i), 'team@test.com'); + // Submitting with userEvent doesn't work here + fireEvent.submit(screen.getByRole('button', { name: 'Update' })); + expect(await screen.findByText('Name is required')).toBeInTheDocument(); + await waitFor(() => expect(mockUpdate).not.toHaveBeenCalled()); + }); - expect(wrapper).toMatchSnapshot(); + it('should submit form with correct values', async () => { + const mockUpdate = jest.fn(); + setup({ updateTeam: mockUpdate }); + await userEvent.clear(screen.getByRole('textbox', { name: /Name/ })); + await userEvent.clear(screen.getByLabelText(/Email/i)); + await userEvent.type(screen.getByRole('textbox', { name: /Name/ }), 'New team'); + await userEvent.type(screen.getByLabelText(/Email/i), 'team@test.com'); + // Submitting with userEvent doesn't work here + fireEvent.submit(screen.getByRole('button', { name: 'Update' })); + await waitFor(() => expect(mockUpdate).toHaveBeenCalledWith('New team', 'team@test.com')); }); }); diff --git a/public/app/features/teams/TeamSettings.tsx b/public/app/features/teams/TeamSettings.tsx index d4fb9016887..7a828f13064 100644 --- a/public/app/features/teams/TeamSettings.tsx +++ b/public/app/features/teams/TeamSettings.tsx @@ -32,9 +32,15 @@ export const TeamSettings: FC = ({ team, updateTeam }) => { }} disabled={!canWriteTeamSettings} > - {({ register }) => ( + {({ register, errors }) => ( <> - + diff --git a/public/app/features/teams/__snapshots__/TeamSettings.test.tsx.snap b/public/app/features/teams/__snapshots__/TeamSettings.test.tsx.snap deleted file mode 100644 index 1fe40abc971..00000000000 --- a/public/app/features/teams/__snapshots__/TeamSettings.test.tsx.snap +++ /dev/null @@ -1,30 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Render should render component 1`] = ` - -
-
- - -
- -
-`;