Ensure coupons are only used once (#1718)
* Ensure coupons are only used once * Update test to handle redirect --------- Co-authored-by: Adrià Casajús <adria.casajus@proton.ch>
This commit is contained in:
parent
6276ad4419
commit
7cb7b48845
|
@ -68,9 +68,14 @@ def coupon_route():
|
||||||
)
|
)
|
||||||
return redirect(request.url)
|
return redirect(request.url)
|
||||||
|
|
||||||
coupon.used_by_user_id = current_user.id
|
updated = (
|
||||||
coupon.used = True
|
Session.query(Coupon)
|
||||||
Session.commit()
|
.filter_by(code=code, used=False)
|
||||||
|
.update({"used_by_user_id": current_user.id, "used": True})
|
||||||
|
)
|
||||||
|
if updated != 1:
|
||||||
|
flash("Coupon is not valid", "error")
|
||||||
|
return redirect(request.url)
|
||||||
|
|
||||||
manual_sub: ManualSubscription = ManualSubscription.get_by(
|
manual_sub: ManualSubscription = ManualSubscription.get_by(
|
||||||
user_id=current_user.id
|
user_id=current_user.id
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
from flask import url_for
|
||||||
|
from app.models import Coupon
|
||||||
|
from app.utils import random_string
|
||||||
|
from tests.utils import login
|
||||||
|
|
||||||
|
|
||||||
|
def test_use_coupon(flask_client):
|
||||||
|
user = login(flask_client)
|
||||||
|
code = random_string(10)
|
||||||
|
Coupon.create(code=code, nb_year=1, commit=True)
|
||||||
|
|
||||||
|
r = flask_client.post(
|
||||||
|
url_for("dashboard.coupon_route"),
|
||||||
|
data={"code": code},
|
||||||
|
)
|
||||||
|
|
||||||
|
assert r.status_code == 302
|
||||||
|
coupon = Coupon.get_by(code=code)
|
||||||
|
assert coupon.used
|
||||||
|
assert coupon.used_by_user_id == user.id
|
Loading…
Reference in New Issue