@kiwicom/smart-faq
Version:
106 lines (90 loc) • 2.96 kB
JavaScript
// @flow
import * as React from 'react';
import { render, mount } from 'enzyme';
import { Provider as LogProvider } from '@kiwicom/nitro/lib/services/log/context';
import ScreenAdditionalFeedback from '../ScreenAdditionalFeedback';
import { events } from '../../../../const/events';
import screenList from '../screenList';
jest.mock('../../../../SmartFAQ/mutations/CreateComment');
const articleIds = {
valid: 23,
feedbackLimitReached: 3039,
invalid: -59,
};
const changeScreen = jest.fn();
const log = jest.fn();
const COMMENT = 'The article was amazing my dudes';
const SubmitFeedback = id => {
const wrapper = mount(
<LogProvider value={{ log }}>
<ScreenAdditionalFeedback
changeScreen={changeScreen}
articleId={id}
commentType="OTHER"
setCommentType={jest.fn()}
/>
,
</LogProvider>,
);
wrapper.find('ScreenAdditionalFeedback').setState({ comment: COMMENT });
wrapper.find('form').simulate('submit');
};
describe('ScreenAdditionalFeedback', () => {
it('should match snapshot', () => {
const wrapper = render(
<ScreenAdditionalFeedback
changeScreen={jest.fn()}
articleId={articleIds.valid}
commentType="OTHER"
setCommentType={jest.fn()}
/>,
);
expect(wrapper).toMatchSnapshot();
});
it('[On Closing Screen] should go back to the voting screen', () => {
const wrapper = mount(
<ScreenAdditionalFeedback
changeScreen={changeScreen}
articleId={articleIds.valid}
commentType="OTHER"
setCommentType={jest.fn()}
/>,
);
wrapper
.find('.close-icon')
.first()
.simulate('click');
expect(changeScreen).toHaveBeenCalledWith(screenList.VOTING);
});
it('[On Succesful Feedback] should log the feedback submit and redirect to thank you screen', done => {
SubmitFeedback(articleIds.valid);
setImmediate(() => {
expect(changeScreen).toHaveBeenCalledWith(screenList.THANK_YOU);
expect(log).toHaveBeenCalledWith(events.FAQ_FEEDBACK_SUBMIT, {
comment: 'OTHER',
commentText: COMMENT,
});
done();
});
});
it('[On Comment Limit reached] should log the comment limit reached and redirect to the warning screen', done => {
SubmitFeedback(articleIds.feedbackLimitReached);
setImmediate(() => {
expect(changeScreen).toHaveBeenCalledWith(
screenList.COMMENT_LIMIT_REACHED,
);
expect(log).toHaveBeenLastCalledWith(events.COMMENT_LIMIT_REACHED, {});
done();
});
});
it('[On Error] should log the error and redirect to the error screen', done => {
SubmitFeedback(articleIds.invalid);
setImmediate(() => {
expect(changeScreen).toHaveBeenCalledWith(screenList.ERROR);
expect(log).toHaveBeenLastCalledWith(events.FAQ_FEEDBACK_ERROR, {
error: Error('ArticleId should be a positive number'),
});
done();
});
});
});