Skip to content

Commit a449b82

Browse files
authored
Test: Add more tests for SideNavBar component (nodejs#2845)
1 parent 185cb09 commit a449b82

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

src/components/SideNavBar/__tests__/index.test.tsx

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React from 'react';
22
import userEvent from '@testing-library/user-event';
33
import { render, screen } from '@testing-library/react';
44
import SideNavBar, { SideNavBarKeys, OverflowTypes } from '..';
5+
import { SideNavBarItem } from '../../../types';
56

67
describe('SideNavBar', () => {
78
it('renders correctly', () => {
@@ -51,6 +52,51 @@ describe('SideNavBar', () => {
5152
expect(securityNavBarElement.getAttribute('href')).toBe('/about/security/');
5253
});
5354

55+
it('should contain a href to `~/get-involved`', () => {
56+
render(<SideNavBar pageKey={SideNavBarKeys.getInvolved} />);
57+
const getInvolvedNavBarElement = screen.getByText('Get Involved');
58+
expect(getInvolvedNavBarElement.getAttribute('href')).toBe(
59+
'/get-involved/'
60+
);
61+
});
62+
63+
it('should contain a href to `~/get-involved/code-learn`', () => {
64+
render(<SideNavBar pageKey={SideNavBarKeys.codeLearn} />);
65+
const codeLearnNavBarElement = screen.getByText('Code + Learn');
66+
expect(codeLearnNavBarElement.getAttribute('href')).toBe(
67+
'/get-involved/code-learn'
68+
);
69+
});
70+
71+
it('should contain a href to `~/get-involved/collab-summit`', () => {
72+
render(<SideNavBar pageKey={SideNavBarKeys.collabSummit} />);
73+
const collabSummitNavBarElement = screen.getByText('Collab Summit');
74+
expect(collabSummitNavBarElement.getAttribute('href')).toBe(
75+
'/get-involved/collab-summit'
76+
);
77+
});
78+
79+
it('should contain a href to `~/get-involved/contribute`', () => {
80+
render(<SideNavBar pageKey={SideNavBarKeys.contribute} />);
81+
const contributeNavBarElement = screen.getByText('Contribute');
82+
expect(contributeNavBarElement.getAttribute('href')).toBe(
83+
'/get-involved/contribute'
84+
);
85+
});
86+
87+
it('should contain a href to Code of Conduct', () => {
88+
render(<SideNavBar pageKey={SideNavBarKeys.codeOfConduct} />);
89+
const codeOfConductNavBarElement = screen.getByText('Code of Conduct');
90+
const href = codeOfConductNavBarElement.getAttribute('href');
91+
expect((href || '').includes('code-of-conduct.md')).toBe(true);
92+
});
93+
94+
it('should contain a href to `~/download`', () => {
95+
render(<SideNavBar pageKey={SideNavBarKeys.download} />);
96+
const downloadNavBarElement = screen.getByText('Download');
97+
expect(downloadNavBarElement.getAttribute('href')).toBe('/download/');
98+
});
99+
54100
it('should contain a href to `~/download/package-manager`', () => {
55101
render(<SideNavBar pageKey={SideNavBarKeys.packageManager} />);
56102
const packageManagerNavBarElement = screen.getByText('Package Manager');
@@ -59,6 +105,14 @@ describe('SideNavBar', () => {
59105
);
60106
});
61107

108+
it('should contain a href to `~/download/releases`', () => {
109+
render(<SideNavBar pageKey={SideNavBarKeys.previousReleases} />);
110+
const previousReleasesNavBarElement = screen.getByText('Previous Releases');
111+
expect(previousReleasesNavBarElement.getAttribute('href')).toBe(
112+
'/download/releases/'
113+
);
114+
});
115+
62116
it('should set the a single page as active', () => {
63117
const { container } = render(
64118
<SideNavBar pageKey={SideNavBarKeys.releases} />
@@ -89,4 +143,24 @@ describe('SideNavBar', () => {
89143
await userEvent.click(downloadItem);
90144
expect(document.body.style.overflow).toBe(OverflowTypes.unset);
91145
});
146+
147+
it('should contain a href to https link', () => {
148+
const title = 'title';
149+
const slug = 'https://test.domain';
150+
const items: SideNavBarItem[] = [{ title, slug, isTitle: true }];
151+
render(<SideNavBar pageKey={SideNavBarKeys.releases} items={items} />);
152+
const navBarElement = screen.getByText(title);
153+
expect(navBarElement.getAttribute('href')).toBe(slug);
154+
});
155+
156+
it('should close the Navigation when a link is clicked', async () => {
157+
const activeClassName = 'navigationItemActive';
158+
render(<SideNavBar pageKey={SideNavBarKeys.releases} />);
159+
const releasesNavBarElement = screen.getByText('Releases');
160+
expect(releasesNavBarElement.classList).toContain(activeClassName);
161+
await userEvent.click(releasesNavBarElement);
162+
expect(releasesNavBarElement.classList).toEqual(
163+
expect.not.arrayContaining([activeClassName])
164+
);
165+
});
92166
});

0 commit comments

Comments
 (0)