diff --git a/static/app/views/explore/logs/index.spec.tsx b/static/app/views/explore/logs/index.spec.tsx index ae519a9cad8be7..f318daf1c58825 100644 --- a/static/app/views/explore/logs/index.spec.tsx +++ b/static/app/views/explore/logs/index.spec.tsx @@ -2,24 +2,9 @@ import {initializeOrg} from 'sentry-test/initializeOrg'; import {render, screen, userEvent, waitFor} from 'sentry-test/reactTestingLibrary'; import PageFiltersStore from 'sentry/stores/pageFiltersStore'; -import {OrganizationContext} from 'sentry/views/organizationContext'; import LogsPage from './index'; -function ProviderWrapper({ - children, - organization, -}: { - children: React.ReactNode; - organization: any; -}) { - return ( - - {children} - - ); -} - const BASE_FEATURES = ['ourlogs-enabled']; describe('LogsPage', function () { @@ -118,16 +103,12 @@ describe('LogsPage', function () { }); it('should call APIs as expected', async function () { - render( - - - , - { - initialRouterConfig: { - location: `/organizations/${organization.slug}/explore/logs/`, - }, - } - ); + render(, { + organization, + initialRouterConfig: { + location: `/organizations/${organization.slug}/explore/logs/`, + }, + }); await waitFor(() => { expect(eventTableMock).toHaveBeenCalled(); @@ -171,16 +152,12 @@ describe('LogsPage', function () { }, }); - render( - - - , - { - initialRouterConfig: { - location: `/organizations/${newOrganization.slug}/explore/logs/`, - }, - } - ); + render(, { + organization: newOrganization, + initialRouterConfig: { + location: `/organizations/${newOrganization.slug}/explore/logs/`, + }, + }); await waitFor(() => { expect(screen.getByTestId('logs-table')).toBeInTheDocument(); diff --git a/static/app/views/explore/logs/logsAutoRefresh.spec.tsx b/static/app/views/explore/logs/logsAutoRefresh.spec.tsx index d31f4916687419..d916fb645a0fe9 100644 --- a/static/app/views/explore/logs/logsAutoRefresh.spec.tsx +++ b/static/app/views/explore/logs/logsAutoRefresh.spec.tsx @@ -1,5 +1,4 @@ import React from 'react'; -import {LocationFixture} from 'sentry-fixture/locationFixture'; import {LogFixture} from 'sentry-fixture/log'; import {OrganizationFixture} from 'sentry-fixture/organization'; import {ProjectFixture} from 'sentry-fixture/project'; @@ -14,16 +13,11 @@ import { import PageFiltersStore from 'sentry/stores/pageFiltersStore'; import {LogsAnalyticsPageSource} from 'sentry/utils/analytics/logsAnalyticsEvent'; -import {useLocation} from 'sentry/utils/useLocation'; import {LogsPageDataProvider} from 'sentry/views/explore/contexts/logs/logsPageData'; import * as logsPageParams from 'sentry/views/explore/contexts/logs/logsPageParams'; import {LogsPageParamsProvider} from 'sentry/views/explore/contexts/logs/logsPageParams'; import {AutorefreshToggle} from 'sentry/views/explore/logs/logsAutoRefresh'; import {OurLogKnownFieldKey} from 'sentry/views/explore/logs/types'; -import {OrganizationContext} from 'sentry/views/organizationContext'; - -jest.mock('sentry/utils/useLocation'); -const mockedUsedLocation = jest.mocked(useLocation); describe('LogsAutoRefresh', () => { const setAutoRefresh = jest.fn(); @@ -33,6 +27,17 @@ describe('LogsAutoRefresh', () => { const projects = [ProjectFixture()]; + const initialRouterConfig = { + location: { + pathname: `/organizations/${organization.slug}/explore/logs/`, + query: { + // Toggle is disabled if sort is not a timestamp. + 'logs.sort_bys': '-timestamp', + }, + }, + route: '/organizations/:orgId/explore/logs/', + }; + const mockLogsData = [ LogFixture({ [OurLogKnownFieldKey.ORGANIZATION_ID]: Number(organization.id), @@ -45,15 +50,6 @@ describe('LogsAutoRefresh', () => { MockApiClient.clearMockResponses(); cleanup(); - // Toggle is disabled if sort is not a timestamp. - mockedUsedLocation.mockReturnValue( - LocationFixture({ - query: { - 'logs.sort_bys': '-timestamp', - }, - }) - ); - // Init PageFiltersStore to make pageFiltersReady true (otherwise logs query won't fire) PageFiltersStore.init(); PageFiltersStore.onInitializeUrlState( @@ -82,15 +78,15 @@ describe('LogsAutoRefresh', () => { cleanup(); }); - const renderWithProviders = (children: React.ReactNode) => { + const renderWithProviders = ( + children: React.ReactNode, + options: Parameters[1] + ) => { return render( - - - {children} - - + + {children} + , + options ); }; @@ -103,7 +99,7 @@ describe('LogsAutoRefresh', () => { it('renders correctly with time-based sort', () => { const mockApi = mockApiCall(); - renderWithProviders(); + renderWithProviders(, {initialRouterConfig, organization}); const toggleLabel = screen.getByText('Auto-refresh'); expect(toggleLabel).toBeInTheDocument(); @@ -116,7 +112,7 @@ describe('LogsAutoRefresh', () => { it('calls setAutoRefresh when toggled', async () => { const mockApi = mockApiCall(); - renderWithProviders(); + renderWithProviders(, {initialRouterConfig, organization}); const toggleSwitch = screen.getByRole('checkbox', {name: 'Auto-refresh'}); @@ -130,7 +126,7 @@ describe('LogsAutoRefresh', () => { const mockApi = mockApiCall(); jest.spyOn(logsPageParams, 'useLogsAutoRefresh').mockReturnValue(true); - renderWithProviders(); + renderWithProviders(, {initialRouterConfig, organization}); const toggleSwitch = screen.getByRole('checkbox', {name: 'Auto-refresh'}); expect(toggleSwitch).toBeChecked(); diff --git a/static/app/views/explore/logs/logsTab.spec.tsx b/static/app/views/explore/logs/logsTab.spec.tsx index 61901829bef279..7216ffde208df7 100644 --- a/static/app/views/explore/logs/logsTab.spec.tsx +++ b/static/app/views/explore/logs/logsTab.spec.tsx @@ -1,12 +1,9 @@ -import {LocationFixture} from 'sentry-fixture/locationFixture'; - import {initializeOrg} from 'sentry-test/initializeOrg'; import {render, screen} from 'sentry-test/reactTestingLibrary'; import PageFiltersStore from 'sentry/stores/pageFiltersStore'; import ProjectsStore from 'sentry/stores/projectsStore'; import {LogsAnalyticsPageSource} from 'sentry/utils/analytics/logsAnalyticsEvent'; -import {useLocation} from 'sentry/utils/useLocation'; import {LogsPageDataProvider} from 'sentry/views/explore/contexts/logs/logsPageData'; import { LOGS_FIELDS_KEY, @@ -19,10 +16,6 @@ import {AlwaysPresentLogFields} from 'sentry/views/explore/logs/constants'; import {LogsTabContent} from 'sentry/views/explore/logs/logsTab'; import {TraceItemDataset} from 'sentry/views/explore/types'; import type {PickableDays} from 'sentry/views/explore/utils'; -import {OrganizationContext} from 'sentry/views/organizationContext'; - -jest.mock('sentry/utils/useLocation'); -const mockUseLocation = jest.mocked(useLocation); const datePageFilterProps: PickableDays = { defaultPeriod: '7d' as const, @@ -47,18 +40,29 @@ describe('LogsTabContent', function () { function ProviderWrapper({children}: {children: React.ReactNode}) { return ( - - - - {children} - - - + + + {children} + + ); } + const initialRouterConfig = { + location: { + pathname: `/organizations/${organization.slug}/explore/logs/`, + query: { + start: '2025-04-10T14%3A37%3A55', + end: '2025-04-10T20%3A04%3A51', + project: project.id, + [LOGS_FIELDS_KEY]: ['message', 'sentry.message.parameters.0'], + [LOGS_SORT_BYS_KEY]: ['sentry.message.parameters.0'], + [LOGS_QUERY_KEY]: 'severity:error', + }, + }, + route: '/organizations/:orgId/explore/logs/', + }; + beforeEach(function () { MockApiClient.clearMockResponses(); @@ -79,16 +83,6 @@ describe('LogsTabContent', function () { new Set() ); - mockUseLocation.mockReturnValue( - LocationFixture({ - pathname: `/organizations/${organization.slug}/explore/logs/?end=2025-04-10T20%3A04%3A51&project=${project.id}&start=2025-04-10T14%3A37%3A55`, - query: { - [LOGS_FIELDS_KEY]: ['message', 'sentry.message.parameters.0'], - [LOGS_SORT_BYS_KEY]: ['sentry.message.parameters.0'], - [LOGS_QUERY_KEY]: 'severity:error', - }, - }) - ); eventTableMock = MockApiClient.addMockResponse({ url: `/organizations/${organization.slug}/events/`, method: 'GET', @@ -185,7 +179,8 @@ describe('LogsTabContent', function () { render( - + , + {initialRouterConfig, organization} ); expect(eventTableMock).toHaveBeenCalledWith( diff --git a/static/app/views/explore/logs/tables/logsAggregateTable.spec.tsx b/static/app/views/explore/logs/tables/logsAggregateTable.spec.tsx index 6ff0622f2479c8..4d2be66c8a04a2 100644 --- a/static/app/views/explore/logs/tables/logsAggregateTable.spec.tsx +++ b/static/app/views/explore/logs/tables/logsAggregateTable.spec.tsx @@ -1,16 +1,9 @@ -import React from 'react'; -import {ThemeProvider} from '@emotion/react'; -import {LocationFixture} from 'sentry-fixture/locationFixture'; - import {initializeOrg} from 'sentry-test/initializeOrg'; -import {makeTestQueryClient} from 'sentry-test/queryClient'; import {render, screen, within} from 'sentry-test/reactTestingLibrary'; import PageFiltersStore from 'sentry/stores/pageFiltersStore'; import ProjectsStore from 'sentry/stores/projectsStore'; import {LogsAnalyticsPageSource} from 'sentry/utils/analytics/logsAnalyticsEvent'; -import {QueryClientProvider} from 'sentry/utils/queryClient'; -import {useLocation} from 'sentry/utils/useLocation'; import { LOGS_AGGREGATE_FN_KEY, LOGS_AGGREGATE_PARAM_KEY, @@ -21,39 +14,23 @@ import { } from 'sentry/views/explore/contexts/logs/logsPageParams'; import {LOGS_AGGREGATE_SORT_BYS_KEY} from 'sentry/views/explore/contexts/logs/sortBys'; import * as useLogsQueryModule from 'sentry/views/explore/logs/useLogsQuery'; -import {OrganizationContext} from 'sentry/views/organizationContext'; import {LogsAggregateTable} from './logsAggregateTable'; jest.mock('sentry/views/explore/logs/useLogsQuery'); -jest.mock('sentry/utils/useLocation'); -const mockUseLocation = jest.mocked(useLocation); - -const queryClient = makeTestQueryClient(); - describe('LogsAggregateTable', () => { const {organization, project} = initializeOrg({ organization: { features: ['ourlogs-enabled'], }, }); - function createWrapper() { - return function Wrapper({children}: {children?: React.ReactNode}) { - return ( - - - - - {children} - - - - - ); - }; + function LogsAggregateTableWithParamsProvider() { + return ( + + + + ); } ProjectsStore.loadInitialData([project]); @@ -72,22 +49,26 @@ describe('LogsAggregateTable', () => { }, new Set() ); + const initialRouterConfig = { + location: { + pathname: `/organizations/${organization.slug}/explore/logs/`, + query: { + project: project.id, + start: '2025-04-10T14%3A37%3A55', + end: '2025-04-10T20%3A04%3A51', + [LOGS_AGGREGATE_SORT_BYS_KEY]: '-p99(severity_number)', + [LOGS_QUERY_KEY]: 'test', + [LOGS_GROUP_BY_KEY]: 'message.template', + [LOGS_AGGREGATE_FN_KEY]: 'p99', + [LOGS_AGGREGATE_PARAM_KEY]: 'severity_number', + [LOGS_FIELDS_KEY]: ['timestamp', 'message'], + }, + }, + route: '/organizations/:orgId/explore/logs/', + }; beforeEach(function () { MockApiClient.clearMockResponses(); - mockUseLocation.mockReturnValue( - LocationFixture({ - pathname: `/organizations/${organization.slug}/explore/logs/?end=2025-04-10T20%3A04%3A51&project=${project.id}&start=2025-04-10T14%3A37%3A55`, - query: { - [LOGS_AGGREGATE_SORT_BYS_KEY]: '-p99(severity_number)', - [LOGS_QUERY_KEY]: 'test', - [LOGS_GROUP_BY_KEY]: 'message.template', - [LOGS_AGGREGATE_FN_KEY]: 'p99', - [LOGS_AGGREGATE_PARAM_KEY]: 'severity_number', - [LOGS_FIELDS_KEY]: ['timestamp', 'message'], - }, - }) - ); }); it('renders loading state', () => { @@ -97,7 +78,7 @@ describe('LogsAggregateTable', () => { data: null, pageLinks: undefined, }); - render(, {wrapper: createWrapper()}); + render(, {initialRouterConfig}); expect(screen.getByLabelText('Aggregates')).toBeInTheDocument(); }); @@ -108,7 +89,7 @@ describe('LogsAggregateTable', () => { data: null, pageLinks: undefined, }); - render(, {wrapper: createWrapper()}); + render(, {initialRouterConfig}); expect(screen.getByTestId('error-indicator')).toBeInTheDocument(); }); @@ -136,7 +117,7 @@ describe('LogsAggregateTable', () => { }, pageLinks: undefined, }); - render(, {wrapper: createWrapper()}); + render(, {initialRouterConfig}); const rows = screen.getAllByTestId('grid-body-row'); expect(rows).toHaveLength(3); const expected = [ diff --git a/static/app/views/explore/logs/tables/logsTableRow.spec.tsx b/static/app/views/explore/logs/tables/logsTableRow.spec.tsx index aa43afc9a6ae1e..ba00110e463546 100644 --- a/static/app/views/explore/logs/tables/logsTableRow.spec.tsx +++ b/static/app/views/explore/logs/tables/logsTableRow.spec.tsx @@ -1,4 +1,3 @@ -import {LocationFixture} from 'sentry-fixture/locationFixture'; import {LogFixture} from 'sentry-fixture/log'; import {OrganizationFixture} from 'sentry-fixture/organization'; import {ProjectFixture} from 'sentry-fixture/project'; @@ -8,16 +7,12 @@ import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary'; import useStacktraceLink from 'sentry/components/events/interfaces/frame/useStacktraceLink'; import ProjectsStore from 'sentry/stores/projectsStore'; import {LogsAnalyticsPageSource} from 'sentry/utils/analytics/logsAnalyticsEvent'; -import {useLocation} from 'sentry/utils/useLocation'; import {LogsPageParamsProvider} from 'sentry/views/explore/contexts/logs/logsPageParams'; import type {TraceItemResponseAttribute} from 'sentry/views/explore/hooks/useTraceItemDetails'; import {LogRowContent} from 'sentry/views/explore/logs/tables/logsTableRow'; import {OurLogKnownFieldKey} from 'sentry/views/explore/logs/types'; import {useExploreLogsTableRow} from 'sentry/views/explore/logs/useLogsQuery'; -jest.mock('sentry/utils/useLocation'); -const mockedUsedLocation = jest.mocked(useLocation); - jest.mock('sentry/views/explore/logs/useLogsQuery', () => ({ useExploreLogsTableRow: jest.fn(), usePrefetchLogTableRowOnHover: jest.fn().mockReturnValue({}), @@ -87,10 +82,6 @@ describe('logsTableRow', () => { }) as TraceItemResponseAttribute ); - beforeEach(function () { - mockedUsedLocation.mockReturnValue(LocationFixture()); - }); - it('renders row details', async () => { jest.spyOn(console, 'error').mockImplementation(() => {});