From 2514eedf427129483849c2dd742542b27cc2b4ed Mon Sep 17 00:00:00 2001 From: laurence Date: Sat, 14 Jun 2025 18:05:50 +0200 Subject: [PATCH 01/10] =?UTF-8?q?Bug=20booking=20sur=20date=20pass=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/server.py b/server.py index 4084baeac..341f07b4f 100644 --- a/server.py +++ b/server.py @@ -1,4 +1,6 @@ import json +from datetime import datetime + from flask import Flask,render_template,request,redirect,flash,url_for @@ -46,7 +48,10 @@ def purchasePlaces(): 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']) - competition['numberOfPlaces'] = int(competition['numberOfPlaces'])-placesRequired + if datetime.strptime(competition['date'], "%Y-%m-%d %H:%M:%S") < datetime.now(): + flash("You cannot book place in past competition") + return render_template('welcome.html', club=club, competitions=competitions) + competition['numberOfPlaces'] = int(competition['numberOfPlaces']) - placesRequired flash('Great-booking complete!') return render_template('welcome.html', club=club, competitions=competitions) From a3f9921bc0567b4f89744cc32abc05df8eb7767e Mon Sep 17 00:00:00 2001 From: laurence Date: Sun, 15 Jun 2025 21:13:42 +0200 Subject: [PATCH 02/10] Bug 12 places --- server.py | 3 +++ templates/booking.html | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/server.py b/server.py index 4084baeac..d407bbb08 100644 --- a/server.py +++ b/server.py @@ -46,6 +46,9 @@ def purchasePlaces(): 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']) + if placesRequired > 12: + flash("you can not book more than 12 places") + return render_template('welcome.html', club=club, competitions=competitions) competition['numberOfPlaces'] = int(competition['numberOfPlaces'])-placesRequired flash('Great-booking complete!') return render_template('welcome.html', club=club, competitions=competitions) diff --git a/templates/booking.html b/templates/booking.html index 06ae1156c..1f0f01c62 100644 --- a/templates/booking.html +++ b/templates/booking.html @@ -10,7 +10,7 @@

{{competition['name']}}

- +
From 84879861440721447bc09c00f855f996d63224f7 Mon Sep 17 00:00:00 2001 From: laurence Date: Sun, 15 Jun 2025 21:53:49 +0200 Subject: [PATCH 03/10] Bug points available --- server.py | 3 ++- templates/booking.html | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/server.py b/server.py index 4084baeac..6ba71806e 100644 --- a/server.py +++ b/server.py @@ -46,8 +46,9 @@ def purchasePlaces(): 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']) - competition['numberOfPlaces'] = int(competition['numberOfPlaces'])-placesRequired + competition['numberOfPlaces'] = int(competition['numberOfPlaces']) - placesRequired flash('Great-booking complete!') + club["points"] = int(club["points"]) - placesRequired return render_template('welcome.html', club=club, competitions=competitions) diff --git a/templates/booking.html b/templates/booking.html index 06ae1156c..5cdb25a3a 100644 --- a/templates/booking.html +++ b/templates/booking.html @@ -10,7 +10,7 @@

{{competition['name']}}

- +
From 9ece5b365d815718ad042ac9b591b998284a3ae5 Mon Sep 17 00:00:00 2001 From: laurence Date: Sun, 22 Jun 2025 11:35:49 +0200 Subject: [PATCH 04/10] branch error --- server.py | 1 - 1 file changed, 1 deletion(-) diff --git a/server.py b/server.py index 6ba71806e..e28456dfa 100644 --- a/server.py +++ b/server.py @@ -48,7 +48,6 @@ def purchasePlaces(): placesRequired = int(request.form['places']) competition['numberOfPlaces'] = int(competition['numberOfPlaces']) - placesRequired flash('Great-booking complete!') - club["points"] = int(club["points"]) - placesRequired return render_template('welcome.html', club=club, competitions=competitions) From 7e883be1dc92c35c6e93aed800dc906adfd57869 Mon Sep 17 00:00:00 2001 From: laurence Date: Sun, 22 Jun 2025 11:39:48 +0200 Subject: [PATCH 05/10] fix bug --- server.py | 1 + 1 file changed, 1 insertion(+) diff --git a/server.py b/server.py index 4084baeac..f41ce1ae9 100644 --- a/server.py +++ b/server.py @@ -48,6 +48,7 @@ def purchasePlaces(): placesRequired = int(request.form['places']) competition['numberOfPlaces'] = int(competition['numberOfPlaces'])-placesRequired flash('Great-booking complete!') + club["points"] = int(club["points"]) - placesRequired return render_template('welcome.html', club=club, competitions=competitions) From dd048924059846a2e9fa9e44dfaa02be519992e1 Mon Sep 17 00:00:00 2001 From: laurence Date: Sun, 22 Jun 2025 11:54:17 +0200 Subject: [PATCH 06/10] fix bug --- server.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server.py b/server.py index e28456dfa..17f1e8d98 100644 --- a/server.py +++ b/server.py @@ -47,6 +47,9 @@ def purchasePlaces(): club = [c for c in clubs if c['name'] == request.form['club']][0] placesRequired = int(request.form['places']) competition['numberOfPlaces'] = int(competition['numberOfPlaces']) - placesRequired + if placesRequired > int(club["points"]): + flash("you can not book more than available points") + return render_template('welcome.html', club=club, competitions=competitions) flash('Great-booking complete!') return render_template('welcome.html', club=club, competitions=competitions) From 2400c218ce7cb9de51dfff34d090b17d17089536 Mon Sep 17 00:00:00 2001 From: laurence Date: Sun, 22 Jun 2025 15:06:42 +0200 Subject: [PATCH 07/10] added unit testing --- test/tests_unitaires/test_server.py | 42 +++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 test/tests_unitaires/test_server.py diff --git a/test/tests_unitaires/test_server.py b/test/tests_unitaires/test_server.py new file mode 100644 index 000000000..82e3704b7 --- /dev/null +++ b/test/tests_unitaires/test_server.py @@ -0,0 +1,42 @@ +import pytest +from server import app + +@pytest.fixture +def client(): + app.config['TESTING'] = True + with app.test_client() as client: + yield client + +def test_purchase_places_more_than_points(client, monkeypatch): + # Simuler un club avec seulement 2 points + test_club = {"name": "Test Club", "email": "test@club.com", "points": "2"} + test_competition = {"name": "Test Competition", "numberOfPlaces": "10", "date": "2025-12-12 10:00:00"} + + # Patch les données dans server.py + monkeypatch.setattr("server.clubs", [test_club]) + monkeypatch.setattr("server.competitions", [test_competition]) + + # Envoyer un formulaire avec 5 places (plus que les 2 points disponibles) + response = client.post("/purchasePlaces", data={ + "competition": "Test Competition", + "club": "Test Club", + "places": "5" + }, follow_redirects=True) + + # Vérifier que le message d'erreur s'affiche + assert b"you can not book more than available points" in response.data + +def test_purchase_places_success(client, monkeypatch): + test_club = {"name": "Test Club", "email": "test@club.com", "points": "10"} + test_competition = {"name": "Test Competition", "numberOfPlaces": "15", "date": "2025-12-12 10:00:00"} + + monkeypatch.setattr("server.clubs", [test_club]) + monkeypatch.setattr("server.competitions", [test_competition]) + + response = client.post("/purchasePlaces", data={ + "competition": "Test Competition", + "club": "Test Club", + "places": "3" + }, follow_redirects=True) + + assert b"Great-booking complete!" in response.data From 2aa273c59d60839bee5041e872162a95f707989e Mon Sep 17 00:00:00 2001 From: laurence Date: Tue, 24 Jun 2025 14:43:29 +0200 Subject: [PATCH 08/10] added unit testing --- test/tests_unitaires/test_server.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 test/tests_unitaires/test_server.py diff --git a/test/tests_unitaires/test_server.py b/test/tests_unitaires/test_server.py new file mode 100644 index 000000000..d8025fef0 --- /dev/null +++ b/test/tests_unitaires/test_server.py @@ -0,0 +1,29 @@ +import pytest +from server import app + +@pytest.fixture +def client(): + app.config['TESTING'] = True + with app.test_client() as client: + yield client + +def test_competition_places_are_decreased(client, monkeypatch): + # Club avec assez de points + test_club = {"name": "Test Club", "email": "test@club.com", "points": "20"} + # Compétition avec 10 places + test_competition = {"name": "Test Competition", "numberOfPlaces": "10", "date": "2025-12-12 10:00:00"} + + # Patch les données directement dans server.py + monkeypatch.setattr("server.clubs", [test_club]) + monkeypatch.setattr("server.competitions", [test_competition]) + + # POST de réservation de 3 places + response = client.post("/purchasePlaces", data={ + "competition": "Test Competition", + "club": "Test Club", + "places": "3" + }, follow_redirects=True) + + # Vérifie que la compétition a bien été mise à jour + assert test_competition["numberOfPlaces"] == 7 # 10 - 3 + From 3ff5a2873c64493d7e4e33b97c94c1d255828f90 Mon Sep 17 00:00:00 2001 From: laurence Date: Tue, 24 Jun 2025 14:52:12 +0200 Subject: [PATCH 09/10] added unit testing --- test/tests_unitaires/test_server.py | 34 +++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 test/tests_unitaires/test_server.py diff --git a/test/tests_unitaires/test_server.py b/test/tests_unitaires/test_server.py new file mode 100644 index 000000000..9ad2a14c0 --- /dev/null +++ b/test/tests_unitaires/test_server.py @@ -0,0 +1,34 @@ +import pytest +from server import app +from datetime import datetime, timedelta + +@pytest.fixture +def client(): + app.config['TESTING'] = True + app.secret_key = "test" # Nécessaire pour flash + with app.test_client() as client: + yield client + +def test_booking_past_competition(client, monkeypatch): + # Compétition passée (hier) + past_date = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S") + test_competition = {"name": "Past Competition", "numberOfPlaces": "10", "date": past_date} + test_club = {"name": "Test Club", "email": "test@club.com", "points": "15"} + + monkeypatch.setattr("server.clubs", [test_club]) + monkeypatch.setattr("server.competitions", [test_competition]) + + response = client.post("/purchasePlaces", data={ + "competition": "Past Competition", + "club": "Test Club", + "places": "2" + }, follow_redirects=True) + + # Vérifie que le message d'erreur apparaît + assert b"You cannot book place in past competition" in response.data + + # Vérifie que les places n'ont pas été modifiées + assert test_competition["numberOfPlaces"] == "10" + + # Vérifie que les points du club n'ont pas changé + assert test_club["points"] == "15" From 4c2c3e4fc121523e124f20705be41353c4a8f311 Mon Sep 17 00:00:00 2001 From: laurence Date: Tue, 24 Jun 2025 14:56:57 +0200 Subject: [PATCH 10/10] added unit testing --- test/tests_unitaires/test_server.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 test/tests_unitaires/test_server.py diff --git a/test/tests_unitaires/test_server.py b/test/tests_unitaires/test_server.py new file mode 100644 index 000000000..ce9b3f0ad --- /dev/null +++ b/test/tests_unitaires/test_server.py @@ -0,0 +1,29 @@ +import pytest +from server import app + +@pytest.fixture +def client(): + app.config['TESTING'] = True + app.secret_key = "test" + with app.test_client() as client: + yield client + +def test_booking_more_than_12_places(client, monkeypatch): + test_club = {"name": "Test Club", "email": "test@club.com", "points": "50"} + test_competition = {"name": "Test Competition", "numberOfPlaces": "25", "date": "2025-12-12 10:00:00"} + + monkeypatch.setattr("server.clubs", [test_club]) + monkeypatch.setattr("server.competitions", [test_competition]) + + response = client.post("/purchasePlaces", data={ + "competition": "Test Competition", + "club": "Test Club", + "places": "13" # > 12 → doit déclencher le bloc + }, follow_redirects=True) + + # Vérifie que le message flash est bien là + assert b"you can not book more than 12 places" in response.data + + # Vérifie que les données n'ont pas été modifiées + assert test_competition["numberOfPlaces"] == "25" + assert test_club["points"] == "50"