src/app/pages/LiveRadioPage/index.test.tsx

Summary

Maintainability
A
0 mins
Test Coverage
import React from 'react';
import { BrowserRouter } from 'react-router-dom';
import { RequestContextProvider } from '#contexts/RequestContext';
import * as analyticsUtils from '#lib/analyticsUtils';
import { ToggleContextProvider } from '#contexts/ToggleContext';
import { MEDIA_PAGE } from '#app/routes/utils/pageTypes';
import { Services } from '#app/models/types/global';
import { LiveRadioBlock } from '#app/models/types/media';
import { render } from '../../components/react-testing-library-with-providers';
import { ServiceContextProvider } from '../../contexts/ServiceContext';
import LiveRadioPage from './LiveRadioPage';
import afriquePageData from './fixtureData/afrique.json';
import indonesianPageData from './fixtureData/indonesia.json';
import gahuzaPageData from './fixtureData/gahuza.json';
import { LiveRadioPageData } from './types';

type Props = {
  pageData: LiveRadioPageData;
  service: Services;
  lang: string;
};

const Page = ({ pageData, service, lang }: Props) => (
  <BrowserRouter>
    <ToggleContextProvider>
      <ServiceContextProvider service={service} pageLang={lang}>
        <RequestContextProvider
          bbcOrigin="https://www.test.bbc.com"
          pageType={MEDIA_PAGE}
          pathname="/pathname"
          service={service}
          statusCode={200}
        >
          <LiveRadioPage pageData={pageData} />
        </RequestContextProvider>
      </ServiceContextProvider>
    </ToggleContextProvider>
  </BrowserRouter>
);

(analyticsUtils.getAtUserId as jest.Mock) = jest.fn();

jest.mock('../../components/ChartbeatAnalytics', () => {
  const ChartbeatAnalytics = () => <div>chartbeat</div>;
  return ChartbeatAnalytics;
});

describe('Radio Page Main', () => {
  it('should match snapshot for Canonical', () => {
    const { container } = render(
      <Page
        pageData={afriquePageData as unknown as LiveRadioPageData}
        service="afrique"
        lang="fr"
      />,
    );

    expect(container).toMatchSnapshot();
  });

  it('should show the title for the Live Radio page', () => {
    const { getByText } = render(
      <Page
        pageData={afriquePageData as unknown as LiveRadioPageData}
        service="afrique"
        lang="fr"
      />,
    );

    expect(getByText('BBC Afrique Radio')).toBeInTheDocument();
  });

  it('should show the summary for the Live Radio page', () => {
    const { getByText } = render(
      <Page
        pageData={afriquePageData as unknown as LiveRadioPageData}
        service="afrique"
        lang="fr"
      />,
    );

    expect(getByText('Infos, musique et sports')).toBeInTheDocument();
  });

  it('should show the audio player on canonical', () => {
    const mockMediaBlock = [
      {
        type: 'liveRadio',
        model: [
          {
            text: 'BBC Hausa Rediyo',
            type: 'heading',
          },
          {
            text: "Labaran duniya da sharhi da kuma bayanai kan al'amuran yau da kullum daga sashin Hausa na BBC.",
            type: 'paragraph',
          },
          {
            id: 'liveradio',
            subType: 'primary',
            format: 'audio',
            externalId: 'bbc_hausa_radio',
            duration: 'PT0S',
            caption: '',
            embedding: false,
            available: true,
            live: true,
            type: 'version',
          },
        ],
      },
    ] as LiveRadioBlock[];

    render(
      <Page
        pageData={
          {
            ...afriquePageData,
            mediaBlock: mockMediaBlock,
          } as unknown as LiveRadioPageData
        }
        service="afrique"
        lang="fr"
      />,
    );
    const audioPlayerElement = document.querySelector(
      '[data-e2e="media-player"]',
    );

    expect(audioPlayerElement).toBeInTheDocument();
  });

  it('should show the radio schedule for the Live Radio page on canonical', () => {
    const { getByText } = render(
      <Page
        pageData={indonesianPageData as unknown as LiveRadioPageData}
        service="indonesia"
        lang="id"
      />,
    );
    const radioScheduleTitle = getByText('Siaran radio');
    const scheduleWrapper = document.querySelector(
      '[data-e2e="radio-schedule"]',
    );

    expect(scheduleWrapper).toBeInTheDocument();
    expect(radioScheduleTitle).toBeInTheDocument();
  });

  it('should not show the radio schedule for services without a schedule', async () => {
    const { container } = render(
      <Page
        pageData={gahuzaPageData as unknown as LiveRadioPageData}
        service="gahuza"
        lang="rw"
      />,
    );

    const scheduleWrapper = container.querySelector(
      '[data-e2e="radio-schedule"]',
    );

    expect(scheduleWrapper).not.toBeInTheDocument();
  });
});