Skip to content

Commit 2e3ed08

Browse files
authored
fix: Updated a11y on Courseware Search results. (#1620)
1 parent d76d4db commit 2e3ed08

File tree

2 files changed

+32
-28
lines changed

2 files changed

+32
-28
lines changed

src/course-home/courseware-search/CoursewareSearch.jsx

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -141,32 +141,32 @@ const CoursewareSearch = ({ ...sectionProps }) => {
141141
</Button>
142142
</div>
143143
</div>
144-
145-
{status === 'loading' ? (
146-
<div className="courseware-search__spinner" data-testid="courseware-search-spinner">
147-
<Spinner animation="border" variant="light" screenReaderText={formatMessage(messages.loading)} />
148-
</div>
149-
) : null}
150-
{status === 'error' && (
151-
<Alert className="mt-4" variant="danger" data-testid="courseware-search-error">
152-
{formatMessage(messages.searchResultsError)}
153-
</Alert>
154-
)}
155-
{status === 'results' ? (
156-
<>
157-
{total > 0 ? (
158-
<div
159-
className="courseware-search__results-summary"
160-
aria-live="polite"
161-
aria-relevant="all"
162-
aria-atomic="true"
163-
data-testid="courseware-search-summary"
164-
>{formatMessage(messages.searchResultsLabel, { total, keyword: lastSearchKeyword })}
165-
</div>
166-
) : null}
167-
<CoursewareSearchResultsFilterContainer />
168-
</>
169-
) : null}
144+
<div className="courseware-search__results" aria-live="polite" data-testid="courseware-search-results">
145+
{status === 'loading' ? (
146+
<div className="courseware-search__spinner" data-testid="courseware-search-spinner">
147+
<Spinner animation="border" variant="light" screenReaderText={formatMessage(messages.loading)} />
148+
</div>
149+
) : null}
150+
{status === 'error' && (
151+
<Alert className="mt-4" variant="danger" data-testid="courseware-search-error">
152+
{formatMessage(messages.searchResultsError)}
153+
</Alert>
154+
)}
155+
{status === 'results' ? (
156+
<>
157+
{total > 0 ? (
158+
<div
159+
className="courseware-search__results-summary"
160+
aria-relevant="all"
161+
aria-atomic="true"
162+
data-testid="courseware-search-summary"
163+
>{formatMessage(messages.searchResultsLabel, { total, keyword: lastSearchKeyword })}
164+
</div>
165+
) : null}
166+
<CoursewareSearchResultsFilterContainer />
167+
</>
168+
) : null}
169+
</div>
170170
</div>
171171
</div>
172172
</dialog>

src/course-home/courseware-search/CoursewareSearch.test.jsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
screen,
1010
waitFor,
1111
fireEvent,
12+
within,
1213
} from '../../setupTest';
1314
import { CoursewareSearch } from './index';
1415
import { useElementBoundingBox, useLockScroll, useCoursewareSearchParams } from './hooks';
@@ -243,14 +244,17 @@ describe('CoursewareSearch', () => {
243244
expect(screen.queryByTestId('courseware-search-summary')).not.toBeInTheDocument();
244245
});
245246

246-
it('should show a summary for the results', () => {
247+
it('should show a summary for the results within a container with aria-live="polite"', () => {
247248
mockModels({
248249
searchKeyword: 'fubar',
249250
total: 1,
250251
});
251252
renderComponent();
252253

253-
expect(screen.queryByTestId('courseware-search-summary').textContent).toBe('Results for "fubar":');
254+
const results = screen.queryByTestId('courseware-search-results');
255+
256+
expect(results).toHaveAttribute('aria-live', 'polite');
257+
expect(within(results).queryByTestId('courseware-search-summary').textContent).toBe('Results for "fubar":');
254258
});
255259
});
256260

0 commit comments

Comments
 (0)