From 0405f63fd7d46307e0a071f8eff28469c44a717e Mon Sep 17 00:00:00 2001 From: algarfer Date: Wed, 1 May 2024 23:40:52 +0200 Subject: [PATCH] Social tests --- webapp/src/__test__/views/AddUser.draft.js | 61 ---------------- webapp/src/__test__/views/Social.test.js | 82 ++++++++++++++++++++++ 2 files changed, 82 insertions(+), 61 deletions(-) delete mode 100644 webapp/src/__test__/views/AddUser.draft.js create mode 100644 webapp/src/__test__/views/Social.test.js diff --git a/webapp/src/__test__/views/AddUser.draft.js b/webapp/src/__test__/views/AddUser.draft.js deleted file mode 100644 index 93e736fb..00000000 --- a/webapp/src/__test__/views/AddUser.draft.js +++ /dev/null @@ -1,61 +0,0 @@ -import React from 'react'; -import { customRender } from "../utils/customRenderer"; -import { fireEvent, screen, waitFor } from '@testing-library/react'; -import axios from 'axios'; -import MockAdapter from 'axios-mock-adapter'; -import AddUser from '../components/AddUser'; - -const mockAxios = new MockAdapter(axios); -const render = customRender() - -describe('AddUser component', () => { - beforeEach(() => { - mockAxios.reset(); - }); - - it('should add user successfully', async () => { - render(); - - const usernameInput = screen.getByLabelText(/Username/i); - const passwordInput = screen.getByLabelText(/Password/i); - const addUserButton = screen.getByRole('button', { name: /Add User/i }); - - // Mock the axios.post request to simulate a successful response - mockAxios.onPost('http://localhost:8000/adduser').reply(200); - - // Simulate user input - fireEvent.change(usernameInput, { target: { value: 'testUser' } }); - fireEvent.change(passwordInput, { target: { value: 'testPassword' } }); - - // Trigger the add user button click - fireEvent.click(addUserButton); - - // Wait for the Snackbar to be open - await waitFor(() => { - expect(screen.getByText(/User added successfully/i)).toBeInTheDocument(); - }); - }); - - it('should handle error when adding user', async () => { - render(); - - const usernameInput = screen.getByLabelText(/Username/i); - const passwordInput = screen.getByLabelText(/Password/i); - const addUserButton = screen.getByRole('button', { name: /Add User/i }); - - // Mock the axios.post request to simulate an error response - mockAxios.onPost('http://localhost:8000/adduser').reply(500, { error: 'Internal Server Error' }); - - // Simulate user input - fireEvent.change(usernameInput, { target: { value: 'testUser' } }); - fireEvent.change(passwordInput, { target: { value: 'testPassword' } }); - - // Trigger the add user button click - fireEvent.click(addUserButton); - - // Wait for the error Snackbar to be open - await waitFor(() => { - expect(screen.getByText(/Error: Internal Server Error/i)).toBeInTheDocument(); - }); - }); -}); diff --git a/webapp/src/__test__/views/Social.test.js b/webapp/src/__test__/views/Social.test.js new file mode 100644 index 00000000..2c20baed --- /dev/null +++ b/webapp/src/__test__/views/Social.test.js @@ -0,0 +1,82 @@ + +import { useAuth } from "../../App.jsx"; +import '@testing-library/jest-dom'; +import Social from '../../views/Social.jsx'; +import { screen, waitFor, act } from '@testing-library/react'; +import { customRender } from "../utils/customRenderer"; +import React from 'react'; +// import axios from "axios"; + +const render = customRender((() => useAuth())()) +// jest.mock('axios'); +jest.mock('../../App.jsx', () => ({ + useAuth: jest.fn().mockReturnValue({ + getUser: jest.fn().mockReturnValue({ + token: 'testUser', + userId: 'test', + username: 'test' + }), + isAuthenticated: jest.fn().mockReturnValue(true), + logout: jest.fn(), + setUser: jest.fn() + }) +})); + +describe('Social component', () => { + + it('load component', async () => { + await act(async () => render()); + + waitFor(() => { + expect(history.location.pathname).toBe("/social"); + expect(screen.getByText(/Friends/i)).toBeInTheDocument(); + expect(screen.getByText(/Requests/i)).toBeInTheDocument(); + expect(screen.getByText(/Friends Ranking/i)).toBeInTheDocument(); + expect(screen.getByText(/Search users/i)).toBeInTheDocument(); + }) + }); + + it('Friends menu', async () => { + await act(async () => render()); + + waitFor(() => { + expect(history.location.pathname).toBe("/social"); + const friendsBt = screen.getByText(/Friends/i, {selector: "a"}) + act(() => friendsBt.click()) + waitFor(() => expect(screen.getByText(/Oops, this seems empty .../i)).toBeInTheDocument()) + }) + }); + + it('Requests menu', async () => { + await act(() => render()); + + waitFor(() => { + expect(history.location.pathname).toBe("/social"); + const friendsBt = screen.getByText(/Requests/i, {selector: "a"}) + act(() => friendsBt.click()) + waitFor(() => expect(screen.getByText(/Oops, this seems empty .../i)).toBeInTheDocument()) + }) + }); + + it('Friends ranking', async () => { + await act(async () => render()); + + waitFor(() => { + expect(history.location.pathname).toBe("/social"); + const friendsBt = screen.getByText(/Friends Ranking/i, {selector: "a"}) + act(() => friendsBt.click()) + waitFor(() => expect(screen.getByText(/No scores to show/i)).toBeInTheDocument()) + }) + }); + + it('Friends ranking', async () => { + await act(async () => render()); + + waitFor(() => { + expect(history.location.pathname).toBe("/social"); + const friendsBt = screen.getByText(/Search users/i, {selector: "a"}) + act(() => friendsBt.click()) + waitFor(() => expect(screen.getByText(/Search users/i)).toBeInTheDocument()) + }) + }); +}) \ No newline at end of file