Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions metabrainz/payments/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from flask import Blueprint, request, render_template, url_for, redirect, current_app, jsonify
from flask_babel import gettext
from flask_login import current_user, login_required
from flask_login import current_user
from werkzeug.datastructures import MultiDict

from metabrainz.payments import SUPPORTED_CURRENCIES, Currency
Expand Down Expand Up @@ -57,27 +57,26 @@ def donate():


@payments_bp.route('/payment/')
@login_required
def payment_selector():
"""Payment page for organizations. Shows currency selection."""
return render_template('payments/payment_selector.html')


@payments_bp.route('/payment/<currency>')
@login_required
def payment(currency):
"""Payment page for organizations."""
currency = currency.lower()
if currency not in SUPPORTED_CURRENCIES:
return redirect(url_for('.payment_selector'))
supporter = current_user if current_user.is_authenticated else None
formdata = [("currency", currency)]
if current_user.amount_pledged:
formdata.append(("amount", str(current_user.amount_pledged)))
if supporter and supporter.amount_pledged:
formdata.append(("amount", str(supporter.amount_pledged)))
return render_template(
'payments/payment.html',
form=PaymentForm(formdata=MultiDict(formdata)),
currency=currency,
supporter=current_user,
supporter=supporter,
)


Expand Down
20 changes: 11 additions & 9 deletions metabrainz/payments/views_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,14 @@ class PaymentsViewsTestCase(FlaskTestCase):
def test_donate(self):
self.assert200(self.client.get(url_for('payments.donate')))

def test_payment_selector_requires_login(self):
resp = self.client.get(url_for('payments.payment_selector'))
self.assertIn(resp.status_code, (301, 302))
self.assertIn('/login', resp.location)
def test_payment_selector_is_public(self):
self.assert200(self.client.get(url_for('payments.payment_selector')))

def test_payment_requires_login(self):
def test_payment_is_public(self):
resp = self.client.get(url_for('payments.payment', currency='usd'))
self.assertIn(resp.status_code, (301, 302))
self.assertIn('/login', resp.location)
self.assert200(resp)
self.assertNotIn(b'Organization:', resp.data)
self.assertNotIn(b'Supporter level:', resp.data)

def _create_supporter(self, **kwargs):
defaults = dict(
Expand All @@ -36,9 +35,12 @@ def test_payment_selector_logged_in(self):
self.assert200(self.client.get(url_for('payments.payment_selector')))

def test_payment_logged_in(self):
supporter = self._create_supporter()
supporter = self._create_supporter(org_name='Test Org')
self.temporary_login(supporter.id)
self.assert200(self.client.get(url_for('payments.payment', currency='usd')))
resp = self.client.get(url_for('payments.payment', currency='usd'))
self.assert200(resp)
self.assertIn(b'Organization:', resp.data)
self.assertIn(b'Test Org', resp.data)
self.assert200(self.client.get(url_for('payments.payment', currency='eur')))

def test_cancel_recurring(self):
Expand Down
2 changes: 1 addition & 1 deletion metabrainz/templates/payments/payment.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
</div>
{% endif %}

{% if supporter.org_name or supporter.tier %}
{% if supporter and (supporter.org_name or supporter.tier) %}
<div class="panel panel-info">
<div class="panel-body">
{% if supporter.org_name %}
Expand Down
Loading