diff --git a/server.py b/server.py index c399c9b..dc9ea82 100644 --- a/server.py +++ b/server.py @@ -57,15 +57,20 @@ 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']) + # check if that's the first book, and update session if competition['name'] in session: places = {competition['name']: session[competition['name']] + placesRequired} else: places = {competition['name']: placesRequired} points = int(club['points']) + # prevent to book more than 12 places if placesRequired <= 12: if places[competition['name']] <= 12: + # prevent to book more than available points if placesRequired <= points: 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: session[competition['name']] = placesRequired flash(f"Great ! {placesRequired} places booked for {competition['name']}") @@ -85,5 +90,3 @@ def purchasePlaces(): def logout(): return redirect(url_for('index')) -if (__name__ == "__main__"): - app.run(debug=True) diff --git a/tests/test_purchase.py b/tests/test_purchase.py index b235a45..f377fdd 100644 --- a/tests/test_purchase.py +++ b/tests/test_purchase.py @@ -3,49 +3,78 @@ from flask import session 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) - club1.update({"places": points+1}) - response = client.post('/purchasePlaces', data=club1) + club2.update({"places": points+1}) + response = client.post('/purchasePlaces', data=club2) soup = BeautifulSoup(response.data, "html.parser") 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) - club1.update({"places": points-1}) - response = client.post('/purchasePlaces', data=club1) + # One remaining point after that : + club2.update({"places": points-1}) + response = client.post('/purchasePlaces', data=club2) 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: + ''' + test the booking limit of 12 places + ''' - def test_should_refuse_more_12_once(self, client, club1): - club1.update({"places": 13}) - response = client.post('/purchasePlaces', data=club1) + def test_should_refuse_more_12_once(self, client, club2): + ''' + 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") assert "You can't book more than 12 places" == soup.li.text - def test_should_refuse_more_12_total(self, client, club1): - club1.update({"places": 2}) - response = client.post('/purchasePlaces', data=club1) + def test_should_refuse_more_12_total(self, client, club2): + ''' + 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") - assert "Great ! 2 places booked for "+club1['competition'] == soup.li.text - club1.update({"places": 12}) - response = client.post('/purchasePlaces', data=club1) + assert "Great ! 1 places booked for "+club2['competition'] == soup.li.text + club2.update({"places": 12}) + response = client.post('/purchasePlaces', data=club2) 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: + ''' + test the booking for the past competitions + ''' 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") assert not li[0].a assert li[1].a 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' response = client.get(url) assert "You cannot book for a past competition" in response.data.decode() + diff --git a/tests/test_update.py b/tests/test_update.py new file mode 100644 index 0000000..8a0191b --- /dev/null +++ b/tests/test_update.py @@ -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()