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', () => ( +
Header
+)); + +jest.mock('@edx/frontend-component-footer', () => ({ + FooterSlot: () =>
Footer
, +})); + +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;