Skip to content

Commit e213b07

Browse files
authored
Merge pull request #3 from Imed7223/bug/correction-mise-a-jour-points
Correction bug 3: Mise à jour correction des points après réservation…
2 parents 255eed0 + 96d7b5e commit e213b07

File tree

2 files changed

+80
-2
lines changed

2 files changed

+80
-2
lines changed

server.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def index():
2626

2727
@app.route('/showSummary',methods=['POST'])
2828
def showSummary():
29-
# Correction bug1 "email"
29+
# Correction BUG 1 "email"
3030
email = request.form.get('email')
3131
club = next((club for club in clubs if club['email'] == email), None)
3232

@@ -50,15 +50,29 @@ def book(competition,club):
5050

5151
@app.route('/purchasePlaces',methods=['POST'])
5252
def purchasePlaces():
53+
# Trouver la compétition et le club
5354
competition = [c for c in competitions if c['name'] == request.form['competition']][0]
5455
club = [c for c in clubs if c['name'] == request.form['club']][0]
5556
placesRequired = int(request.form['places'])
5657
competition['numberOfPlaces'] = int(competition['numberOfPlaces'])-placesRequired
58+
59+
# Validation des points disponibles
60+
if placesRequired > int(club['points']):
61+
flash("Your club doesn't have enough points")
62+
return render_template('welcome.html', club=club, competitions=competitions), 400
63+
64+
competition_places = int(competition['numberOfPlaces'])
65+
club_points = int(club['points'])
66+
67+
# Correction BUG 3: Mise à jour des points du club
68+
competition['numberOfPlaces'] = competition_places - placesRequired
69+
club['points'] = club_points - placesRequired
70+
5771
flash('Great-booking complete!')
5872
return render_template('welcome.html', club=club, competitions=competitions)
5973

6074

61-
# FONCTIONNALITÉ 2: Tableau d'affichage des points
75+
# FONCTIONNALITÉ BUG 2: Tableau d'affichage des points
6276
@app.route('/pointsDisplay')
6377
def pointsDisplay():
6478
return render_template('points_display.html', clubs=clubs)

tests/unit/test_points_update.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import sys
2+
import os
3+
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')))
4+
import pytest
5+
from server import app, clubs, competitions
6+
import json
7+
8+
@pytest.fixture
9+
def client():
10+
app.config['TESTING'] = True
11+
with app.test_client() as client:
12+
yield client
13+
14+
def test_points_deduction(client):
15+
"""Test que les points sont bien déduits après réservation"""
16+
# Données de test
17+
club_name = "Simply Lift"
18+
competition_name = "Spring Festival"
19+
places_required = 2
20+
21+
# Points initiaux
22+
initial_points = int(next(c['points'] for c in clubs if c['name'] == club_name))
23+
24+
# Faire la requête de réservation
25+
response = client.post('/purchasePlaces', data={
26+
'competition': competition_name,
27+
'club': club_name,
28+
'places': str(places_required)
29+
})
30+
31+
# Vérifications
32+
assert response.status_code == 200
33+
assert b"Great-booking complete!" in response.data
34+
35+
# Vérifier la mise à jour des points
36+
updated_points = int(next(c['points'] for c in clubs if c['name'] == club_name))
37+
assert updated_points == initial_points - places_required
38+
39+
def test_insufficient_points(client):
40+
"""Test que les points ne sont pas déduits si réservation impossible"""
41+
# Données de test
42+
club_name = "Iron Temple" # 4 points initialement
43+
competition_name = "Spring Festival"
44+
places_required = 5 # Plus que les points disponibles
45+
46+
# Points initiaux
47+
initial_points = int(next(c['points'] for c in clubs if c['name'] == club_name))
48+
49+
# Faire la requête de réservation
50+
response = client.post('/purchasePlaces', data={
51+
'competition': competition_name,
52+
'club': club_name,
53+
'places': str(places_required)
54+
})
55+
56+
# Vérifications
57+
assert response.status_code == 400
58+
# Vérifie soit la version encodée HTML soit décodée
59+
assert (b"Your club doesn't have enough points" in response.data or
60+
b"Your club doesn't have enough points" in response.data)
61+
62+
# Vérifier que les points n'ont pas changé
63+
current_points = int(next(c['points'] for c in clubs if c['name'] == club_name))
64+
assert current_points == initial_points

0 commit comments

Comments
 (0)