Files
sentinel/static/app/components/stream/processingIssueHint.spec.tsx
2024-02-15 17:01:50 +00:00

125 lines
3.2 KiB
TypeScript

import {RouterContextFixture} from 'sentry-fixture/routerContextFixture';
import {render, screen} from 'sentry-test/reactTestingLibrary';
import ProcessingIssueHint from 'sentry/components/stream/processingIssueHint';
describe('ProcessingIssueHint', function () {
let issue, container;
const orgId = 'test-org';
const projectId = 'test-project';
beforeEach(() => {
issue = {
hasIssues: false,
hasMoreResolveableIssues: false,
issuesProcessing: 0,
lastSeen: '2019-01-16T15:38:38Z',
numIssues: 0,
resolveableIssues: 0,
signedLink: null,
};
});
function renderComponent(issueData, showProject = false) {
const result = render(
<ProcessingIssueHint
issue={issueData}
orgId={orgId}
projectId={projectId}
showProject={showProject}
/>,
{context: RouterContextFixture()}
);
container = result.container;
}
describe('numIssues state', function () {
beforeEach(() => {
issue.numIssues = 9;
});
it('displays a button', function () {
renderComponent(issue);
const button = screen.getByRole('button');
expect(button).toBeInTheDocument();
expect(button).toHaveAttribute(
'href',
`/settings/${orgId}/projects/${projectId}/processing-issues/`
);
});
it('displays an icon', function () {
renderComponent(issue);
const icon = container.querySelector('svg');
expect(icon).toBeInTheDocument();
});
it('displays text', function () {
renderComponent(issue);
expect(screen.getByText(/issues blocking/)).toBeInTheDocument();
});
});
describe('issuesProcessing state', function () {
beforeEach(() => {
issue.issuesProcessing = 9;
});
it('does not display a button', function () {
renderComponent(issue);
expect(screen.queryByRole('button')).not.toBeInTheDocument();
});
it('displays an icon', function () {
renderComponent(issue);
const icon = container.querySelector('svg');
expect(icon).toBeInTheDocument();
});
it('displays text', function () {
renderComponent(issue);
expect(screen.getByText(/Reprocessing/)).toBeInTheDocument();
});
});
describe('resolvableIssues state', function () {
beforeEach(() => {
issue.resolveableIssues = 9;
});
it('displays a button', function () {
renderComponent(issue);
const button = screen.getByRole('button');
expect(button).toBeInTheDocument();
expect(button).toHaveAttribute(
'href',
`/settings/${orgId}/projects/${projectId}/processing-issues/`
);
});
it('displays an icon', function () {
renderComponent(issue);
const icon = container.querySelector('svg');
expect(icon).toBeInTheDocument();
});
it('displays text', function () {
renderComponent(issue);
expect(
screen.getByText('There are 9 events pending reprocessing.')
).toBeInTheDocument();
});
});
describe('showProject state', function () {
beforeEach(() => {
issue.numIssues = 9;
});
it('displays the project slug', function () {
renderComponent(issue, true);
expect(screen.getByText(projectId)).toBeInTheDocument();
});
});
});