diff --git a/src/index.jsx b/src/index.jsx
index c35d0f92f3..37c0e9b6f9 100755
--- a/src/index.jsx
+++ b/src/index.jsx
@@ -7,7 +7,7 @@ import {
import { AppProvider, ErrorPage } from '@edx/frontend-platform/react';
import React, { useEffect } from 'react';
import ReactDOM from 'react-dom';
-import { Route, Routes } from 'react-router-dom';
+import { Navigate, Route, Routes } from 'react-router-dom';
import {
QueryClient,
QueryClientProvider,
@@ -22,7 +22,7 @@ import CourseAuthoringRoutes from './CourseAuthoringRoutes';
import Head from './head/Head';
import { StudioHome } from './studio-home';
import CourseRerun from './course-rerun';
-import { TaxonomyListPage } from './taxonomy';
+import { TaxonomyLayout, TaxonomyDetailPage, TaxonomyListPage } from './taxonomy';
import { ContentTagsDrawer } from './content-tags-drawer';
import 'react-datepicker/dist/react-datepicker.css';
@@ -55,10 +55,14 @@ const App = () => {
} />
{process.env.ENABLE_TAGGING_TAXONOMY_PAGES === 'true' && (
<>
- }
- />
+ {/* TODO: remove this redirect once Studio's link is updated */}
+ } />
+ }>
+ } />
+
+ }>
+ } />
+
}
diff --git a/src/taxonomy/TaxonomyLayout.jsx b/src/taxonomy/TaxonomyLayout.jsx
new file mode 100644
index 0000000000..eb992b2b42
--- /dev/null
+++ b/src/taxonomy/TaxonomyLayout.jsx
@@ -0,0 +1,14 @@
+import { StudioFooter } from '@edx/frontend-component-footer';
+import { Outlet } from 'react-router-dom';
+
+import Header from '../header';
+
+const TaxonomyLayout = () => (
+
+
+
+
+
+);
+
+export default TaxonomyLayout;
diff --git a/src/taxonomy/TaxonomyLayout.test.jsx b/src/taxonomy/TaxonomyLayout.test.jsx
new file mode 100644
index 0000000000..924e7465e9
--- /dev/null
+++ b/src/taxonomy/TaxonomyLayout.test.jsx
@@ -0,0 +1,48 @@
+import React from 'react';
+import { IntlProvider } from '@edx/frontend-platform/i18n';
+import { initializeMockApp } from '@edx/frontend-platform';
+import { AppProvider } from '@edx/frontend-platform/react';
+import { render } from '@testing-library/react';
+
+import initializeStore from '../store';
+import TaxonomyLayout from './TaxonomyLayout';
+
+let store;
+
+jest.mock('../header', () => jest.fn(() => ));
+jest.mock('@edx/frontend-component-footer', () => ({
+ StudioFooter: jest.fn(() => ),
+}));
+jest.mock('react-router-dom', () => ({
+ ...jest.requireActual('react-router-dom'),
+ Outlet: jest.fn(() => ),
+}));
+
+const RootWrapper = () => (
+
+
+
+
+
+);
+
+describe('', async () => {
+ beforeEach(async () => {
+ initializeMockApp({
+ authenticatedUser: {
+ userId: 3,
+ username: 'abc123',
+ administrator: true,
+ roles: [],
+ },
+ });
+ store = initializeStore();
+ });
+
+ it('should render page correctly', async () => {
+ const { getByTestId } = render();
+ expect(getByTestId('mock-header')).toBeInTheDocument();
+ expect(getByTestId('mock-content')).toBeInTheDocument();
+ expect(getByTestId('mock-footer')).toBeInTheDocument();
+ });
+});
diff --git a/src/taxonomy/TaxonomyListPage.jsx b/src/taxonomy/TaxonomyListPage.jsx
index 98e446e45b..79ca9982aa 100644
--- a/src/taxonomy/TaxonomyListPage.jsx
+++ b/src/taxonomy/TaxonomyListPage.jsx
@@ -5,9 +5,7 @@ import {
DataTable,
Spinner,
} from '@edx/paragon';
-import { StudioFooter } from '@edx/frontend-component-footer';
import { useIntl } from '@edx/frontend-platform/i18n';
-import Header from '../header';
import SubHeader from '../generic/sub-header/SubHeader';
import messages from './messages';
import TaxonomyCard from './taxonomy-card';
@@ -37,14 +35,6 @@ const TaxonomyListPage = () => {
return (
<>
-
-
{
)}
-
>
);
};
diff --git a/src/taxonomy/export-modal/index.jsx b/src/taxonomy/export-modal/index.jsx
index d380aea6e9..76fd71c2fc 100644
--- a/src/taxonomy/export-modal/index.jsx
+++ b/src/taxonomy/export-modal/index.jsx
@@ -67,7 +67,11 @@ const ExportModal = ({
{intl.formatMessage(messages.taxonomyModalsCancelLabel)}
-