import React from 'react' import { render, screen, within } from '@testing-library/react' import { ColumnedContentSection, ColumnedContentSectionProps, ColumnedSectionContentMediaKind, } from './index' const DEFAULT_TOP_LINK_HREF = 'http://link' const DEFAULT_TOP_LINK_LABEL = 'top link label' const columnContent: any = { title: 'title', content: 'content', } const defaultProps: ColumnedContentSectionProps = { title: 'section title', columnContentList: [columnContent, columnContent, columnContent], } describe('ColumnedContentSection', () => { it('should render top link', () => { const props = { ...defaultProps, topLinkHref: DEFAULT_TOP_LINK_HREF, topLinkLabel: DEFAULT_TOP_LINK_LABEL, } render() const link = screen.getByRole('link', { name: DEFAULT_TOP_LINK_LABEL }) expect(link).toBeInTheDocument() expect(link).toHaveAttribute('href', DEFAULT_TOP_LINK_HREF) }) it('should not render top link', () => { render() expect(screen.queryByText('top link label')).not.toBeInTheDocument() }) it('should render title', () => { render() expect(screen.getByRole('heading', { level: 2, name: 'section title' })).toBeInTheDocument() }) it('should not render title', () => { render() expect( screen.queryByRole('heading', { level: 2, name: 'section title' }), ).not.toBeInTheDocument() }) it('should render 3 basic columns', () => { render() const columns = screen.getAllByRole('listitem') expect(columns).toHaveLength(3) columns.forEach(column => { expect(column).toHaveTextContent('title') expect(column).toHaveTextContent('content') }) }) it('should render columns with images of various media kinds', () => { const column1 = { ...columnContent, media: { kind: ColumnedSectionContentMediaKind.ELEMENT, element: , }, } const column2 = { ...columnContent, media: { kind: ColumnedSectionContentMediaKind.COVER, pictureUrl: 'http://pic2', href: 'http://link2', }, } const column3 = { ...columnContent, media: { kind: ColumnedSectionContentMediaKind.FIT, pictureUrl: 'http://pic3', }, } const props = { ...defaultProps, columnContentList: [column1, column2, column3], } render() const images = screen.getAllByRole('img') expect(images).toHaveLength(3) expect(images[0]).toHaveAttribute('role', 'img') expect(images[1]).toHaveAttribute('src', 'http://pic2') expect(images[2]).toHaveAttribute('src', 'http://pic3') const columns = screen.getAllByRole('listitem') expect(within(columns[1]).getByRole('link')).toHaveAttribute('href', 'http://link2') }) })