Coverage for donate\views.py: 35%

34 statements  

« prev     ^ index     » next       coverage.py v7.4.4, created at 2024-06-20 12:38 +0100

1import stripe 

2from django.conf import settings 

3from django.contrib import messages 

4from django.contrib.auth import get_user 

5from django.shortcuts import redirect 

6from stripe.error import StripeError 

7 

8from donate.models import StripeTransaction, Payment 

9from donation.models import Donation 

10 

11 

12def update_user_details(request): 

13 user = get_user(request) 

14 user.first_name = request.POST['first-name'] 

15 user.last_name = request.POST['last-name'] 

16 user.email = request.POST['email'] 

17 user.save() 

18 

19 

20def save_transaction(request, charge): 

21 Payment.objects.create( 

22 user=get_user(request), 

23 donation=Donation.objects.get(id=request.POST['cause']), 

24 stripe_payment=StripeTransaction.objects.create( 

25 stripe_charge_id=charge['id'], 

26 amount=charge['amount'] / 100, 

27 ) 

28 ) 

29 

30 

31def make_stripe_payment(request): 

32 stripe.api_key = settings.STRIPE_SK 

33 user = get_user(request) 

34 

35 try: 

36 return stripe.Charge.create( 

37 amount=int(request.POST['custom-amount']) * 100, 

38 currency='usd', 

39 description=Donation.objects.get(id=request.POST['cause']).title, 

40 customer=stripe.Customer.create( 

41 email=user.email, 

42 name=user.username, 

43 source=request.POST['stripeToken'] 

44 ) 

45 ) 

46 except StripeError as e: 

47 messages.error(request, str(e)) 

48 return None 

49 

50 

51def donate(request): 

52 if request.method == 'POST': 

53 update_user_details(request) 

54 charge = make_stripe_payment(request) 

55 if charge is None: 

56 return redirect('donations') 

57 save_transaction(request, charge) 

58 message = (f'Thank you for your donation of ' 

59 f'${int(charge["amount"] / 100)}, You may see it in ' 

60 f'the first row of this table') 

61 messages.success(request, message) 

62 return redirect('history')