docbrown/app/javascript/chat/__tests__/view.test.jsx
2019-04-16 17:28:19 -04:00

139 lines
3.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { h } from 'preact';
import render from 'preact-render-to-json';
import { deep } from 'preact-render-spy';
import View from '../view';
let exited = false;
let accepted = false;
let declined = false;
const onViewExitFake = () => {
exited = true;
};
const handleInvitationAcceptFake = () => {
accepted = true;
};
const handleInvitationDeclineFake = () => {
declined = true;
};
const sampleChannel = [
{
channel_name: 'name',
description: 'some description',
membership_id: '12345',
},
];
const getView = channel => (
<View
channels={channel}
onViewExit={onViewExitFake}
onAcceptInvitation={handleInvitationAcceptFake}
onDeclineInvitation={handleInvitationDeclineFake}
/>
);
describe('<View />', () => {
it('should render and test snapshot (no channel)', () => {
const tree = render(getView([]));
expect(tree).toMatchSnapshot();
});
it('should render and test snapshot (with channel)', () => {
const tree = deep(getView(sampleChannel), { depth: 2 });
expect(tree).toMatchSnapshot();
});
it('should have the proper attributes and text values (no channel provided)', () => {
const context = deep(getView([]), { depth: 2 });
expect(context.find('.chatNonChatView').exists()).toEqual(true);
expect(context.find('.container').exists()).toEqual(true);
expect(context.find('.chatNonChatView_exitbutton').exists()).toEqual(true);
expect(context.find('.chatNonChatView_exitbutton').text()).toEqual('×');
expect(context.find('h1').exists()).toEqual(true);
expect(context.find('h1').text()).toEqual('Channel Invitations 🤗');
expect(context.find('.chatNonChatView_contentblock').exists()).toEqual(
false,
);
});
it('should have the proper attributes and text values (with channel provided)', () => {
const context = deep(getView(sampleChannel), { depth: 2 });
expect(context.find('.chatNonChatView_contentblock').exists()).toEqual(
true,
);
expect(context.find('h2').exists()).toEqual(true);
expect(context.find('h2').text()).toEqual('name');
expect(context.find('em').exists()).toEqual(true);
expect(context.find('em').text()).toEqual('some description');
expect(context.find('.cta').exists()).toEqual(true);
expect(
context
.find('.cta')
.at(0)
.attr('data-content'),
).toEqual('12345'); // accept button
expect(
context
.find('.cta')
.at(0)
.text(),
).toEqual('Accept'); // accept button
expect(
context
.find('.cta')
.at(1)
.attr('data-content'),
).toEqual('12345'); // decline button
expect(
context
.find('.cta')
.at(1)
.text(),
).toEqual('Decline'); // accept button
});
it('should trigger exit', () => {
const context = deep(getView([]), { depth: 2 });
context.find('.chatNonChatView_exitbutton').simulate('click');
expect(exited).toEqual(true);
exited = false;
});
it('should trigger accept', () => {
const context = deep(getView(sampleChannel), { depth: 2 });
context
.find('.cta')
.at(0)
.simulate('click'); // click accept button
expect(exited).toEqual(false);
expect(accepted).toEqual(true);
expect(declined).toEqual(false);
accepted = false;
});
it('should trigger decline', () => {
const context = deep(getView(sampleChannel), { depth: 2 });
context
.find('.cta')
.at(1)
.simulate('click'); // click decline button
expect(exited).toEqual(false);
expect(accepted).toEqual(false);
expect(declined).toEqual(true);
declined = false;
});
});