Add tests for PollFooter

jest-ts-fix
Justin 2022-06-16 09:20:33 -04:00
rodzic 06888b8ebc
commit a66814d11d
3 zmienionych plików z 106 dodań i 3 usunięć

Wyświetl plik

@ -0,0 +1,103 @@
import React from 'react';
import { normalizePoll } from 'soapbox/normalizers/poll';
import { render, screen } from '../../../jest/test-helpers';
import PollFooter from '../poll-footer';
let poll = normalizePoll({
options: [{ title: 'Apples', votes_count: 0 }],
emojis: [],
expired: false,
expires_at: '2020-03-24T19:33:06.000Z',
multiple: true,
voters_count: 0,
votes_count: 0,
own_votes: null,
voted: false,
});
describe('<PollFooter />', () => {
describe('with "showResults" enabled', () => {
it('renders the Refresh button', () => {
render(<PollFooter poll={poll} showResults selected={{}} />);
expect(screen.getByTestId('poll-footer')).toHaveTextContent('Refresh');
});
it('does not render the Vote button', () => {
render(<PollFooter poll={poll} showResults selected={{}} />);
expect(screen.queryAllByTestId('button')).toHaveLength(0);
});
describe('when the Poll has not expired', () => {
beforeEach(() => {
poll = normalizePoll({
...poll.toJS(),
expired: false,
});
});
it('renders time remaining', () => {
render(<PollFooter poll={poll} showResults selected={{}} />);
expect(screen.getByTestId('poll-expiration')).toHaveTextContent('Moments remaining');
});
});
describe('when the Poll has expired', () => {
beforeEach(() => {
poll = normalizePoll({
...poll.toJS(),
expired: true,
});
});
it('renders closed', () => {
render(<PollFooter poll={poll} showResults selected={{}} />);
expect(screen.getByTestId('poll-expiration')).toHaveTextContent('Closed');
});
});
});
describe('with "showResults" disabled', () => {
it('does not render the Refresh button', () => {
render(<PollFooter poll={poll} showResults={false} selected={{}} />);
expect(screen.getByTestId('poll-footer')).not.toHaveTextContent('Refresh');
});
describe('when the Poll is multiple', () => {
beforeEach(() => {
poll = normalizePoll({
...poll.toJS(),
multiple: true,
});
});
it('renders the Vote button', () => {
render(<PollFooter poll={poll} showResults={false} selected={{}} />);
expect(screen.getByTestId('button')).toHaveTextContent('Vote');
});
});
describe('when the Poll is not multiple', () => {
beforeEach(() => {
poll = normalizePoll({
...poll.toJS(),
multiple: false,
});
});
it('does not render the Vote button', () => {
render(<PollFooter poll={poll} showResults={false} selected={{}} />);
expect(screen.queryAllByTestId('button')).toHaveLength(0);
});
});
});
});

Wyświetl plik

@ -37,7 +37,7 @@ const PollFooter: React.FC<IPollFooter> = ({ poll, showResults, selected }): JSX
<RelativeTimestamp weight='medium' timestamp={poll.expires_at} futureDate />;
return (
<Stack space={4}>
<Stack space={4} data-testid='poll-footer'>
{(!showResults && poll?.multiple) && (
<Button onClick={handleVote} theme='primary' block>
<FormattedMessage id='poll.vote' defaultMessage='Vote' />
@ -68,7 +68,7 @@ const PollFooter: React.FC<IPollFooter> = ({ poll, showResults, selected }): JSX
{poll.expires_at && (
<>
<Text theme='muted'>&middot;</Text>
<Text weight='medium' theme='muted'>{timeRemaining}</Text>
<Text weight='medium' theme='muted' data-testid='poll-expiration'>{timeRemaining}</Text>
</>
)}
</HStack>

Wyświetl plik

@ -61,7 +61,7 @@ const Poll: React.FC<IPoll> = ({ id, status }): JSX.Element | null => {
return (
// eslint-disable-next-line jsx-a11y/no-static-element-interactions
<div onClick={e => e.stopPropagation()}>
<Stack space={4} className={classNames('mt-4', { voted: poll.voted })}>
<Stack space={4} className={classNames('mt-4')}>
<Stack space={2}>
{poll.options.map((option, i) => (
<PollOption