fix: prevent error when there are no results for a given filter (#1257)

This commit is contained in:
German
2023-12-19 13:00:14 -03:00
committed by GitHub
parent b3a06fd07e
commit 06d79ce16d
3 changed files with 30 additions and 5 deletions

View File

@@ -23,7 +23,7 @@ export const CoursewareSearchResultsFilter = ({ intl }) => {
const lastSearch = useModel('contentSearchResults', courseId);
const { filter: filterKeyword, setFilter } = useCoursewareSearchParams();
if (!lastSearch || !lastSearch?.results?.length) { return null; }
if (!lastSearch) { return null; }
const { results: data = [] } = lastSearch;
@@ -40,7 +40,7 @@ export const CoursewareSearchResultsFilter = ({ intl }) => {
const filters = useMemo(() => Object.keys(allowedFilterKeys).map((key) => ({
key,
label: intl.formatMessage(messages[`filter:${key}`]),
count: results[key].length,
count: results[key]?.length || 0,
})), [results]);
const activeKey = allowedFilterKeys[filterKeyword] ? filterKeyword : allFilterKey;

View File

@@ -54,11 +54,14 @@ describe('CoursewareSearchResultsFilter', () => {
describe('</CoursewareSearchResultsFilter />', () => {
beforeEach(() => {
useCoursewareSearchParams.mockReturnValue(coursewareSearch);
});
afterEach(() => {
jest.clearAllMocks();
});
it('should render', async () => {
useCoursewareSearchParams.mockReturnValue(coursewareSearch);
it('should render without errors', async () => {
useModel.mockReturnValue(searchResultsFactory());
await renderComponent();
@@ -71,5 +74,27 @@ describe('CoursewareSearchResultsFilter', () => {
expect(screen.queryByTestId('courseware-search-results-tabs-other')).toBeInTheDocument();
});
});
describe('when there are not results', () => {
it('should render without errors', async () => {
useModel.mockReturnValue(searchResultsFactory('blah', {
results: [],
filters: [],
total: 0,
maxScore: null,
ms: 5,
}));
await renderComponent();
await waitFor(() => {
expect(screen.queryByTestId('courseware-search-results-tabs-all')).toBeInTheDocument();
expect(screen.queryByTestId('courseware-search-results-tabs-text')).toBeInTheDocument();
expect(screen.queryByTestId('courseware-search-results-tabs-video')).toBeInTheDocument();
expect(screen.queryByTestId('courseware-search-results-tabs-sequence')).toBeInTheDocument();
expect(screen.queryByTestId('courseware-search-results-tabs-other')).toBeInTheDocument();
});
});
});
});
});

View File

@@ -15,7 +15,7 @@ const iconTypeMapping = {
const defaultIcon = Article;
const CoursewareSearchResults = ({ results }) => {
const CoursewareSearchResults = ({ results = [] }) => {
if (!results?.length) {
return <CoursewareSearchEmpty />;
}