// import React from 'react';
import
  {
    ICommentItemProps,
    CommentItem,
    // OwnerTools,
    // NonOwnerTools,
    // mapDispatchToProps,
    // DeletedView,
  }
from 'CommentSection/components/CommentItem';
// import { shallowWithIntl } from 'tests/utils/intl';
// import { setFeatures } from 'features';

describe('CommentSection', () => {
  const commentProps: ICommentItemProps = {
    comment:  {
      id: '1',
      message: 'hi',
      createdDate: '1/1/2018',
      author: 'Matt',
      authorId: 'test',
      isOwner: true,
    },
    divider: true,
    key: '1',
  };

  let props;

  beforeAll(() => {
    props = { ...commentProps } as unknown as ICommentItemProps;
    props.deleteComment = jest.fn();
    // setFeatures('COMMENTS', { USER_TAGGING: true, SEND_NOTIFICATIONS: true });
  });

  afterAll(() => {
    // setFeatures('COMMENTS', { USER_TAGGING: false, SEND_NOTIFICATIONS: false });
  });

  // it('should render the comment', () => {
  //   const renderedEl = shallowWithIntl(<CommentItem {...props} />);
  //   expect(renderedEl).toBeDefined();
  // });
  // it('should render owner comment Tools', () => {
  //   const renderedEl = shallowWithIntl(
  //     (
  //       <OwnerTools
  //         handleOnDelete={jest.fn()}
  //         intl={jest.fn()}
  //       />
  //     ),
  //   );
  //   expect(renderedEl).toBeDefined();
  // });
  // it('should render nonowner comment Tools', () => {
  //   const renderedEl = shallowWithIntl(
  //     (
  //       <NonOwnerTools
  //         handleOnReply={jest.fn()}
  //         intl={jest.fn()}
  //       />
  //     ),
  //   );
  //   expect(renderedEl).toBeDefined();
  // });
  // it('should render delete state', () => {
  //   const renderedEl = shallowWithIntl(
  //     (
  //       <DeletedView
  //         undoDelete={jest.fn()}
  //         wasDeleted={false}
  //         intl={jest.fn()}
  //       />
  //     ),
  //   );
  //   expect(renderedEl).toBeDefined();
  // });
  it('hitting delete should start delete countdown', () => {
    const commentItem = new CommentItem(props);
    commentItem.setState = jest.fn();
    commentItem['onDelete']();
    expect(commentItem.setState).toBeCalledWith(
      { toBeDeleted: true, toBeDeletedComment: props.comment },
    );
  });
  it('hitting undo delete should stop delete countdown', () => {
    const commentItem = new CommentItem(props);
    commentItem.setState = jest.fn();
    commentItem['undoDelete']();
    expect(commentItem.setState).toBeCalledWith({ toBeDeleted: false });
  });
  it('hitting reply should call reply prop', () => {
    const commentItem = new CommentItem(props);
    props.replyComment = jest.fn();
    commentItem['onReply']();
    expect(props.replyComment).toBeCalled();
  });
  // it('should map dispatch actions to properties', () => {
  //   const dispatch = jest.fn();

  //   const dispatchProps = mapDispatchToProps(dispatch);

  //   expect(dispatchProps.deleteComment).toBeDefined();
  //   expect(dispatchProps.replyComment).toBeDefined();

  //   dispatchProps.deleteComment({});
  //   dispatchProps.replyComment({});

  //   expect(dispatch).toHaveBeenCalledTimes(2);
  // });
});
