import {initializeOrg} from 'sentry-test/initializeOrg';
import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
import {Organization, Project} from 'sentry/types';
import {DynamicSamplingBiasType} from 'sentry/types/sampling';
import DynamicSampling from '.';
const ORG_FEATURES = [
'server-side-sampling',
'dynamic-sampling-deprecated',
'dynamic-sampling',
];
const dynamicSamplingBiases = [
{id: DynamicSamplingBiasType.BOOST_LATEST_RELEASES, active: true},
{id: DynamicSamplingBiasType.BOOST_ENVIRONMENTS, active: true},
{id: DynamicSamplingBiasType.IGNORE_HEALTH_CHECKS, active: true},
];
function renderMockRequests(
organizationSlug: Organization['slug'],
projectSlug: Project['slug']
) {
const projectDetails = MockApiClient.addMockResponse({
url: `/projects/${organizationSlug}/${projectSlug}/`,
method: 'PUT',
body: {},
});
return {projectDetails};
}
describe('Dynamic Sampling', function () {
it('renders default ui', function () {
const {project, organization} = initializeOrg({
...initializeOrg(),
projects: [
TestStubs.Project({
dynamicSamplingBiases,
}),
],
organization: {
...initializeOrg().organization,
features: ORG_FEATURES,
},
});
renderMockRequests(organization.slug, project.slug);
render(, {organization});
expect(screen.getByRole('heading', {name: /Dynamic Sampling/})).toBeInTheDocument();
expect(screen.getAllByRole('checkbox')).toHaveLength(3);
expect(screen.queryByTestId('more-information')).not.toBeInTheDocument();
const prioritizenewReleases = screen.getByRole('checkbox', {
name: 'Prioritize new releases',
});
expect(prioritizenewReleases).toBeEnabled();
expect(prioritizenewReleases).toBeChecked();
const prioritizeDevEnvironments = screen.getByRole('checkbox', {
name: 'Prioritize dev environments',
});
expect(prioritizeDevEnvironments).toBeEnabled();
expect(prioritizeDevEnvironments).toBeChecked();
const ignoreHealthChecks = screen.getByRole('checkbox', {
name: 'Ignore health checks',
});
expect(ignoreHealthChecks).toBeEnabled();
expect(ignoreHealthChecks).toBeChecked();
});
it('renders disabled default UI, when user has not permission to edit', function () {
const {project, organization} = initializeOrg({
...initializeOrg(),
projects: [
TestStubs.Project({
dynamicSamplingBiases,
}),
],
organization: {
...initializeOrg().organization,
features: ORG_FEATURES,
access: [],
},
});
renderMockRequests(organization.slug, project.slug);
render(, {organization});
expect(
screen.getByText(
/These settings can only be edited by users with the organization owner, manager, or admin role/
)
).toBeInTheDocument();
expect(screen.getAllByTestId('more-information')).toHaveLength(3);
const prioritizenewReleases = screen.getByRole('checkbox', {
name: 'Prioritize new releases',
});
expect(prioritizenewReleases).toBeDisabled();
expect(prioritizenewReleases).toBeChecked();
const prioritizeDevEnvironments = screen.getByRole('checkbox', {
name: 'Prioritize dev environments',
});
expect(prioritizeDevEnvironments).toBeDisabled();
expect(prioritizeDevEnvironments).toBeChecked();
const ignoreHealthChecks = screen.getByRole('checkbox', {
name: 'Ignore health checks',
});
expect(ignoreHealthChecks).toBeDisabled();
expect(ignoreHealthChecks).toBeChecked();
});
it('user can toggle option', function () {
const {project, organization} = initializeOrg({
...initializeOrg(),
projects: [
TestStubs.Project({
dynamicSamplingBiases,
}),
],
organization: {
...initializeOrg().organization,
features: ORG_FEATURES,
},
});
const mockRequests = renderMockRequests(organization.slug, project.slug);
render(, {organization});
userEvent.click(screen.getByRole('checkbox', {name: 'Prioritize new releases'}));
expect(mockRequests.projectDetails).toHaveBeenCalledWith(
`/projects/${organization.slug}/${project.slug}/`,
expect.objectContaining({
data: {
dynamicSamplingBiases: [
{id: DynamicSamplingBiasType.BOOST_LATEST_RELEASES, active: false},
{id: DynamicSamplingBiasType.BOOST_ENVIRONMENTS, active: true},
{id: DynamicSamplingBiasType.IGNORE_HEALTH_CHECKS, active: true},
],
},
})
);
});
});