diff --git a/webapp/src/components/Game.test.js b/webapp/src/components/Game.test.js index 1255a21..4b98fe2 100644 --- a/webapp/src/components/Game.test.js +++ b/webapp/src/components/Game.test.js @@ -1,9 +1,12 @@ import React from 'react'; -import { render, screen } from '@testing-library/react'; +import { fireEvent, act, render, screen, waitFor } from '@testing-library/react'; import Game from './Game'; import { jest } from '@jest/globals'; import useIsAuthenticated from 'react-auth-kit/hooks/useIsAuthenticated'; import useAuthUser from 'react-auth-kit/hooks/useAuthUser'; +import axios from 'axios'; +import MockAdapter from 'axios-mock-adapter'; +const mockAxios = new MockAdapter(axios); const mock = jest.fn(); @@ -13,6 +16,14 @@ jest.mock('react-router-dom', () => ({ useNavigate: () => mock, })); +mockAxios.onGet(/\/imgs\/([^\/]+)\/question/).reply(config => { + const category = config.url.match(/\/imgs\/([^\/]+)\/question/)[1]; + return [200, { + question: `${category} question`, + images: ["img1", "img2", "img3", "img4"] + }]; +}); + describe('Game page', () => { it('should render play message for authenticated user', async () => { useIsAuthenticated.mockReturnValue(() => true); @@ -31,5 +42,35 @@ describe('Game page', () => { throw new Error('Unauthenticated user was able to see Game page'); } catch (err) {} }); - + + it('should render the corresponding question depending on the option clicked', async () => { + useIsAuthenticated.mockReturnValue(() => true); + useAuthUser.mockReturnValue({ username: 'testUser' }); + + let gameOptions = ["Flag","City","Monument","Tourist attraction","Food"] + let gameCategories = ["flags","cities","monuments","tourist_attractions","foods"] + + for(let i=0;i); + //Click game option + await act(async ()=>{ + fireEvent.click(screen.getByText(gameOptions[i])) + }) + + //Should have rendered question category + await waitFor(()=>{ + expect(screen.getByText(gameCategories[i]+" question")).toBeInTheDocument() + }) + } + }); + + it('should navigate out of the game if the user is not authenticated', async () => { + useIsAuthenticated.mockReturnValue(() => false); + useAuthUser.mockReturnValue({ username: 'testUser' }); + + render(); + await waitFor(()=>{ + expect(screen.queryByText("Let's Play!")).not.toBeInTheDocument(); + }) + }); }); \ No newline at end of file