From ceb484c4642498ce96bae701f94cf924507ba15d Mon Sep 17 00:00:00 2001 From: elof-dev Date: Wed, 22 Oct 2025 15:21:08 +0700 Subject: [PATCH] Fix issue #5 : correct book() and add unit tests - Updated book() to avoid clubs booking in past competition - Added a new test file with 2 unit tests --- server.py | 8 ++++++ tests/unit/test_book_past_competition.py | 34 ++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 tests/unit/test_book_past_competition.py diff --git a/server.py b/server.py index 9bd8ee4d1..7ea6e6c3c 100644 --- a/server.py +++ b/server.py @@ -1,5 +1,6 @@ import json from flask import Flask,render_template,request,redirect,flash,url_for +from datetime import datetime def loadClubs(): @@ -39,8 +40,15 @@ def showSummary(): def book(competition,club): foundClub = [c for c in clubs if c['name'] == club][0] foundCompetition = [c for c in competitions if c['name'] == competition][0] + + competition_date = datetime.strptime(foundCompetition['date'], "%Y-%m-%d %H:%M:%S") + if competition_date < datetime.now(): + flash("This competition has already taken place, booking is not allowed.") + return render_template('welcome.html', club=foundClub, competitions=competitions) + if foundClub and foundCompetition: return render_template('booking.html',club=foundClub,competition=foundCompetition) + else: flash("Something went wrong-please try again") return render_template('welcome.html', club=club, competitions=competitions) diff --git a/tests/unit/test_book_past_competition.py b/tests/unit/test_book_past_competition.py new file mode 100644 index 000000000..7436ca6ff --- /dev/null +++ b/tests/unit/test_book_past_competition.py @@ -0,0 +1,34 @@ +import server +from datetime import datetime, timedelta + +""" +Unit test file to check that booking is not allowed for past competitions + +Test 1: A competition in the future -> user can access booking page + - status code 200 + - page contains "How many places?" +Test 2: A competition in the past -> booking is refused. + - status code 200 + - message contains "This competition has already taken place" +""" + +def test_can_book_future_competition(client): + future_date = (datetime.now() + timedelta(days=5)).strftime("%Y-%m-%d %H:%M:%S") + server.competitions = [{"name": "Future Comp", "date": future_date, "numberOfPlaces": "10"}] + server.clubs = [{"name": "Club A", "email": "a@a.com", "points": "10"}] + + response = client.get('/book/Future Comp/Club A') + + assert response.status_code == 200 + assert b"How many places?" in response.data + + +def test_cannot_book_past_competition(client): + past_date = (datetime.now() - timedelta(days=5)).strftime("%Y-%m-%d %H:%M:%S") + server.competitions = [{"name": "Old Comp", "date": past_date, "numberOfPlaces": "10"}] + server.clubs = [{"name": "Club A", "email": "a@a.com", "points": "10"}] + + response = client.get('/book/Old Comp/Club A') + + assert response.status_code == 200 + assert b"This competition has already taken place" in response.data