import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
import GuideAnchor from 'sentry/components/assistant/guideAnchor';
import ConfigStore from 'sentry/stores/configStore';
import GuideStore from 'sentry/stores/guideStore';
describe('GuideAnchor', function () {
const serverGuide = [
{
guide: 'issue',
seen: false,
},
];
beforeEach(function () {
ConfigStore.config = {
user: {
isSuperuser: false,
dateJoined: new Date(2020, 0, 1),
},
};
});
it('renders, advances, and finishes', async function () {
render(
);
GuideStore.fetchSucceeded(serverGuide);
expect(await screen.findByText('Identify Your Issues')).toBeInTheDocument();
// XXX(epurkhiser): Skip pointer event checks due to a bug with how Popper
// renders the hovercard with pointer-events: none. See [0]
//
// [0]: https://github.com/testing-library/user-event/issues/639
//
// NOTE(epurkhiser): We may be able to remove the skipPointerEventsCheck
// when we're on popper >= 1.
userEvent.click(screen.getByLabelText('Next'), undefined, {
skipPointerEventsCheck: true,
});
expect(await screen.findByText('Narrow Down Suspects')).toBeInTheDocument();
expect(screen.queryByText('Identify Your Issues')).not.toBeInTheDocument();
// Clicking on the button in the last step should finish the guide.
const finishMock = MockApiClient.addMockResponse({
method: 'PUT',
url: '/assistant/',
});
userEvent.click(screen.getByLabelText('Enough Already'), undefined, {
skipPointerEventsCheck: true,
});
expect(finishMock).toHaveBeenCalledWith(
'/assistant/',
expect.objectContaining({
method: 'PUT',
data: {
guide: 'issue',
status: 'viewed',
},
})
);
});
it('dismisses', async function () {
render(
);
GuideStore.fetchSucceeded(serverGuide);
expect(await screen.findByText('Identify Your Issues')).toBeInTheDocument();
const dismissMock = MockApiClient.addMockResponse({
method: 'PUT',
url: '/assistant/',
});
userEvent.click(screen.getByLabelText('Dismiss'), undefined, {
skipPointerEventsCheck: true,
});
expect(dismissMock).toHaveBeenCalledWith(
'/assistant/',
expect.objectContaining({
method: 'PUT',
data: {
guide: 'issue',
status: 'dismissed',
},
})
);
expect(screen.queryByText('Identify Your Issues')).not.toBeInTheDocument();
});
it('renders no container when inactive', function () {
render(
);
expect(screen.queryByTestId('guide-container')).not.toBeInTheDocument();
expect(screen.getByTestId('child-div')).toBeInTheDocument();
});
it('renders children when disabled', function () {
render(
);
expect(screen.queryByTestId('guide-container')).not.toBeInTheDocument();
expect(screen.getByTestId('child-div')).toBeInTheDocument();
});
it('if forceHide is true, do not render guide', async function () {
render(
);
GuideStore.fetchSucceeded(serverGuide);
expect(await screen.findByText('Identify Your Issues')).toBeInTheDocument();
GuideStore.setForceHide(true);
expect(screen.queryByText('Identify Your Issues')).not.toBeInTheDocument();
GuideStore.setForceHide(false);
expect(await screen.findByText('Identify Your Issues')).toBeInTheDocument();
});
});