// import React from 'react';
import {
IStateProps,
ICommentsSectionState,
AllProps,
CommentsSection,
// mapDispatchToProps,
} from 'CommentSection';
// import { shallowWithIntl } from 'tests/utils/intl';
// import { setFeatures } from 'features';
describe('CommentSection', () => {
const commentProps: IStateProps = {
comments: [],
users: [],
threadId: '',
// courseInfo: {
// courseCode: 'courseCode',
// courseNumber: 'courseNumber',
// termCode: 'termCode',
// title: '',
// subject: 'subject',
// termStart: '',
// totalEnrollment: '',
// enrollmentRatio: 0,
// registrationStatus: '',
// snapshots: [],
// sections: [],
// },
};
const state: ICommentsSectionState = {
users: [],
comments: [],
focused: false,
newNotificaitonValue: '',
userSearch: false,
};
let props;
beforeAll(() => {
props = { ...commentProps } as unknown as AllProps;
props.setThreadId = jest.fn();
props.createComment = jest.fn();
props.fetchUsers = jest.fn();
// setFeatures('COMMENTS', { USER_TAGGING: true, SEND_NOTIFICATIONS: true });
});
afterAll(() => {
// setFeatures('COMMENTS', { USER_TAGGING: false, SEND_NOTIFICATIONS: false });
});
it('should render the component', () => {
// const renderedEl = shallowWithIntl();
// expect(renderedEl).toBeDefined();
});
it('should create comment after hitting enter', () => {
const firstEvent = {
keyCode: 13, // enter
};
const comments = new CommentsSection(props);
comments['checkEnter'](firstEvent);
expect(props.createComment)
.toHaveBeenCalledWith({
comment_text: '',
thread_id: 'courseCode_termCode',
source_url: '/',
thread_name: 'subject courseNumber',
},
);
});
it('should grab users after typing @', () => {
const secondEvent = {
target: {
value: '@',
},
};
const comments = new CommentsSection(props);
comments.state = state;
comments.setState = jest.fn();
comments['updateComment'](secondEvent);
expect(comments.setState)
.toHaveBeenCalledWith({
newNotificaitonValue: '@',
},
);
expect(props.fetchUsers)
.toHaveBeenCalled();
});
it('should update message value on change', () => {
const firstEvent = {
target: {
value: 'something',
},
};
const comments = new CommentsSection(props);
comments.setState = jest.fn();
comments['updateComment'](firstEvent);
expect(comments.setState)
.toHaveBeenCalledWith({
newNotificaitonValue: 'something',
},
);
});
it('should handleBlur', () => {
const comments = new CommentsSection(props);
comments.setState = jest.fn();
comments.handleBlur();
expect(comments.setState).toBeCalledWith({ focused: false });
});
it('should scrollDown', () => {
document.getElementById = jest.fn().mockReturnValue({ offsetTop: 1 });
// shallowWithIntl(
);
const comments = new CommentsSection(props);
comments.setState = jest.fn();
comments.scrollDown();
expect(comments.setState).toBeCalledWith({ focused: true });
});
it('should map dispatch actions to properties', () => {
// const dispatch = jest.fn();
// const dispatchProps = mapDispatchToProps(dispatch);
// expect(dispatchProps.createComment).toBeDefined();
// expect(dispatchProps.setThreadId).toBeDefined();
// expect(dispatchProps.fetchUsers).toBeDefined();
// expect(dispatchProps.fetchComments).toBeDefined();
// dispatchProps.createComment({});
// dispatchProps.setThreadId({});
// dispatchProps.fetchUsers();
// dispatchProps.fetchComments({ });
// expect(dispatch).toHaveBeenCalledTimes(4);
});
});