123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- import {GroupFixture} from 'sentry-fixture/group';
- import {LocationFixture} from 'sentry-fixture/locationFixture';
- import {OrganizationFixture} from 'sentry-fixture/organization';
- import {ProjectFixture} from 'sentry-fixture/project';
- import {RouterFixture} from 'sentry-fixture/routerFixture';
- import {TagsFixture} from 'sentry-fixture/tags';
- import {
- makeAllTheProviders,
- render,
- renderHook,
- screen,
- userEvent,
- } from 'sentry-test/reactTestingLibrary';
- import OrganizationStore from 'sentry/stores/organizationStore';
- import {
- EventSearch,
- useEventQuery,
- } from 'sentry/views/issueDetails/streamline/eventSearch';
- const mockHandleSearch = jest.fn();
- describe('EventSearch', () => {
- const organization = OrganizationFixture();
- const project = ProjectFixture({
- environments: ['production', 'staging', 'developement'],
- });
- const group = GroupFixture({id: 'group-id'});
- const defaultProps = {
- environments: project.environments,
- group,
- handleSearch: mockHandleSearch,
- query: '',
- };
- const [tagKey, tagValue] = ['user.email', 'leander.rodrigues@sentry.io'];
- let mockTagKeyQuery: jest.Mock;
- beforeEach(() => {
- OrganizationStore.onUpdate(organization, {replace: true});
- MockApiClient.clearMockResponses();
- MockApiClient.addMockResponse({
- url: `/organizations/${organization.slug}/issues/${group.id}/tags/`,
- body: TagsFixture(),
- method: 'GET',
- });
- mockTagKeyQuery = MockApiClient.addMockResponse({
- url: `/organizations/${organization.slug}/tags/${tagKey}/values/`,
- body: [
- {
- key: tagKey,
- name: tagValue,
- value: tagValue,
- },
- ],
- method: 'GET',
- });
- });
- it('handles basic inputs for tags', async function () {
- render(<EventSearch {...defaultProps} />);
- const search = screen.getByRole('combobox', {name: 'Add a search term'});
- expect(search).toBeInTheDocument();
- await userEvent.type(search, `${tagKey}:`);
- await userEvent.keyboard(`${tagValue}{enter}{enter}`);
- expect(mockTagKeyQuery).toHaveBeenCalled();
- expect(mockHandleSearch).toHaveBeenCalledWith(
- `${tagKey}:${tagValue}`,
- expect.anything()
- );
- });
- it('filters issue tokens from event queries', function () {
- const validQuery = `${tagKey}:${tagValue} device.family:[iphone,pixel]`;
- const {result: onlyIssueTokens} = renderHook(() => useEventQuery({group}), {
- wrapper: makeAllTheProviders({
- organization,
- router: RouterFixture({
- location: LocationFixture({
- query: {query: 'is:resolved assigned:[me,#issues] issue.priority:high'},
- }),
- }),
- }),
- });
- expect(onlyIssueTokens.current).toBe('');
- const {result: combinedTokens} = renderHook(() => useEventQuery({group}), {
- wrapper: makeAllTheProviders({
- organization,
- router: RouterFixture({
- location: LocationFixture({
- query: {query: `is:resolved assigned:[me,#issues] ${validQuery}`},
- }),
- }),
- }),
- });
- expect(combinedTokens.current).toBe(validQuery);
- const {result: onlyEventTokens} = renderHook(() => useEventQuery({group}), {
- wrapper: makeAllTheProviders({
- organization,
- router: RouterFixture({
- location: LocationFixture({
- query: {query: validQuery},
- }),
- }),
- }),
- });
- expect(onlyEventTokens.current).toBe(validQuery);
- const {result: unrecognizedFilterKey} = renderHook(() => useEventQuery({group}), {
- wrapper: makeAllTheProviders({
- organization,
- router: RouterFixture({
- location: LocationFixture({
- // This isn't in the TagsFixture or ISSUE_EVENT_PROPERTY_FIELDS
- query: {query: `${validQuery} organization.slug:sentry`},
- }),
- }),
- }),
- });
- expect(unrecognizedFilterKey.current).toBe(validQuery);
- });
- });
|