diff --git a/src/library-authoring/__mocks__/contentLibrariesListV2.js b/src/library-authoring/__mocks__/contentLibrariesListV2.js index 02257a9744..931a2f8150 100644 --- a/src/library-authoring/__mocks__/contentLibrariesListV2.js +++ b/src/library-authoring/__mocks__/contentLibrariesListV2.js @@ -2,7 +2,7 @@ module.exports = { next: null, previous: null, count: 2, - num_pages: 1, + num_pages: 2, current_page: 1, start: 0, results: [ diff --git a/src/studio-home/tabs-section/TabsSection.test.tsx b/src/studio-home/tabs-section/TabsSection.test.tsx index 44abef4449..e35c470109 100644 --- a/src/studio-home/tabs-section/TabsSection.test.tsx +++ b/src/studio-home/tabs-section/TabsSection.test.tsx @@ -15,7 +15,7 @@ import { import { getApiBaseUrl, getStudioHomeApiUrl } from '../data/api'; import { executeThunk } from '../../utils'; import { fetchLibraryData, fetchStudioHomeData } from '../data/thunks'; -import { getContentLibraryV2ListApiUrl } from '../../library-authoring/data/api'; +import { mockGetContentLibraryV2List } from '../../library-authoring/data/api.mocks'; import contentLibrariesListV2 from '../../library-authoring/__mocks__/contentLibrariesListV2'; import { initializeMocks, @@ -71,7 +71,7 @@ describe('', () => { const newMocks = initializeMocks({ initialState }); store = newMocks.reduxStore; axiosMock = newMocks.axiosMock; - axiosMock.onGet(getContentLibraryV2ListApiUrl()).reply(200, contentLibrariesListV2); + mockGetContentLibraryV2List.applyMock(); }); it('should render all tabs correctly', async () => { @@ -391,6 +391,7 @@ describe('', () => { expect(librariesTab).toHaveClass('active'); expect(screen.getByText('Showing 2 of 2')).toBeVisible(); + expect(screen.getByText('Page 1, Current Page, of 2')).toBeVisible(); expect(screen.getByText(contentLibrariesListV2.results[0].title)).toBeVisible(); expect(screen.getByText( @@ -403,6 +404,22 @@ describe('', () => { )).toBeVisible(); }); + it('should show a "not found" message if no v2 libraries were loaded', async () => { + mockGetContentLibraryV2List.applyMockEmpty(); + render(); + axiosMock.onGet(getStudioHomeApiUrl()).reply(200, generateGetStudioHomeDataApiResponse()); + await executeThunk(fetchStudioHomeData(), store.dispatch); + + const librariesTab = screen.getByRole('tab', { name: librariesBetaTabTitle }); + fireEvent.click(librariesTab); + + expect(librariesTab).toHaveClass('active'); + + expect(await screen.findByText( + tabMessages.librariesV2TabLibraryNotFoundAlertMessage.defaultMessage, + )).toBeVisible(); + }); + it('should hide Libraries tab when libraries are disabled', async () => { const data = generateGetStudioHomeDataApiResponse(); @@ -414,7 +431,7 @@ describe('', () => { expect(screen.queryByText(tabMessages.legacyLibrariesTabTitle.defaultMessage)).toBeNull(); }); - it('should render libraries fetch failure alert', async () => { + it('should render legacy libraries fetch failure alert', async () => { render(); axiosMock.onGet(getStudioHomeApiUrl()).reply(200, generateGetStudioHomeDataApiResponse()); axiosMock.onGet(libraryApiLink).reply(404); @@ -428,5 +445,21 @@ describe('', () => { expect(await screen.findByText(tabMessages.librariesTabErrorMessage.defaultMessage)).toBeVisible(); }); + + it('should render v2 libraries fetch failure alert', async () => { + mockGetContentLibraryV2List.applyMockError(); + render(); + axiosMock.onGet(getStudioHomeApiUrl()).reply(200, generateGetStudioHomeDataApiResponse()); + await executeThunk(fetchStudioHomeData(), store.dispatch); + + const librariesTab = screen.getByRole('tab', { name: librariesBetaTabTitle }); + fireEvent.click(librariesTab); + + expect(librariesTab).toHaveClass('active'); + + expect(await screen.findByText( + tabMessages.librariesTabErrorMessage.defaultMessage, + )).toBeVisible(); + }); }); }); diff --git a/src/studio-home/tabs-section/libraries-v2-tab/index.tsx b/src/studio-home/tabs-section/libraries-v2-tab/index.tsx index e159f00bef..605ec71416 100644 --- a/src/studio-home/tabs-section/libraries-v2-tab/index.tsx +++ b/src/studio-home/tabs-section/libraries-v2-tab/index.tsx @@ -49,7 +49,7 @@ const LibrariesV2Tab: React.FC = () => { ); } - const hasV2Libraries = !isLoading && ((data!.results.length || 0) > 0); + const hasV2Libraries = !isLoading && !isError && ((data!.results.length || 0) > 0); // TODO: update this link when tutorial is ready. const librariesTutorialLink = ( @@ -69,7 +69,6 @@ const LibrariesV2Tab: React.FC = () => { {isError ? ( @@ -88,7 +87,7 @@ const LibrariesV2Tab: React.FC = () => { setFilterParams={setFilterParams} setCurrentPage={setCurrentPage} /> - { !isLoading + {!isLoading && !isError && ( {intl.formatMessage(messages.coursesPaginationInfo, {
{intl.formatMessage(messages.coursesPaginationInfo, {