import * as Sentry from '@sentry/react';
import {uuid4} from '@sentry/utils';
import * as qs from 'query-string';
import {OrganizationFixture} from 'sentry-fixture/organization';
import {ProjectFixture} from 'sentry-fixture/project';
import {render, waitFor} from 'sentry-test/reactTestingLibrary';
import ProjectsStore from 'sentry/stores/projectsStore';
import ContinuosProfileProvider from './continuousProfileProvider';
describe('ContinuousProfileProvider', () => {
beforeEach(() => {
window.location.search = '';
MockApiClient.clearMockResponses();
});
it('fetches chunk', async () => {
const project = ProjectFixture();
const organization = OrganizationFixture();
ProjectsStore.loadInitialData([project]);
window.location.search = qs.stringify({
start: new Date().toISOString(),
end: new Date().toISOString(),
profilerId: uuid4(),
});
const captureMessage = jest.spyOn(Sentry, 'captureMessage');
const chunkRequest = MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/profiling/chunks/`,
body: {},
});
render({null}, {
router: {
params: {orgId: organization.slug, projectId: project.slug},
},
organization,
});
await waitFor(() => expect(chunkRequest).toHaveBeenCalled());
expect(captureMessage).not.toHaveBeenCalled();
});
it('requires start, end and profilerId', async () => {
for (const [start, end, profilerId] of [
[undefined, new Date().toISOString(), uuid4()],
[new Date().toISOString(), undefined, uuid4()],
[new Date().toISOString(), new Date().toISOString(), undefined],
]) {
window.location.search = qs.stringify({start, end, profilerId});
const captureMessage = jest.spyOn(Sentry, 'captureMessage');
render({null}, {
router: {
params: {orgId: OrganizationFixture().slug, projectId: ProjectFixture().slug},
},
organization: OrganizationFixture(),
});
await waitFor(() =>
expect(captureMessage).toHaveBeenCalledWith(
expect.stringContaining(
'Failed to fetch continuous profile - invalid query parameters.'
)
)
);
}
});
});