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(() => {});