Skip to content

Commit 8b7692e

Browse files
committed
Merge branch 'dev' into brisa_example_testing
2 parents 20ed916 + 6332ab3 commit 8b7692e

17 files changed

+365
-374
lines changed

__tests__/charts/HealthChart.test.tsx

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import React from 'react';
2+
import HealthChart from '../../app/charts/HealthChart';
3+
import { render, screen } from '@testing-library/react';
4+
5+
// mockData used for testing suite
6+
const mockData = {
7+
ServiceName: {
8+
Metric: {
9+
time: [
10+
'2023-06-09T15:18:25.195Z',
11+
'2023-06-09T15:18:20.194Z',
12+
'2023-06-09T15:18:15.192Z',
13+
'2023-06-09T15:18:10.191Z',
14+
'2023-06-09T15:18:05.190Z',
15+
],
16+
value: [1208074240, 1282670592, 1243414528, 1278115840, 117178368],
17+
},
18+
},
19+
};
20+
21+
jest.mock('electron', () => ({
22+
ipcRenderer: {
23+
send: () => jest.fn(),
24+
on: () => mockData,
25+
},
26+
}));
27+
28+
// test suite for HealthChart.tsx
29+
describe('HealthChart', () => {
30+
const props = {
31+
key: 'testKey',
32+
dataType: 'Memory in Megabytes',
33+
chartData: mockData,
34+
categoryName: 'Test Name',
35+
sizing: 'all',
36+
colourGenerator: jest.fn(),
37+
};
38+
39+
let graph;
40+
beforeEach(() => {
41+
render(<HealthChart {...props} />);
42+
43+
graph = screen.getByTestId('Health Chart').firstChild;
44+
});
45+
46+
it('Should render', () => {
47+
expect(screen).toBeTruthy();
48+
});
49+
50+
it('Should render graph', () => {
51+
expect(graph).toBeTruthy();
52+
});
53+
54+
it('Should not scroll', () => {
55+
expect(graph.scrollWidth).toBe(0);
56+
expect(graph.scrollHeight).toBe(0);
57+
expect(graph.scrollLeft).toBe(0);
58+
expect(graph.scrollTop).toBe(0);
59+
});
60+
61+
it('Should have correct data on y-axis based off mock data', () => {
62+
expect(graph.data[0].y[0]).toBe((mockData.ServiceName.Metric.value[0] / 1000000).toFixed(2));
63+
expect(graph.data[0].y[1]).toBe((mockData.ServiceName.Metric.value[1] / 1000000).toFixed(2));
64+
});
65+
});

__tests__/charts/TrafficChart.test.tsx

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,17 +60,11 @@ describe('Traffic Chart', () => {
6060
expect(graph.scrollTop).toBe(0);
6161
});
6262

63-
it('Should have width 700, height 450, and white background', () => {
63+
it('Should have width 300, height 300, and white background', () => {
6464
expect(graph._fullLayout.width).toBe(300);
6565
expect(graph._fullLayout.height).toBe(300);
6666
});
6767

68-
it('Should have correct colors', () => {
69-
expect(graph.outerHTML.includes('{fill: #3f4f75;}')).toBeTruthy();
70-
expect(graph.outerHTML.includes('{fill: #80cfbe;}')).toBeTruthy();
71-
expect(graph.outerHTML.includes('{fill: #fff;}')).toBeTruthy();
72-
});
73-
7468
it('Should have correct data points based off mock data', () => {
7569
expect(graph.calcdata[0][0].isBlank).toBeFalsy();
7670
expect(graph.data[0].x).toEqual(['customers']);

__tests__/components/AwaitingApproval.test.tsx

Lines changed: 0 additions & 42 deletions
This file was deleted.

__tests__/components/CreateAdmin.test.tsx

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@ jest.mock('electron', () => ({ ipcRenderer: { sendSync: jest.fn() } }));
88

99
describe('Create Admin Page', () => {
1010
beforeEach(() => {
11+
console.error = jest.fn();
1112
render(
1213
<DashboardContextProvider>
1314
<CreateAdmin />
1415
</DashboardContextProvider>
1516
);
1617
});
1718

18-
it('should render', () => {
19+
it('Should render', () => {
1920
expect(screen).toBeTruthy();
2021
});
2122

@@ -29,12 +30,17 @@ describe('Create Admin Page', () => {
2930
});
3031

3132
it('Create Account button should submit email, username, and password to addUser', () => {
32-
const element = screen.getByTestId('CreateAdmin');
33-
const inputs = element.querySelectorAll('input');
34-
inputs[0].value = 'me';
35-
inputs[1].value = '[email protected]';
36-
inputs[2].value = 'me123';
37-
fireEvent.click(screen.getByText('Create Account'));
33+
const username = screen.getByPlaceholderText('enter username');
34+
const email = screen.getByPlaceholderText('[email protected]');
35+
const password = screen.getByPlaceholderText('enter password');
36+
const createAccountButton = screen.getByRole('button', { name: /create account/i });
37+
38+
fireEvent.change(email, { target: { value: '[email protected]' } });
39+
fireEvent.change(username, { target: { value: 'me' } });
40+
fireEvent.change(password, { target: { value: 'me123' } });
41+
42+
fireEvent.click(createAccountButton);
43+
3844
expect(ipcRenderer.sendSync).toHaveBeenCalledWith('addUser', {
3945
4046
username: 'me',

__tests__/components/FirstLaunch.test.tsx

Lines changed: 0 additions & 40 deletions
This file was deleted.

__tests__/components/Header.test.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ describe('Speed Chart', () => {
2424
};
2525
let element;
2626
beforeEach(() => {
27+
// const mockData = [
28+
// { microservice1: 'Test 1'},
29+
// { microservice2: 'Test 2'},
30+
// ]
2731
render(
2832
<Router>
2933
<ApplicationContext.Provider value={{ servicesData: '' }}>
@@ -49,4 +53,15 @@ describe('Speed Chart', () => {
4953
it('Button should have an onClick function', () => {
5054
expect(typeof element.querySelector('button').onclick).toBe('function');
5155
});
56+
57+
// trying to test the functionality of component not passed as props
58+
it('Should check/uncheck the checkbox when clicking services', () => {
59+
// const checkBox = screen.getByRole('checkbox');
60+
// fireEvent.click(checkBox);
61+
// expect(checkBox.parentElement).toHaveClass('selected');
62+
// fireEvent.click(checkBox);
63+
// expect(checkBox.parentElement).not.toHaveClass('selected');
64+
});
65+
66+
it('Should also change selectModal to true or false', () => {});
5267
});

__tests__/components/Login.test.tsx

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,17 @@ import { ipcRenderer } from 'electron';
44
import Login from '../../app/components/Login';
55
import DashboardContextProvider from '../../app/context/DashboardContext';
66
import { HashRouter as Router } from 'react-router-dom';
7+
import '@testing-library/jest-dom';
78

8-
jest.mock('electron', () => ({ ipcRenderer: { sendSync: jest.fn() } }));
9+
const navigateMock = jest.fn();
910

10-
// const mock = jest.fn(Electron.ipcRenderer.sendSync())
11+
jest.mock('electron', () => ({ ipcRenderer: { sendSync: jest.fn() } }));
12+
jest.mock('react-router-dom', () => ({
13+
...jest.requireActual('react-router-dom'),
14+
useNavigate: () => navigateMock,
15+
}));
1116

17+
// testing suite for the CreateAdmin.tsx file
1218
describe('Create Admin Page', () => {
1319
beforeEach(() => {
1420
render(
@@ -18,6 +24,7 @@ describe('Create Admin Page', () => {
1824
</DashboardContextProvider>
1925
</Router>
2026
);
27+
navigateMock.mockReset();
2128
});
2229

2330
it('should render', () => {
@@ -34,16 +41,25 @@ describe('Create Admin Page', () => {
3441
});
3542

3643
it('Login button should submit username and password to addUser', () => {
37-
const element = screen.getByTestId('Login');
38-
const inputs = element.querySelectorAll('input');
39-
inputs[0].value = 'St1nky';
40-
inputs[1].value = 'me123';
41-
fireEvent.click(element);
42-
// expect(ipcRenderer.sendSync).toHaveBeenCalled;
43-
// above passes test but below fails and says number of calls is zero
44+
const usernameInput = screen.getByPlaceholderText('username');
45+
const passwordInput = screen.getByPlaceholderText('password');
46+
const loginButton = screen.getByRole('button', { name: /Login/i });
47+
48+
fireEvent.change(usernameInput, { target: { value: 'St1nky' } });
49+
fireEvent.change(passwordInput, { target: { value: 'me123' } });
50+
51+
fireEvent.click(loginButton);
4452
expect(ipcRenderer.sendSync).toHaveBeenCalledWith('login', {
4553
username: 'St1nky',
4654
password: 'me123',
4755
});
4856
});
57+
58+
it('Should reroute user to signup', () => {
59+
const button = screen.getByText(/need an account/i);
60+
expect(button).toBeInTheDocument();
61+
fireEvent.click(button);
62+
63+
expect(navigateMock).toHaveBeenCalledTimes(1);
64+
});
4965
});
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import React from 'react';
2+
import { render, fireEvent, screen } from '@testing-library/react';
3+
import Settings from '../../app/components/Settings';
4+
import { DashboardContext } from '../../app/context/DashboardContext';
5+
import '@testing-library/jest-dom';
6+
7+
describe('Settings', () => {
8+
let changeMode = jest.fn();
9+
10+
beforeEach(() => {
11+
render(
12+
<DashboardContext.Provider value={{ changeMode }}>
13+
<Settings />
14+
</DashboardContext.Provider>
15+
);
16+
});
17+
18+
test('Should change mode to light mode on light button click', () => {
19+
fireEvent.click(screen.getByRole('button', { name: 'Light' }));
20+
expect(changeMode).toHaveBeenCalledWith('light');
21+
});
22+
23+
test('Should change mode to dark mode on dark button click', () => {
24+
fireEvent.click(screen.getByRole('button', { name: 'Dark' }));
25+
expect(changeMode).toHaveBeenCalledWith('dark');
26+
});
27+
});

__tests__/components/SignUp.test.tsx

Lines changed: 14 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import React from 'react';
2-
import { render, fireEvent, screen } from '@testing-library/react';
2+
import { render, fireEvent, screen, getByPlaceholderText } from '@testing-library/react';
33
import { ipcRenderer } from 'electron';
44
import SignUp from '../../app/components/SignUp';
55
import DashboardContextProvider from '../../app/context/DashboardContext';
66
import { HashRouter as Router } from 'react-router-dom';
77

88
jest.mock('electron', () => ({ ipcRenderer: { sendSync: jest.fn() } }));
99

10-
describe('Create Admin Page', () => {
10+
describe('Create Signup Page', () => {
1111
beforeEach(() => {
1212
render(
1313
<Router>
@@ -31,41 +31,17 @@ describe('Create Admin Page', () => {
3131
expect(element.querySelectorAll('input').length).toBe(4);
3232
});
3333

34-
it('Sign up button should submit email, username, and password to addUser', () => {
35-
const element = screen.getByTestId('SignUp');
36-
const inputs = element.querySelectorAll('input');
37-
inputs[0].value = 'me';
38-
inputs[1].value = '[email protected]';
39-
inputs[2].value = 'me123';
40-
fireEvent.click(element);
41-
expect(ipcRenderer.sendSync).toHaveBeenCalledTimes(1);
42-
// expect(ipcRenderer.sendSync).toHaveBeenCalledWith('addUser', {
43-
// username: 'me',
44-
// email: '[email protected]',
45-
// password: 'me123',
46-
// });
47-
});
48-
});
34+
it('Sign up button should submit email, username, and password to addUser', async () => {
35+
screen.debug();
4936

50-
// describe('handle submit function', () => {
51-
// beforeEach(() => {
52-
// render(
53-
// <Router>
54-
// <DashboardContextProvider>
55-
// <SignUp />
56-
// </DashboardContextProvider>
57-
// </Router>
58-
// );
59-
// });
37+
const username = screen.getByPlaceholderText('enter username');
38+
const email = screen.getByPlaceholderText('[email protected]');
39+
const password = screen.getByPlaceholderText('enter password');
40+
const signupButton = screen.getByRole('signup');
6041

61-
// it('should show error message when passwords don\'t match', () => {
62-
// const element = screen.getByTestId('SignUp');
63-
// const inputs = element.querySelectorAll('input');
64-
// inputs[0].value = 'me';
65-
// inputs[1].value = '[email protected]';
66-
// inputs[2].value = 'me123';
67-
// inputs[3].value = 'me1234';
68-
// fireEvent.submit(element);
69-
// expect(screen.getByText('Entered passwords do not match')).toBeInTheDocument();
70-
// })
71-
// })
42+
fireEvent.change(email, { target: { value: '[email protected]' } });
43+
fireEvent.change(username, { target: { value: 'me' } });
44+
fireEvent.change(password, { target: { value: 'me123' } });
45+
fireEvent.click(signupButton);
46+
});
47+
});

0 commit comments

Comments
 (0)