grafana/public/app/features/teams/CreateTeam.test.tsx
Torkel Ödegaard b8e7ef48d0
AppChrome: Unify logic for chromeless pages that should not have NavBar, CommandPalette, Search etc (#62281)
* Keybindings: No global keybindings on chromeless pages

* simplify condition

* Refactoring

* Align name and file

* Move logic into AppChrome

* minor fix

* Update Page.tsx

* Fixing test

* Fixed tests

* More fixes

* Fixed more tests

* Fixing final test

* Fixed search in old nav
2023-02-02 09:53:06 +01:00

72 lines
2.1 KiB
TypeScript

import { render, screen, waitFor } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import React from 'react';
import { TestProvider } from 'test/helpers/TestProvider';
import { BackendSrv, setBackendSrv } from '@grafana/runtime';
import { CreateTeam } from './CreateTeam';
beforeEach(() => {
jest.clearAllMocks();
});
jest.mock('app/core/core', () => ({
contextSrv: {
licensedAccessControlEnabled: () => false,
hasPermission: () => true,
hasPermissionInMetadata: () => true,
user: { orgId: 1 },
},
}));
jest.mock('app/core/components/RolePicker/hooks', () => ({
useRoleOptions: jest.fn().mockReturnValue([{ roleOptions: [] }, jest.fn()]),
}));
const mockPost = jest.fn(() => {
return Promise.resolve({});
});
setBackendSrv({
post: mockPost,
} as unknown as BackendSrv);
const setup = () => {
return render(
<TestProvider>
<CreateTeam />
</TestProvider>
);
};
describe('Create team', () => {
it('should render component', () => {
setup();
expect(screen.getByRole('textbox', { name: /name/i })).toBeInTheDocument();
expect(screen.getByLabelText(/email/i)).toBeInTheDocument();
expect(screen.getByRole('button')).toBeInTheDocument();
});
it('should send correct data to the server', async () => {
setup();
await userEvent.type(screen.getByRole('textbox', { name: /name/i }), 'Test team');
await userEvent.type(screen.getByLabelText(/email/i), 'team@test.com');
await userEvent.click(screen.getByRole('button', { name: /create/i }));
await waitFor(() => {
expect(mockPost).toHaveBeenCalledWith(expect.anything(), { name: 'Test team', email: 'team@test.com' });
});
});
it('should validate required fields', async () => {
setup();
await userEvent.type(screen.getByLabelText(/email/i), 'team@test.com');
await userEvent.click(screen.getByRole('button', { name: /create/i }));
await waitFor(() => {
expect(mockPost).not.toBeCalled();
});
expect(screen.getAllByRole('alert')).toHaveLength(1);
expect(screen.getByText(/team name is required/i)).toBeInTheDocument();
});
});