diff --git a/package.json b/package.json index c01eeca4..2ac9410e 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,6 @@ "publish:win": "yarn run build:clean && electron-builder --win -p always", "icon-gen": "icon-gen -i static/Icon-Color.svg -o main/static/icons -r -m ico,icns", "lint": "eslint --ignore-path .gitignore .", - "test:current": "jest TestGroupInDetail.test.js -c test/lib/unit.config.js", "test:unit": "jest -c test/lib/unit.config.js", "test:e2e": "jest -c test/lib/integration.config.js --testRegex 'e2e.js' --runInBand", "postinstall": "electron-builder install-app-deps", diff --git a/renderer/components/Sidebar.js b/renderer/components/Sidebar.js index 13b1a67c..4668be47 100644 --- a/renderer/components/Sidebar.js +++ b/renderer/components/Sidebar.js @@ -7,7 +7,6 @@ import { Flex, Box } from 'ooni-components' -import Link from 'next/link' import { FormattedMessage } from 'react-intl' import OONILogo from 'ooni-components/components/svgs/logos/Probe-HorizontalMonochrome.svg' import { MdWeb, MdHistory } from 'react-icons/md' @@ -48,9 +47,15 @@ const ColoredStrip = styled.span` const NavItem = ({href, icon, label, pathName}) => { const isActive = pathName === href + const router = useRouter() + + const handleLinkClick = () => { + router.push(href) + } + return ( - + {icon} @@ -59,7 +64,7 @@ const NavItem = ({href, icon, label, pathName}) => { {label} - + ) @@ -132,7 +137,7 @@ const Sidebar = ({ children }) => { - + {version} @@ -154,4 +159,4 @@ Sidebar.propTypes = { } export default Sidebar -export { navigationPaths } \ No newline at end of file +export { navigationPaths, NavItem } \ No newline at end of file diff --git a/renderer/components/__tests__/Sidebar.test.js b/renderer/components/__tests__/Sidebar.test.js new file mode 100644 index 00000000..2ca2d175 --- /dev/null +++ b/renderer/components/__tests__/Sidebar.test.js @@ -0,0 +1,74 @@ +/** + * @jest-environment jsdom + */ + +import React from 'react' +import { screen, render, cleanup, fireEvent } from '@testing-library/react' +import { theme } from 'ooni-components' +import { ThemeProvider } from 'styled-components' +import { IntlProvider } from 'react-intl' +import English from '../../../lang/en.json' + +import Sidebar from '../Sidebar' +import { version } from '../../../package.json' + +// Mocking useRouter() +const mockRouterPush = jest.fn() +jest.mock('next/router', () => ({ + useRouter() { + return { + route: '/', + pathname: '/dashboard', + push: mockRouterPush, + } + }, +})) + +const renderComponent = (component, locale = 'en', messages = English) => { + return render( + + {component} + + ) +} + +describe('Tests for Sidebar component', () => { + beforeEach(() => { + renderComponent( + + <> + + ) + }) + + afterEach(() => { + cleanup() + jest.clearAllMocks() + }) + + test('Displays the correct version', async () => { + const versionNumber = screen.getByTestId('sidebar-version-number') + expect(versionNumber.innerHTML).toMatch(version) + }) + + test('Clicking on Dashboard NavItem calls pushes router to /dashboard', async () => { + const navItemDashboard = screen.getByTestId('sidebar-item-dashboard') + fireEvent.click(navItemDashboard) + + expect(mockRouterPush).toHaveBeenLastCalledWith('/dashboard') + }) + + test('Clicking on Test Results NavItem calls pushes router to /test-results', async () => { + const navItemTestResults = screen.getByTestId('sidebar-item-test-results') + fireEvent.click(navItemTestResults) + + expect(mockRouterPush).toHaveBeenLastCalledWith('/test-results') + }) + + test('Clicking on Settings NavItem calls pushes router to /settings', async () => { + const navItemSettings = screen.getByTestId('sidebar-item-settings') + fireEvent.click(navItemSettings) + + expect(mockRouterPush).toHaveBeenLastCalledWith('/settings') + }) +}) diff --git a/renderer/components/dashboard/__tests__/RunTestCard.test.js b/renderer/components/dashboard/__tests__/RunTestCard.test.js new file mode 100644 index 00000000..607b38fd --- /dev/null +++ b/renderer/components/dashboard/__tests__/RunTestCard.test.js @@ -0,0 +1,61 @@ +/** + * @jest-environment jsdom + */ + +import React from 'react' +import { screen, render, cleanup, fireEvent } from '@testing-library/react' +import { theme } from 'ooni-components' +import { ThemeProvider } from 'styled-components' +import { IntlProvider } from 'react-intl' +import English from '../../../../lang/en.json' +import { useRouter } from 'next/router' + +import RunTestCard from '../RunTestCard' +import { testList } from '../../nettests' + +// Mocking useRouter() +const mockPush = jest.fn() +jest.mock('next/router', () => ({ + useRouter() { + return { + route: '/', + pathname: '/dashboard', + push: mockPush + } + }, +})) + +const renderComponent = (component, locale = 'en', messages = English) => { + return render( + + {component} + + ) +} + +describe('Tests for RunTestCard component', () => { + const router = useRouter() + + afterEach(() => { + cleanup() + jest.clearAllMocks() + }) + + test('Individual Test Cards work as expected', async () => { + const websiteDetails = testList[0] + renderComponent( + + router.push('/dashboard/[testGroup]', `/dashboard/${websiteDetails.key}`) + } + id={websiteDetails.key} + {...websiteDetails} + /> + ) + + const testCard = screen.getByTestId('card') + fireEvent.click(testCard) + + expect(mockPush).toHaveBeenCalledWith('/dashboard/[testGroup]', `/dashboard/${websiteDetails.key}`) + }) +}) diff --git a/renderer/components/onboard/__tests__/Stepper.test.js b/renderer/components/onboard/__tests__/Stepper.test.js index 291ffd7d..7daf8d89 100644 --- a/renderer/components/onboard/__tests__/Stepper.test.js +++ b/renderer/components/onboard/__tests__/Stepper.test.js @@ -11,9 +11,11 @@ import renderer from 'react-test-renderer' import Stepper from '../Stepper' describe('Tests from Stepper component', () => { + afterEach(() => { cleanup() }) + test('With active index 0', async () => { const component = renderer .create( @@ -24,6 +26,7 @@ describe('Tests from Stepper component', () => { .toJSON() expect(component).toMatchSnapshot() }) + test('With active index 1', async () => { const component = renderer .create( @@ -34,6 +37,7 @@ describe('Tests from Stepper component', () => { .toJSON() expect(component).toMatchSnapshot() }) + test('With active index 2', async () => { const component = renderer .create(