11/* eslint-disable jsx-a11y/anchor-is-valid */
2- import { render } from '@testing-library/react' ;
32import React from 'react' ;
3+ import { render } from '@testing-library/react' ;
4+ import { CardType } from '@util/types/NHSUKTypes' ;
45import Card from '../Card' ;
56
67describe ( 'Card' , ( ) => {
@@ -50,7 +51,9 @@ describe('Card', () => {
5051 </ Card > ,
5152 ) ;
5253
53- expect ( container . querySelector ( 'div.nhsuk-card.nhsuk-card.nhsuk-card--clickable' ) ) . toBeTruthy ( ) ;
54+ const cardEl = container . querySelector ( '.nhsuk-card' ) ;
55+
56+ expect ( cardEl ) . toHaveClass ( 'nhsuk-card--clickable' ) ;
5457 } ) ;
5558
5659 it ( 'adds feature classes to all elements' , ( ) => {
@@ -63,17 +66,12 @@ describe('Card', () => {
6366 </ Card > ,
6467 ) ;
6568
66- expect ( container . querySelector ( 'div.nhsuk-card.nhsuk-card.nhsuk-card--feature' ) ) . toBeTruthy ( ) ;
67- expect (
68- container . querySelector (
69- 'div.nhsuk-card__content.nhsuk-card__content.nhsuk-card__content--feature' ,
70- ) ,
71- ) . toBeTruthy ( ) ;
72- expect (
73- container . querySelector (
74- 'h2.nhsuk-card__heading.nhsuk-card__heading.nhsuk-card__heading--feature' ,
75- ) ,
76- ) . toBeTruthy ( ) ;
69+ const cardEl = container . querySelector ( '.nhsuk-card' ) ;
70+ const cardHeadingEl = cardEl ?. querySelector ( '.nhsuk-card__heading' ) ;
71+
72+ expect ( cardHeadingEl ) . toHaveClass ( 'nhsuk-card__heading' ) ;
73+ expect ( cardHeadingEl ) . toHaveClass ( 'nhsuk-card__heading--feature' ) ;
74+ expect ( cardHeadingEl ?. tagName ) . toBe ( 'H2' ) ;
7775 } ) ;
7876
7977 it ( 'adds primary class to card contents' , ( ) => {
@@ -86,11 +84,10 @@ describe('Card', () => {
8684 </ Card > ,
8785 ) ;
8886
89- expect (
90- container . querySelector (
91- 'div.nhsuk-card__content.nhsuk-card__content.nhsuk-card__content--primary' ,
92- ) ,
93- ) . toBeTruthy ( ) ;
87+ const cardEl = container . querySelector ( '.nhsuk-card' ) ;
88+ const cardContentsEl = cardEl ?. querySelector ( '.nhsuk-card__content' ) ;
89+
90+ expect ( cardContentsEl ) . toHaveClass ( 'nhsuk-card__content--primary' ) ;
9491 } ) ;
9592
9693 it ( 'adds secondary classes to card and contents' , ( ) => {
@@ -103,148 +100,77 @@ describe('Card', () => {
103100 </ Card > ,
104101 ) ;
105102
106- expect ( container . querySelector ( 'div .nhsuk-card.nhsuk-card.nhsuk-card--secondary' ) ) . toBeTruthy ( ) ;
107- expect (
108- container . querySelector (
109- 'div. nhsuk-card__content.nhsuk-card__content.nhsuk-card__content--secondary' ,
110- ) ,
111- ) . toBeTruthy ( ) ;
103+ const cardEl = container . querySelector ( '.nhsuk-card' ) ;
104+ const cardContentsEl = cardEl ?. querySelector ( '.nhsuk-card__content' ) ;
105+
106+ expect ( cardEl ) . toHaveClass ( ' nhsuk-card' ) ;
107+ expect ( cardEl ) . toHaveClass ( 'nhsuk-card--secondary' ) ;
108+ expect ( cardContentsEl ) . toHaveClass ( 'nhsuk-card__content--secondary' ) ;
112109 } ) ;
113110
114111 describe ( 'Care card variant' , ( ) => {
115- describe ( 'non-urgent' , ( ) => {
112+ describe . each < {
113+ heading : string ;
114+ cardType : CardType ;
115+ visuallyHidden : string ;
116+ } > ( [
117+ {
118+ heading : 'Non urgent heading (blue)' ,
119+ cardType : 'non-urgent' ,
120+ visuallyHidden : 'Non-urgent advice' ,
121+ } ,
122+ {
123+ heading : 'Urgent heading (red)' ,
124+ cardType : 'urgent' ,
125+ visuallyHidden : 'Urgent advice' ,
126+ } ,
127+ {
128+ heading : 'Emergency heading (red and black)' ,
129+ cardType : 'emergency' ,
130+ visuallyHidden : 'Immediate action required' ,
131+ } ,
132+ ] ) ( '$cardType' , ( { heading, cardType, visuallyHidden } ) => {
116133 it ( 'matches the snapshot' , ( ) => {
117134 const { container } = render (
118- < Card cardType = "non-urgent" >
119- < Card . Heading > Non urgent heading</ Card . Heading >
135+ < Card cardType = { cardType } >
136+ < Card . Heading > { heading } </ Card . Heading >
120137 </ Card > ,
121138 ) ;
122139
123140 expect ( container ) . toMatchSnapshot ( ) ;
124141 } ) ;
125- it ( 'adds classes to card' , ( ) => {
126- const { container } = render (
127- < Card cardType = "non-urgent" >
128- < Card . Heading > Non urgent heading</ Card . Heading >
129- </ Card > ,
130- ) ;
131-
132- expect ( container . querySelector ( 'div.nhsuk-card.nhsuk-card.nhsuk-card--care' ) ) . toBeTruthy ( ) ;
133- expect (
134- container . querySelector ( 'div.nhsuk-card.nhsuk-card.nhsuk-card--care--non-urgent' ) ,
135- ) . toBeTruthy ( ) ;
136- } ) ;
137142
138- it ( 'renders the heading with the expected hidden text' , ( ) => {
139- const { container } = render (
140- < Card cardType = "non-urgent" >
141- < Card . Heading > Non urgent heading</ Card . Heading >
142- </ Card > ,
143- ) ;
144-
145- const headingContainer = container . querySelector ( '.nhsuk-card--care__heading-container' ) ;
146-
147- expect ( headingContainer ?. querySelector ( '.nhsuk-u-visually-hidden' ) ?. textContent ) . toEqual (
148- 'Non-urgent advice: ' ,
149- ) ;
150- } ) ;
151- } ) ;
152-
153- describe ( 'urgent' , ( ) => {
154- it ( 'matches the snapshot' , ( ) => {
155- const { container } = render (
156- < Card cardType = "urgent" >
157- < Card . Heading > Urgent heading</ Card . Heading >
158- </ Card > ,
159- ) ;
160-
161- expect ( container ) . toMatchSnapshot ( ) ;
162- } ) ;
163143 it ( 'adds classes to card' , ( ) => {
164144 const { container } = render (
165- < Card cardType = "urgent" >
166- < Card . Heading > Urgent heading</ Card . Heading >
145+ < Card cardType = { cardType } >
146+ < Card . Heading > { heading } </ Card . Heading >
167147 </ Card > ,
168148 ) ;
169149
170- expect ( container . querySelector ( 'div.nhsuk-card.nhsuk-card.nhsuk-card--care' ) ) . toBeTruthy ( ) ;
171- expect (
172- container . querySelector ( 'div.nhsuk-card.nhsuk-card.nhsuk-card--care--urgent' ) ,
173- ) . toBeTruthy ( ) ;
174- } ) ;
150+ const cardEl = container . querySelector ( '.nhsuk-card' ) ;
175151
176- it ( 'renders the heading with the expected hidden text' , ( ) => {
177- const { container } = render (
178- < Card cardType = "urgent" >
179- < Card . Heading > Urgent heading</ Card . Heading >
180- </ Card > ,
181- ) ;
182-
183- const headingContainer = container . querySelector ( '.nhsuk-card--care__heading-container' ) ;
184-
185- expect ( headingContainer ?. querySelector ( '.nhsuk-u-visually-hidden' ) ?. textContent ) . toEqual (
186- 'Urgent advice: ' ,
187- ) ;
188- } ) ;
189- } ) ;
190-
191- describe ( 'emergency' , ( ) => {
192- it ( 'matches the snapshot' , ( ) => {
193- const { container } = render (
194- < Card cardType = "emergency" >
195- < Card . Heading > Emergency heading</ Card . Heading >
196- </ Card > ,
197- ) ;
198-
199- expect ( container ) . toMatchSnapshot ( ) ;
200- } ) ;
201- it ( 'adds classes to card' , ( ) => {
202- const { container } = render (
203- < Card cardType = "emergency" >
204- < Card . Heading > Emergency heading</ Card . Heading >
205- </ Card > ,
206- ) ;
207-
208- expect ( container . querySelector ( 'div.nhsuk-card.nhsuk-card.nhsuk-card--care' ) ) . toBeTruthy ( ) ;
209- expect (
210- container . querySelector ( 'div.nhsuk-card.nhsuk-card.nhsuk-card--care--emergency' ) ,
211- ) . toBeTruthy ( ) ;
152+ expect ( cardEl ) . toHaveClass ( 'nhsuk-card--care' ) ;
153+ expect ( cardEl ) . toHaveClass ( `nhsuk-card--care--${ cardType } ` ) ;
212154 } ) ;
213155
214156 it ( 'renders the heading with the expected hidden text' , ( ) => {
215157 const { container } = render (
216- < Card cardType = "emergency" >
217- < Card . Heading > Emergency heading</ Card . Heading >
218- </ Card > ,
219- ) ;
220-
221- const headingContainer = container . querySelector ( '.nhsuk-card--care__heading-container' ) ;
222-
223- expect ( headingContainer ?. querySelector ( '.nhsuk-u-visually-hidden' ) ?. textContent ) . toEqual (
224- 'Immediate action required: ' ,
225- ) ;
226- } ) ;
227- } ) ;
228-
229- describe ( 'hidden text' , ( ) => {
230- it ( 'renders without hidden text' , ( ) => {
231- const { container } = render (
232- < Card cardType = "urgent" >
233- < Card . Heading visuallyHiddenText = { false } > Heading</ Card . Heading >
158+ < Card cardType = { cardType } >
159+ < Card . Heading > { heading } </ Card . Heading >
234160 </ Card > ,
235161 ) ;
236162
237- expect ( container . querySelector ( '.nhsuk-u-visually-hidden ' ) ) . toBeFalsy ( ) ;
163+ expect ( container . querySelector ( 'h2 ' ) ) . toHaveAccessibleName ( ` ${ visuallyHidden } : ${ heading } ` ) ;
238164 } ) ;
239165
240- it ( 'renders with hidden text ' , ( ) => {
166+ it ( 'renders the heading with custom heading level ' , ( ) => {
241167 const { container } = render (
242- < Card cardType = "urgent" >
243- < Card . Heading visuallyHiddenText = "Custom" > Heading </ Card . Heading >
168+ < Card cardType = { cardType } >
169+ < Card . Heading headingLevel = "h3" > { heading } </ Card . Heading >
244170 </ Card > ,
245171 ) ;
246172
247- expect ( container . querySelector ( '.nhsuk-u-visually-hidden' ) ?. textContent ) . toEqual ( 'Custom' ) ;
173+ expect ( container . querySelector ( 'h3' ) ) . toHaveAccessibleName ( ` ${ visuallyHidden } : ${ heading } ` ) ;
248174 } ) ;
249175 } ) ;
250176 } ) ;
0 commit comments