diff --git a/src/search-modal/SearchUI.test.jsx b/src/search-modal/SearchUI.test.jsx
index 89b68c20a2..9b89bb5073 100644
--- a/src/search-modal/SearchUI.test.jsx
+++ b/src/search-modal/SearchUI.test.jsx
@@ -13,6 +13,7 @@ import {
waitFor,
within,
getByLabelText as getByLabelTextIn,
+ screen,
} from '@testing-library/react';
import fetchMock from 'fetch-mock-jest';
@@ -150,30 +151,11 @@ describe('', () => {
// Now we should see the results:
expect(queryByText('Enter a keyword')).toBeNull();
// The result:
- expect(getByText('2 results found')).toBeInTheDocument();
+ expect(getByText('6 results found')).toBeInTheDocument();
expect(getByText(mockResultDisplayName)).toBeInTheDocument();
// Breadcrumbs showing where the result came from:
expect(getByText('TheCourse / Section 2 / Subsection 3 / The Little Unit That Could')).toBeInTheDocument();
- const resultItem = getByRole('button', { name: /The Little Unit That Could/ });
-
- // Clicking the "Open in new window" button should open the result in a new window:
- const { open } = window;
- window.open = jest.fn();
- fireEvent.click(within(resultItem).getByRole('button', { name: 'Open in new window' }));
- expect(window.open).toHaveBeenCalledWith(
- '/course/course-v1:edx+TestCourse+24/container/block-v1:edx+TestCourse+24+type@vertical+block@vertical_3_1'
- + '?show=block-v1%3Aedx%2BTestCourse%2B24%2Btype%40html%2Bblock%40test_html',
- '_blank',
- );
- window.open = open;
-
- // Clicking in the result should navigate to the result's URL:
- fireEvent.click(resultItem);
- expect(mockNavigate).toHaveBeenCalledWith(
- '/course/course-v1:edx+TestCourse+24/container/block-v1:edx+TestCourse+24+type@vertical+block@vertical_3_1'
- + '?show=block-v1%3Aedx%2BTestCourse%2B24%2Btype%40html%2Bblock%40test_html',
- );
});
it('defaults to searching "This Course" if used in a course', async () => {
@@ -196,12 +178,120 @@ describe('', () => {
// Now we should see the results:
expect(queryByText('Enter a keyword')).toBeNull();
// The result:
- expect(getByText('2 results found')).toBeInTheDocument();
+ expect(getByText('6 results found')).toBeInTheDocument();
expect(getByText(mockResultDisplayName)).toBeInTheDocument();
// Breadcrumbs showing where the result came from:
expect(getByText('TheCourse / Section 2 / Subsection 3 / The Little Unit That Could')).toBeInTheDocument();
});
+ describe('results', () => {
+ /** @type {import('@testing-library/react').RenderResult} */
+ let rendered;
+ beforeEach(() => {
+ rendered = render();
+ const { getByRole } = rendered;
+ fireEvent.change(getByRole('searchbox'), { target: { value: 'giraffe' } });
+ });
+
+ test('click section result navigates to the context', async () => {
+ const { findAllByRole } = rendered;
+
+ screen.logTestingPlaygroundURL();
+ const [resultItem] = await findAllByRole('button', { name: /Section 1/ });
+
+ // Clicking the "Open in new window" button should open the result in a new window:
+ const { open } = window;
+ window.open = jest.fn();
+ fireEvent.click(within(resultItem).getByRole('button', { name: 'Open in new window' }));
+ expect(window.open).toHaveBeenCalledWith(
+ '/course/course-v1:SampleTaxonomyOrg1+STC1+2023_1'
+ + '?show=block-v1%3ASampleTaxonomyOrg1%2BSTC1%2B2023_1%2Btype%40chapter%2Bblock%40c7077c8cafcf420dbc0b440bf27bad04',
+ '_blank',
+ );
+ window.open = open;
+
+ // Clicking in the result should navigate to the result's URL:
+ fireEvent.click(resultItem);
+ expect(mockNavigate).toHaveBeenCalledWith(
+ '/course/course-v1:SampleTaxonomyOrg1+STC1+2023_1'
+ + '?show=block-v1%3ASampleTaxonomyOrg1%2BSTC1%2B2023_1%2Btype%40chapter%2Bblock%40c7077c8cafcf420dbc0b440bf27bad04',
+ );
+ });
+
+ test('click subsection result navigates to the context', async () => {
+ const { findAllByRole } = rendered;
+
+ screen.logTestingPlaygroundURL();
+ const [resultItem] = await findAllByRole('button', { name: /Subsection 1.1/ });
+
+ // Clicking the "Open in new window" button should open the result in a new window:
+ const { open } = window;
+ window.open = jest.fn();
+ fireEvent.click(within(resultItem).getByRole('button', { name: 'Open in new window' }));
+ expect(window.open).toHaveBeenCalledWith(
+ '/course/course-v1:SampleTaxonomyOrg1+STC1+2023_1'
+ + '?show=block-v1%3ASampleTaxonomyOrg1%2BSTC1%2B2023_1%2Btype%40sequential%2Bblock%4092e3e9ca156c44fa8a735f0e9e7c854f',
+ '_blank',
+ );
+ window.open = open;
+
+ // Clicking in the result should navigate to the result's URL:
+ fireEvent.click(resultItem);
+ expect(mockNavigate).toHaveBeenCalledWith(
+ '/course/course-v1:SampleTaxonomyOrg1+STC1+2023_1'
+ + '?show=block-v1%3ASampleTaxonomyOrg1%2BSTC1%2B2023_1%2Btype%40sequential%2Bblock%4092e3e9ca156c44fa8a735f0e9e7c854f',
+ );
+ });
+
+ test('click unit result navigates to the context', async () => {
+ const { findAllByRole } = rendered;
+
+ screen.logTestingPlaygroundURL();
+ const [resultItem] = await findAllByRole('button', { name: /Unit 1.1.1/ });
+
+ // Clicking the "Open in new window" button should open the result in a new window:
+ const { open } = window;
+ window.open = jest.fn();
+ fireEvent.click(within(resultItem).getByRole('button', { name: 'Open in new window' }));
+ expect(window.open).toHaveBeenCalledWith(
+ '/course/course-v1:SampleTaxonomyOrg1+STC1+2023_1/container/block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@vertical+block@aaf8b8eb86b54281aeeab12499d2cb0b',
+ '_blank',
+ );
+ window.open = open;
+
+ // Clicking in the result should navigate to the result's URL:
+ fireEvent.click(resultItem);
+ expect(mockNavigate).toHaveBeenCalledWith(
+ '/course/course-v1:SampleTaxonomyOrg1+STC1+2023_1/container/block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@vertical+block@aaf8b8eb86b54281aeeab12499d2cb0b',
+ );
+ });
+
+ test('click unit component result navigates to the context', async () => {
+ const { findAllByRole } = rendered;
+
+ screen.logTestingPlaygroundURL();
+ const [resultItem] = await findAllByRole('button', { name: /Announcement/ });
+
+ // Clicking the "Open in new window" button should open the result in a new window:
+ const { open } = window;
+ window.open = jest.fn();
+ fireEvent.click(within(resultItem).getByRole('button', { name: 'Open in new window' }));
+ expect(window.open).toHaveBeenCalledWith(
+ '/course/course-v1:SampleTaxonomyOrg1+STC1+2023_1/container/block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@vertical+block@aaf8b8eb86b54281aeeab12499d2cb0b'
+ + '?show=block-v1%3ASampleTaxonomyOrg1%2BSTC1%2B2023_1%2Btype%40html%2Bblock%400b2d1c0722f742489602b6d8645205f4',
+ '_blank',
+ );
+ window.open = open;
+
+ // Clicking in the result should navigate to the result's URL:
+ fireEvent.click(resultItem);
+ expect(mockNavigate).toHaveBeenCalledWith(
+ '/course/course-v1:SampleTaxonomyOrg1+STC1+2023_1/container/block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@vertical+block@aaf8b8eb86b54281aeeab12499d2cb0b'
+ + '?show=block-v1%3ASampleTaxonomyOrg1%2BSTC1%2B2023_1%2Btype%40html%2Bblock%400b2d1c0722f742489602b6d8645205f4',
+ );
+ });
+ });
+
describe('filters', () => {
/** @type {import('@testing-library/react').RenderResult} */
let rendered;
@@ -231,7 +321,7 @@ describe('', () => {
return (requestedFilter?.length === 1); // the filter is: 'context_key = "course-v1:org+test+123"'
});
// Now we should see the results:
- expect(getByText('2 results found')).toBeInTheDocument();
+ expect(getByText('6 results found')).toBeInTheDocument();
expect(getByText(mockResultDisplayName)).toBeInTheDocument();
});
diff --git a/src/search-modal/__mocks__/search-result.json b/src/search-modal/__mocks__/search-result.json
index 5f6a675739..6a4f184d71 100644
--- a/src/search-modal/__mocks__/search-result.json
+++ b/src/search-modal/__mocks__/search-result.json
@@ -74,13 +74,201 @@
}
],
"type": "library_block"
+ },
+ {
+ "display_name": "Section 1",
+ "block_id": "c7077c8cafcf420dbc0b440bf27bad04",
+ "content": {},
+ "id": "block-v1sampletaxonomyorg1stc12023_1typechapterblockc7077c8cafcf420dbc0b440bf27bad04-2af9d1ac",
+ "type": "course_block",
+ "breadcrumbs": [
+ {
+ "display_name": "Sample Taxonomy Course"
+ }
+ ],
+ "usage_key": "block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@chapter+block@c7077c8cafcf420dbc0b440bf27bad04",
+ "block_type": "chapter",
+ "context_key": "course-v1:SampleTaxonomyOrg1+STC1+2023_1",
+ "org": "SampleTaxonomyOrg1",
+ "access_id": 6,
+ "_formatted": {
+ "display_name": "Section 1",
+ "block_id": "c7077c8cafcf420dbc0b440bf27bad04",
+ "content": {},
+ "id": "block-v1sampletaxonomyorg1stc12023_1typechapterblockc7077c8cafcf420dbc0b440bf27bad04-2af9d1ac",
+ "type": "course_block",
+ "breadcrumbs": [
+ {
+ "display_name": "Sample Taxonomy Course"
+ }
+ ],
+ "usage_key": "block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@chapter+block@c7077c8cafcf420dbc0b440bf27bad04",
+ "block_type": "chapter",
+ "context_key": "course-v1:SampleTaxonomyOrg1+STC1+2023_1",
+ "org": "SampleTaxonomyOrg1",
+ "access_id": "6"
+ }
+ },
+ {
+ "display_name": "Subsection 1.1",
+ "block_id": "92e3e9ca156c44fa8a735f0e9e7c854f",
+ "content": {},
+ "id": "block-v1sampletaxonomyorg1stc12023_1typesequentialblock92e3e9ca156c44fa8a735f0e9e7c854f-ec0fb128",
+ "type": "course_block",
+ "breadcrumbs": [
+ {
+ "display_name": "Sample Taxonomy Course"
+ },
+ {
+ "display_name": "Section 1",
+ "usage_key": "block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@chapter+block@c7077c8cafcf420dbc0b440bf27bad04"
+ }
+ ],
+ "usage_key": "block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@sequential+block@92e3e9ca156c44fa8a735f0e9e7c854f",
+ "block_type": "sequential",
+ "context_key": "course-v1:SampleTaxonomyOrg1+STC1+2023_1",
+ "org": "SampleTaxonomyOrg1",
+ "access_id": 6,
+ "_formatted": {
+ "display_name": "Subsection 1.1",
+ "block_id": "92e3e9ca156c44fa8a735f0e9e7c854f",
+ "content": {},
+ "id": "block-v1sampletaxonomyorg1stc12023_1typesequentialblock92e3e9ca156c44fa8a735f0e9e7c854f-ec0fb128",
+ "type": "course_block",
+ "breadcrumbs": [
+ {
+ "display_name": "Sample Taxonomy Course"
+ },
+ {
+ "display_name": "Section 1",
+ "usage_key": "block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@chapter+block@c7077c8cafcf420dbc0b440bf27bad04"
+ }
+ ],
+ "usage_key": "block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@sequential+block@92e3e9ca156c44fa8a735f0e9e7c854f",
+ "block_type": "sequential",
+ "context_key": "course-v1:SampleTaxonomyOrg1+STC1+2023_1",
+ "org": "SampleTaxonomyOrg1",
+ "access_id": "6"
+ }
+ },
+ {
+ "display_name": "Unit 1.1.1",
+ "block_id": "aaf8b8eb86b54281aeeab12499d2cb0b",
+ "content": {},
+ "id": "block-v1sampletaxonomyorg1stc12023_1typeverticalblockaaf8b8eb86b54281aeeab12499d2cb0b-afa27c6e",
+ "type": "course_block",
+ "breadcrumbs": [
+ {
+ "display_name": "Sample Taxonomy Course"
+ },
+ {
+ "display_name": "Section 1",
+ "usage_key": "block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@chapter+block@c7077c8cafcf420dbc0b440bf27bad04"
+ },
+ {
+ "display_name": "Subsection 1.1",
+ "usage_key": "block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@sequential+block@92e3e9ca156c44fa8a735f0e9e7c854f"
+ }
+ ],
+ "usage_key": "block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@vertical+block@aaf8b8eb86b54281aeeab12499d2cb0b",
+ "block_type": "vertical",
+ "context_key": "course-v1:SampleTaxonomyOrg1+STC1+2023_1",
+ "org": "SampleTaxonomyOrg1",
+ "access_id": 6,
+ "_formatted": {
+ "display_name": "Unit 1.1.1",
+ "block_id": "aaf8b8eb86b54281aeeab12499d2cb0b",
+ "content": {},
+ "id": "block-v1sampletaxonomyorg1stc12023_1typeverticalblockaaf8b8eb86b54281aeeab12499d2cb0b-afa27c6e",
+ "type": "course_block",
+ "breadcrumbs": [
+ {
+ "display_name": "Sample Taxonomy Course"
+ },
+ {
+ "display_name": "Section 1",
+ "usage_key": "block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@chapter+block@c7077c8cafcf420dbc0b440bf27bad04"
+ },
+ {
+ "display_name": "Subsection 1.1",
+ "usage_key": "block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@sequential+block@92e3e9ca156c44fa8a735f0e9e7c854f"
+ }
+ ],
+ "usage_key": "block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@vertical+block@aaf8b8eb86b54281aeeab12499d2cb0b",
+ "block_type": "vertical",
+ "context_key": "course-v1:SampleTaxonomyOrg1+STC1+2023_1",
+ "org": "SampleTaxonomyOrg1",
+ "access_id": "6"
+ }
+ },
+ {
+ "display_name": "Announcement",
+ "block_id": "0b2d1c0722f742489602b6d8645205f4",
+ "content": {
+ "html_content": "To use this template, replace the example text with your own text. When you add the component, be sure to select Settings to specify a Display Name and other values that apply. Announcement Date Short note that introduces the topic Instructor's name Heading for announcement 1 Announcement 1 text Heading for announcement 2 Announcement 2 text "
+ },
+ "id": "block-v1sampletaxonomyorg1stc12023_1typehtmlblock0b2d1c0722f742489602b6d8645205f4-2db56dce",
+ "type": "course_block",
+ "breadcrumbs": [
+ {
+ "display_name": "Sample Taxonomy Course"
+ },
+ {
+ "display_name": "Section 1",
+ "usage_key": "block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@chapter+block@c7077c8cafcf420dbc0b440bf27bad04"
+ },
+ {
+ "display_name": "Subsection 1.1",
+ "usage_key": "block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@sequential+block@92e3e9ca156c44fa8a735f0e9e7c854f"
+ },
+ {
+ "display_name": "Unit 1.1.1",
+ "usage_key": "block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@vertical+block@aaf8b8eb86b54281aeeab12499d2cb0b"
+ }
+ ],
+ "usage_key": "block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@html+block@0b2d1c0722f742489602b6d8645205f4",
+ "block_type": "html",
+ "context_key": "course-v1:SampleTaxonomyOrg1+STC1+2023_1",
+ "org": "SampleTaxonomyOrg1",
+ "access_id": 6,
+ "_formatted": {
+ "display_name": "Announcement",
+ "block_id": "0b2d1c0722f742489602b6d8645205f4",
+ "content": {
+ "html_content": "To use this template, replace the example text with your own text. When you add the component, be sure to…"
+ },
+ "id": "block-v1sampletaxonomyorg1stc12023_1typehtmlblock0b2d1c0722f742489602b6d8645205f4-2db56dce",
+ "type": "course_block",
+ "breadcrumbs": [
+ {
+ "display_name": "Sample Taxonomy Course"
+ },
+ {
+ "display_name": "Section 1",
+ "usage_key": "block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@chapter+block@c7077c8cafcf420dbc0b440bf27bad04"
+ },
+ {
+ "display_name": "Subsection 1.1",
+ "usage_key": "block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@sequential+block@92e3e9ca156c44fa8a735f0e9e7c854f"
+ },
+ {
+ "display_name": "Unit 1.1.1",
+ "usage_key": "block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@vertical+block@aaf8b8eb86b54281aeeab12499d2cb0b"
+ }
+ ],
+ "usage_key": "block-v1:SampleTaxonomyOrg1+STC1+2023_1+type@html+block@0b2d1c0722f742489602b6d8645205f4",
+ "block_type": "html",
+ "context_key": "course-v1:SampleTaxonomyOrg1+STC1+2023_1",
+ "org": "SampleTaxonomyOrg1",
+ "access_id": "6"
+ }
}
],
"query": "learn",
"processingTimeMs": 1,
- "limit": 2,
+ "limit": 6,
"offset": 0,
- "estimatedTotalHits": 2
+ "estimatedTotalHits": 6
},
{
"indexUid": "studio",