From 825904b6c1eaf7bd9503bc988cc69290ef2fda14 Mon Sep 17 00:00:00 2001 From: elof-dev Date: Wed, 22 Oct 2025 10:31:11 +0700 Subject: [PATCH] Fix issue #4 : correct purchasePlaces() and add unit tests - Updated purchasePlaces() to check avoid clubs booking more than 12 places per competition - Added a new test file with 2 unit tests to verify point validation logic --- server.py | 8 +++- tests/unit/test_book_more_than_12_places.py | 47 +++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 tests/unit/test_book_more_than_12_places.py diff --git a/server.py b/server.py index 07932372b..9bd8ee4d1 100644 --- a/server.py +++ b/server.py @@ -48,6 +48,7 @@ def book(competition,club): @app.route('/purchasePlaces',methods=['POST']) def purchasePlaces(): + MAX_BOOKING = 12 competition = [c for c in competitions if c['name'] == request.form['competition']][0] club = [c for c in clubs if c['name'] == request.form['club']][0] placesRequired = int(request.form['places']) @@ -55,7 +56,12 @@ def purchasePlaces(): if placesRequired > club_points: flash("Cannot book more places than club points.") - return render_template('welcome.html', club=club, competitions=competitions) + return render_template('welcome.html', club=club, competitions=competitions) + + + if placesRequired > MAX_BOOKING: + flash(f"Cannot book more than {MAX_BOOKING} places for this competition.") + return render_template('welcome.html', club=club, competitions=competitions) competition['numberOfPlaces'] = int(competition['numberOfPlaces']) - placesRequired flash('Great - booking complete!') diff --git a/tests/unit/test_book_more_than_12_places.py b/tests/unit/test_book_more_than_12_places.py new file mode 100644 index 000000000..e238b9569 --- /dev/null +++ b/tests/unit/test_book_more_than_12_places.py @@ -0,0 +1,47 @@ +import server + +""" +Unit test file to check that clubs cannot book more than 12 places. + +Test 1: Club A has 13 points and competition 1 has 25 places. + - Book 12 places + - status code 200 + - message: "Great - booking complete!" + - competition places decreased + +Test 2: Club A has 13 points and competition 1 has 25 places. + - Book 13 places + - status code 200 + - message contains "Cannot book more than" + - competition places unchanged +""" + + +def test_book_12_places_allowed(client): + server.clubs = [{"name": "Club A", "points": "13"}] + server.competitions = [{"name": "Comp 1", "numberOfPlaces": "25"}] + + response = client.post('/purchasePlaces', data={ + 'competition': 'Comp 1', + 'club': 'Club A', + 'places': '12' + }) + + assert response.status_code == 200 + assert b"Great - booking complete!" in response.data + assert int(server.competitions[0]['numberOfPlaces']) == 13 + + +def test_cannot_book_more_than_12_places(client): + server.clubs = [{"name": "Club A", "points": "13"}] + server.competitions = [{"name": "Comp 1", "numberOfPlaces": "25"}] + + response = client.post('/purchasePlaces', data={ + 'competition': 'Comp 1', + 'club': 'Club A', + 'places': '13' + }) + + assert response.status_code == 200 + assert b"Cannot book more than" in response.data + assert int(server.competitions[0]['numberOfPlaces']) == 25 \ No newline at end of file