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(