Merge pull request 'bug/issue6' (#6) from bug/issue6 into QA

Reviewed-on: #6
This commit was merged in pull request #6.
This commit is contained in:
2025-07-09 15:53:28 +00:00
3 changed files with 64 additions and 20 deletions

View File

@@ -57,15 +57,20 @@ def purchasePlaces():
competition = [c for c in competitions if c['name'] == request.form['competition']][0] 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] club = [c for c in clubs if c['name'] == request.form['club']][0]
placesRequired = int(request.form['places']) placesRequired = int(request.form['places'])
# check if that's the first book, and update session
if competition['name'] in session: if competition['name'] in session:
places = {competition['name']: session[competition['name']] + placesRequired} places = {competition['name']: session[competition['name']] + placesRequired}
else: else:
places = {competition['name']: placesRequired} places = {competition['name']: placesRequired}
points = int(club['points']) points = int(club['points'])
# prevent to book more than 12 places
if placesRequired <= 12: if placesRequired <= 12:
if places[competition['name']] <= 12: if places[competition['name']] <= 12:
# prevent to book more than available points
if placesRequired <= points: if placesRequired <= points:
competition['numberOfPlaces'] = int(competition['numberOfPlaces']) - placesRequired competition['numberOfPlaces'] = int(competition['numberOfPlaces']) - placesRequired
club['points'] = int(club['points']) - placesRequired
# set the session if that's the first book for this competition
if not competition['name'] in session: if not competition['name'] in session:
session[competition['name']] = placesRequired session[competition['name']] = placesRequired
flash(f"Great ! {placesRequired} places booked for {competition['name']}") flash(f"Great ! {placesRequired} places booked for {competition['name']}")
@@ -85,5 +90,3 @@ def purchasePlaces():
def logout(): def logout():
return redirect(url_for('index')) return redirect(url_for('index'))
if (__name__ == "__main__"):
app.run(debug=True)

View File

@@ -3,49 +3,78 @@ from flask import session
class TestPoints: class TestPoints:
'''
def test_should_nok_when_too_much_points(self, client, connect, club1): testing both case, book with and without enough points
'''
def test_should_nok_when_too_much_points(self, client, connect, club2):
'''
test booking an amount of places greater than the available points
'''
points = int(connect.span.text) points = int(connect.span.text)
club1.update({"places": points+1}) club2.update({"places": points+1})
response = client.post('/purchasePlaces', data=club1) response = client.post('/purchasePlaces', data=club2)
soup = BeautifulSoup(response.data, "html.parser") soup = BeautifulSoup(response.data, "html.parser")
assert "You don't have enough points" == soup.li.text assert "You don't have enough points" == soup.li.text
def test_should_ok_when_enough_points(self, client, connect, club1): def test_should_ok_when_enough_points(self, client, connect, club2):
'''
test booking with enough points
'''
points = int(connect.span.text) points = int(connect.span.text)
club1.update({"places": points-1}) # One remaining point after that :
response = client.post('/purchasePlaces', data=club1) club2.update({"places": points-1})
response = client.post('/purchasePlaces', data=club2)
soup = BeautifulSoup(response.data, "html.parser") soup = BeautifulSoup(response.data, "html.parser")
assert f"Great ! "+str(points-1)+" places booked for "+club1['competition'] == soup.li.text assert f"Great ! "+str(points-1)+" places booked for "+club2['competition'] == soup.li.text
class TestPlaces: class TestPlaces:
'''
test the booking limit of 12 places
'''
def test_should_refuse_more_12_once(self, client, club1): def test_should_refuse_more_12_once(self, client, club2):
club1.update({"places": 13}) '''
response = client.post('/purchasePlaces', data=club1) test to book more than 12 places in one shot
'''
club2.update({"places": 13})
response = client.post('/purchasePlaces', data=club2)
soup = BeautifulSoup(response.data, "html.parser") soup = BeautifulSoup(response.data, "html.parser")
assert "You can't book more than 12 places" == soup.li.text assert "You can't book more than 12 places" == soup.li.text
def test_should_refuse_more_12_total(self, client, club1): def test_should_refuse_more_12_total(self, client, club2):
club1.update({"places": 2}) '''
response = client.post('/purchasePlaces', data=club1) test to book more than 12 places in a two-part reservation
'''
club2.update({"places": 1})
response = client.post('/purchasePlaces', data=club2)
soup = BeautifulSoup(response.data, "html.parser") soup = BeautifulSoup(response.data, "html.parser")
assert "Great ! 2 places booked for "+club1['competition'] == soup.li.text assert "Great ! 1 places booked for "+club2['competition'] == soup.li.text
club1.update({"places": 12}) club2.update({"places": 12})
response = client.post('/purchasePlaces', data=club1) response = client.post('/purchasePlaces', data=club2)
soup = BeautifulSoup(response.data, "html.parser") soup = BeautifulSoup(response.data, "html.parser")
assert "You already booked 12 places for "+club1['competition'] == soup.li.text assert "You already booked 12 places for "+club2['competition'] == soup.li.text
class TestDate: class TestDate:
'''
test the booking for the past competitions
'''
def test_should_not_display_book_link_for_past_competitions(self, connect): def test_should_not_display_book_link_for_past_competitions(self, connect):
'''
test that the booking link isn't displayed when competition date is older than today
'''
li = connect.find_all("li") li = connect.find_all("li")
assert not li[0].a assert not li[0].a
assert li[1].a assert li[1].a
def test_forged_url_on_past_competition_should_raise_flash(self, client): def test_forged_url_on_past_competition_should_raise_flash(self, client):
'''
test that a flash warning occur when trying to connect to an URL on an old competition
'''
url = '/book/Spring Festival/Iron Temple' url = '/book/Spring Festival/Iron Temple'
response = client.get(url) response = client.get(url)
assert "You cannot book for a past competition" in response.data.decode() assert "You cannot book for a past competition" in response.data.decode()

12
tests/test_update.py Normal file
View File

@@ -0,0 +1,12 @@
class TestPointsUpdate:
def test_should_not_be_ok_the_second_time(self, connect, client, club2):
'''
this books an amount of points-1 places
then test if 1 points remains displayed on page
'''
points = int(connect.span.text)
club2.update({"places": points-1})
response = client.post('/purchasePlaces', data=club2)
assert f"Great ! {points-1} places booked for {club2['competition']}" in response.data.decode()