From 36566343a38c917fb2fe12a7e1a0e80b8ba3bf33 Mon Sep 17 00:00:00 2001
From: Alex <1353716+alexstojda@users.noreply.github.com>
Date: Wed, 9 Aug 2023 17:56:39 -0400
Subject: [PATCH] test(tournaments-frontend): Test list tournaments page
---
web/app/src/pages/Leagues/index.test.tsx | 2 +-
web/app/src/pages/Tournaments/index.test.tsx | 87 ++++++++++++++++++++
web/app/src/pages/Tournaments/index.tsx | 8 +-
web/app/src/test/fake/index.ts | 1 +
web/app/src/test/fake/tournament.ts | 25 ++++++
5 files changed, 118 insertions(+), 5 deletions(-)
create mode 100644 web/app/src/pages/Tournaments/index.test.tsx
create mode 100644 web/app/src/test/fake/tournament.ts
diff --git a/web/app/src/pages/Leagues/index.test.tsx b/web/app/src/pages/Leagues/index.test.tsx
index 98cdd33..964bba4 100644
--- a/web/app/src/pages/Leagues/index.test.tsx
+++ b/web/app/src/pages/Leagues/index.test.tsx
@@ -20,7 +20,7 @@ beforeEach(() => {
mockApi.prototype.parseError.mockReset()
})
-describe('LeaguesPage', () => {
+describe('LeaguesListPage', () => {
it('renders leagues from API', async () => {
const mockLeagues = Array.from({length: 5}, () => fake.league())
diff --git a/web/app/src/pages/Tournaments/index.test.tsx b/web/app/src/pages/Tournaments/index.test.tsx
new file mode 100644
index 0000000..8ef8bdb
--- /dev/null
+++ b/web/app/src/pages/Tournaments/index.test.tsx
@@ -0,0 +1,87 @@
+import {Api, TournamentsApi} from "../../api";
+import {fake} from '../../test';
+import {render} from "@testing-library/react";
+import {MemoryRouter} from "react-router-dom";
+import TournamentsListPage from "./index";
+
+jest.mock('../../api')
+const mockApi = jest.mocked(Api)
+
+beforeEach(() => {
+ mockApi.prototype.leaguesApi.mockReset()
+ mockApi.prototype.parseError.mockReset()
+})
+
+describe('TournamentsListPage', () => {
+ it('renders tournaments from API', async () => {
+ const mockTournaments = Array.from({length: 5}, () => fake.tournament())
+
+ jest.mocked(TournamentsApi).prototype.tournamentsGet.mockResolvedValue({
+ config: {},
+ data: {
+ tournaments: mockTournaments
+ },
+ headers: {},
+ request: {},
+ status: 200,
+ statusText: "",
+ })
+ mockApi.prototype.tournamentsApi.mockReturnValue(new TournamentsApi())
+
+ const result = render(
+
+
+
+ )
+
+ const header = await result.findByText("Tournaments")
+ expect(header).toBeInTheDocument()
+
+ const tournamentCards = await result.findAllByTestId("tournament-card")
+ expect(tournamentCards).toHaveLength(mockTournaments.length)
+
+ mockTournaments.forEach((tournament) => {
+ expect(result.getByText(tournament.name)).toBeInTheDocument()
+ expect(result.getByText(tournament.location!.name)).toBeInTheDocument()
+ })
+ })
+ it('renders error from API', async () => {
+ const mockError = fake.errorResponse()
+ mockApi.prototype.parseError.mockReturnValue(mockError)
+
+ jest.mocked(TournamentsApi).prototype.tournamentsGet.mockRejectedValue(false)
+ mockApi.prototype.tournamentsApi.mockReturnValue(new TournamentsApi())
+
+ const result = render(
+
+
+
+ )
+
+ const header = await result.findByText("Tournaments")
+ expect(header).toBeInTheDocument()
+
+ const error = await result.findByText(mockError.detail)
+ expect(error).toBeInTheDocument()
+ })
+ it('shows unknown error when parseError fails', async () => {
+ mockApi.prototype.parseError.mockImplementation((e) => {
+ throw e
+ })
+
+ mockApi.prototype.tournamentsApi.mockReturnValue(new TournamentsApi())
+ jest.mocked(TournamentsApi).prototype.tournamentsGet.mockRejectedValue(false)
+
+ const result = render(
+
+
+
+ )
+
+ const header = await result.findByText("Tournaments")
+ expect(header).toBeInTheDocument()
+
+ const error = await result.findByText("Unknown error")
+ expect(error).toBeInTheDocument()
+ })
+})
diff --git a/web/app/src/pages/Tournaments/index.tsx b/web/app/src/pages/Tournaments/index.tsx
index 7c5d43f..d003809 100644
--- a/web/app/src/pages/Tournaments/index.tsx
+++ b/web/app/src/pages/Tournaments/index.tsx
@@ -101,14 +101,14 @@ export default function TournamentsListPage(props: TournamentListPageProps) {
textAlign={'center'}
fontSize={'4xl'}
fontWeight={'bold'}>
- Leagues
+ Tournaments
{auth?.user &&
-