import {Location} from 'history';
import {GlobalSelection} from 'sentry-fixture/globalSelection';
import {Organization} from 'sentry-fixture/organization';
import {render, screen} from 'sentry-test/reactTestingLibrary';
import OrganizationStore from 'sentry/stores/organizationStore';
import ProfileSummaryPage from 'sentry/views/profiling/profileSummary';
Object.defineProperty(window, 'matchMedia', {
writable: true,
value: jest.fn().mockImplementation(query => ({
matches: false,
media: query,
onchange: null,
addListener: jest.fn(), // Deprecated
removeListener: jest.fn(), // Deprecated
addEventListener: jest.fn(),
removeEventListener: jest.fn(),
dispatchEvent: jest.fn(),
})),
});
// Replace the webgl renderer with a dom renderer for tests
jest.mock('sentry/utils/profiling/renderers/flamegraphRendererWebGL', () => {
const {
FlamegraphRendererDOM,
} = require('sentry/utils/profiling/renderers/flamegraphRendererDOM');
return {
FlamegraphRendererWebGL: FlamegraphRendererDOM,
};
});
window.ResizeObserver =
window.ResizeObserver ||
jest.fn().mockImplementation(() => ({
disconnect: jest.fn(),
observe: jest.fn(),
unobserve: jest.fn(),
}));
describe('ProfileSummaryPage', () => {
it('renders legacy page', async () => {
const organization = Organization({
features: [],
projects: [TestStubs.Project()],
});
OrganizationStore.onUpdate(organization);
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/projects/`,
body: [TestStubs.Project()],
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/profiling/filters/`,
body: [],
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/events-stats/`,
body: [],
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/profiling/flamegraph/`,
body: [],
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/events/`,
body: [],
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/profiling/function-trends/`,
body: [],
});
render(
,
{
organization,
context: TestStubs.routerContext(),
}
);
expect(await screen.findByTestId(/profile-summary-legacy/i)).toBeInTheDocument();
});
it('renders new page', async () => {
const organization = Organization({
features: [],
projects: [TestStubs.Project()],
});
OrganizationStore.onUpdate(organization);
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/projects/`,
body: [TestStubs.Project()],
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/profiling/filters/`,
body: [],
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/events-stats/`,
body: {},
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/profiling/flamegraph/`,
body: [],
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/events/`,
body: {
data: [{'last_seen()': new Date()}],
},
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/profiling/function-trends/`,
body: [],
});
render(
,
{
organization: Organization({
features: ['profiling-summary-redesign'],
}),
context: TestStubs.routerContext(),
}
);
expect(await screen.findByTestId(/profile-summary-redesign/i)).toBeInTheDocument();
});
});