diff --git a/src/course-about/CourseAboutPage.tsx b/src/course-about/CourseAboutPage.tsx
new file mode 100644
index 00000000..b7704338
--- /dev/null
+++ b/src/course-about/CourseAboutPage.tsx
@@ -0,0 +1,6 @@
+const CourseAboutPage = () => (
+ // TODO: remove it when will start develop page
+
+);
+
+export default CourseAboutPage;
diff --git a/src/home/HomePage.tsx b/src/home/HomePage.tsx
new file mode 100644
index 00000000..fe26c6df
--- /dev/null
+++ b/src/home/HomePage.tsx
@@ -0,0 +1,6 @@
+const HomePage = () => (
+ // TODO: remove it when will start develop page
+
+);
+
+export default HomePage;
diff --git a/src/index.test.jsx b/src/index.test.jsx
new file mode 100644
index 00000000..2b2f4bfe
--- /dev/null
+++ b/src/index.test.jsx
@@ -0,0 +1,66 @@
+import React from 'react';
+import { Routes, Route } from 'react-router-dom';
+import { AppProvider } from '@edx/frontend-platform/react';
+
+import HomePage from './home/HomePage';
+import CatalogPage from './сatalog/CatalogPage';
+import CourseAboutPage from './course-about/CourseAboutPage';
+import { render } from './setupTest';
+
+jest.mock('@edx/frontend-platform', () => ({
+ ...jest.requireActual('@edx/frontend-platform'),
+ getAuthenticatedUser: () => ({ username: 'test_user', roles: [] }),
+}));
+
+jest.mock('@edx/frontend-platform/react', () => {
+ const original = jest.requireActual('@edx/frontend-platform/react');
+ return {
+ ...original,
+ useAuthenticatedUser: () => ({ username: 'test_user', roles: [] }),
+ // eslint-disable-next-line react/prop-types
+ AppProvider: ({ children }) => {children}
,
+ };
+});
+
+jest.mock('@edx/frontend-component-header', () => (
+
+));
+
+jest.mock('@edx/frontend-component-footer', () => ({
+ FooterSlot: () => ,
+}));
+
+const renderWithProviders = (path = '/') => {
+ // eslint-disable-next-line no-underscore-dangle
+ window._testHistory = [path];
+
+ return render(
+
+
+ } />
+ } />
+ } />
+
+ ,
+ );
+};
+
+describe('App routing', () => {
+ it('renders HomePage at route /', () => {
+ const { getByTestId } = renderWithProviders('/');
+
+ expect(getByTestId('home-page')).toBeInTheDocument();
+ });
+
+ it('renders CatalogPage at route /courses', () => {
+ const { getByTestId } = renderWithProviders('/courses');
+
+ expect(getByTestId('catalog-page')).toBeInTheDocument();
+ });
+
+ it('renders CourseAboutPage at route /courses/123/about', () => {
+ const { getByTestId } = renderWithProviders('/courses/123/about');
+
+ expect(getByTestId('course-about-page')).toBeInTheDocument();
+ });
+});
diff --git a/src/index.tsx b/src/index.tsx
index 884fcade..a1f2e10d 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -12,10 +12,14 @@ import {
} from '@tanstack/react-query';
import Header from '@edx/frontend-component-header';
import { FooterSlot } from '@edx/frontend-component-footer';
+import { Routes, Route } from 'react-router-dom';
+import { Container } from '@openedx/paragon';
-import ExamplePage from './example/ExamplePage';
-import messages from './i18n';
+import HomePage from './home/HomePage';
+import CatalogPage from './сatalog/CatalogPage';
+import CourseAboutPage from './course-about/CourseAboutPage';
+import messages from './i18n';
import './index.scss';
const queryClient = new QueryClient();
@@ -27,7 +31,15 @@ subscribe(APP_READY, () => {
-
+
+
+
+ } />
+ } />
+ } />
+
+
+
,
diff --git a/src/setupTest.js b/src/setupTest.js
index 95b3726d..f92c751e 100644
--- a/src/setupTest.js
+++ b/src/setupTest.js
@@ -1,3 +1,40 @@
import 'core-js/stable';
import 'regenerator-runtime/runtime';
import '@testing-library/jest-dom';
+import { IntlProvider } from '@edx/frontend-platform/i18n';
+import { render as rtlRender } from '@testing-library/react';
+import PropTypes from 'prop-types';
+import { MemoryRouter } from 'react-router-dom';
+import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
+
+function render(ui) {
+ const queryClient = new QueryClient({
+ defaultOptions: {
+ queries: {
+ retry: false,
+ },
+ },
+ });
+
+ const Wrapper = ({ children }) => (
+ // eslint-disable-next-line react/jsx-filename-extension
+
+ {/* eslint-disable-next-line no-underscore-dangle */}
+
+
+ {children}
+
+
+
+ );
+
+ Wrapper.propTypes = {
+ children: PropTypes.node.isRequired,
+ };
+
+ return rtlRender(ui, { wrapper: Wrapper });
+}
+
+export {
+ render,
+};
diff --git "a/src/\321\201atalog/CatalogPage.tsx" "b/src/\321\201atalog/CatalogPage.tsx"
new file mode 100644
index 00000000..275e0f03
--- /dev/null
+++ "b/src/\321\201atalog/CatalogPage.tsx"
@@ -0,0 +1,6 @@
+const CatalogPage = () => (
+ // TODO: remove it when will start develop page
+
+);
+
+export default CatalogPage;