import { h } from 'preact';
import render from 'preact-render-to-json';
import { deep } from 'preact-render-spy';
import {
CommentSubscription,
COMMENT_SUBSCRIPTION_TYPE,
} from '../CommentSubscription';
describe('', () => {
it('should render as a plain subscribe button if not currently subscribed', () => {
const tree = render();
expect(tree).toMatchSnapshot();
});
it('should render as subscribed with the given subscription type', () => {
const tree = render(
,
);
expect(tree).toMatchSnapshot();
});
it('should subscribe when the subscribe button is pressed', () => {
const onSubscribe = jest.fn();
const wrapper = deep();
wrapper.find('ButtonGroup').find('Button').first().simulate('click');
expect(onSubscribe).toHaveBeenCalled();
});
it('should unsubscribe from all comments when the Unsubscribe button is pressed', () => {
const onSubscribe = jest.fn();
const onUnsubscribe = jest.fn();
const wrapper = deep(
,
);
// Need to subscribe first so that we can unsubscribe.
wrapper.find('ButtonGroup').find('Button').first().simulate('click'); // Subscribe button
wrapper.find('ButtonGroup').find('Button').first().simulate('click'); // Unsubscribe button
expect(onUnsubscribe).toHaveBeenCalled();
});
it('should show subscription options once subscribed if the cog button is clicked', () => {
const onSubscribe = jest.fn();
const onUnsubscribe = jest.fn();
const wrapper = deep(
,
);
wrapper.find('ButtonGroup').find('Button').last().simulate('click'); // Cog icon button
const dropdown = wrapper.find('Dropdown');
expect(dropdown.attr('className')).toEqual(
'inline-block z-30 right-4 left-4 s:right-0 s:left-auto w-full',
);
// 3 options for comment subscription
expect(dropdown.find('RadioButton').length).toEqual(3);
// The done button
expect(dropdown.find('Button').length).toEqual(1);
});
it('should not have full width for options when positionType is anything but "relative"', () => {
const onSubscribe = jest.fn();
const onUnsubscribe = jest.fn();
const wrapper = deep(
,
);
wrapper.find('ButtonGroup').find('Button').last().simulate('click'); // Cog icon button to open subscription options panel
expect(wrapper.find('Dropdown').attr('className')).toEqual(
'inline-block z-30 right-4 left-4 s:right-0 s:left-auto',
);
});
it('should hide subscription options when the Done button is clicked', () => {
const onSubscribe = jest.fn();
const onUnsubscribe = jest.fn();
const wrapper = deep(
,
);
wrapper.find('ButtonGroup').find('Button').first().simulate('click'); // Subscribe button
wrapper.find('ButtonGroup').find('Button').last().simulate('click'); // Cog icon button to open subscription options panel
wrapper.find('ButtonGroup').find('Button').last().simulate('click'); // Cog icon button to close subscription options panel
const dropdown = wrapper.find('Dropdown');
expect(dropdown.attr('className')).toBeNull();
});
it('should update comment subscription when the done button is clicked in the subscription options panel', () => {
const onSubscribe = jest.fn();
const onUnsubscribe = jest.fn();
const wrapper = deep(
,
);
wrapper.find('ButtonGroup').find('button').last().simulate('click'); // Subscribe button
expect(wrapper.state('subscriptionType')).toEqual(
COMMENT_SUBSCRIPTION_TYPE.TOP,
);
wrapper.find('ButtonGroup').find('Button').last().simulate('click'); // Cog icon button
// Select the author comments only.
const authorCommentsOnlyRadioButton = wrapper
.find('Dropdown')
.find('RadioButton')
.last();
expect(authorCommentsOnlyRadioButton.attr('value')).toEqual(
COMMENT_SUBSCRIPTION_TYPE.AUTHOR,
);
authorCommentsOnlyRadioButton.simulate('click', {
target: { value: COMMENT_SUBSCRIPTION_TYPE.AUTHOR },
});
const done = wrapper.find('Dropdown').find('Button');
done.simulate('click');
expect(wrapper.state('subscriptionType')).toEqual(
COMMENT_SUBSCRIPTION_TYPE.AUTHOR,
);
// a second time by clicking on the Done button.
expect(onSubscribe).toHaveBeenCalled();
});
});