Tell user when there's an error (bug 686051)

This commit is contained in:
Gregory Koberger 2011-12-07 17:21:44 -08:00
Родитель 88d2227045
Коммит a34e5a3e1e
7 изменённых файлов: 63 добавлений и 2 удалений

Просмотреть файл

@ -0,0 +1,29 @@
{% extends "base_modal.html" if is_ajax else "base.html" %}
{% block classes %}paypal-modal{% endblock %}
{% block content %}
<section class="paypal-parent paypal-thank-you" id="addon_info" data-addon="{{ addon.id }}">
{% if addon.is_webapp() %}
<h2>{{ loc('Purchase App') }}</h2>
{% else %}
<h2>{{ loc('Purchase Add-on') }}</h2>
{% endif %}
<h5 class="error">{{ loc('Error with your purchase') }}</h5>
{# TODO(apps): Finalize copy. #}
{% with addon_name=addon.name, support_link="mailto:%s" % settings.MARKETPLACE_EMAIL %}
<p>
Unfortunately, your purchase of <strong class='addon-title'>{{ addon_name }}</strong> could <strong>not</strong> be completed.
</p>
<p>You can try again, or <a href="{{ support_link }}">try contacting us</a>.</p>
{% endwith %}
</section>
<section class="paypal-parent">
<a href="{{ url('users.purchases') }}">{{ loc('My Purchases') }}</a>
{# TODO(marketplace-docs)
&middot;
<a href="{{ url('devhub.docs', doc_name='marketplace') }}">{{ loc('Marketplace Support') }}</a>
#}
</section>
{% endblock %}

Просмотреть файл

@ -19,7 +19,10 @@
{{ addon|sidebar_listing }}
</aside>
<section class="primary island c">
{% if status != 'cancel' %}
{% if status == 'error' %}
<a href="{{ shared_url('addons.purchase.error', addon)|urlparams(realurl=realurl) }}"
id="paypal-error">Error</a>
{% elif status != 'cancel' %}
{% if addon.is_premium() %}
<a href="{{ shared_url('addons.purchase.thanks', addon)|urlparams(realurl=realurl) }}"
id="paypal-thanks">

Просмотреть файл

@ -359,6 +359,17 @@ class TestPurchaseEmbedded(amo.tests.TestCase):
eq_(cons[0].type, amo.CONTRIB_PURCHASE)
assert cons[0].uuid
@patch('paypal.check_purchase')
def test_check_addon_purchase_error(self, check_purchase):
check_purchase.return_value = 'ERROR'
self.make_contribution()
res = self.client.get_ajax('%s?uuid=%s' %
(self.get_url('complete'), '123'))
doc = pq(res.content)
eq_(doc('#paypal-error').length, 1)
eq_(res.context['status'], 'error')
@patch('paypal.check_purchase')
def test_check_addon_purchase(self, check_purchase):
check_purchase.return_value = 'COMPLETED'

Просмотреть файл

@ -35,6 +35,8 @@ detail_patterns = patterns('',
name='addons.purchase.start'),
url('^purchase/thanks/$', views.purchase_thanks,
name='addons.purchase.thanks'),
url('^purchase/error/$', views.purchase_error,
name='addons.purchase.error'),
url('^purchase/(?P<status>cancel|complete)$',
views.purchase_complete, name='addons.purchase.finished'),

Просмотреть файл

@ -562,6 +562,8 @@ def purchase_complete(request, addon, status):
% (addon.pk, request.amo_user.pk, con.paykey[:10]))
try:
result = paypal.check_purchase(con.paykey)
if result == 'ERROR':
raise
except:
log.error('Check purchase paypal addon: %s, user: %s, paykey: %s'
% (addon.pk, request.amo_user.pk, con.paykey[:10]),
@ -603,6 +605,14 @@ def purchase_thanks(request, addon):
return jingo.render(request, 'addons/paypal_thanks.html', data)
@login_required
@addon_view
@can_be_purchased
def purchase_error(request, addon):
data = {'addon': addon, 'is_ajax': request.is_ajax()}
return jingo.render(request, 'addons/paypal_error.html', data)
@addon_view
def contribute(request, addon):
webapp = addon.is_webapp()

Просмотреть файл

@ -23,6 +23,8 @@ detail_patterns = patterns('',
url('^purchase/$', addons_views.purchase, name='apps.purchase'),
url(r'purchase/start$', addons_views.paypal_start,
name='apps.purchase.start'),
url('^purchase/error/$', addons_views.purchase_error,
name='apps.purchase.error'),
url('^purchase/thanks/$', addons_views.purchase_thanks,
name='apps.purchase.thanks'),
url('^purchase/(?P<status>cancel|complete)$',

Просмотреть файл

@ -79,9 +79,13 @@ var purchases = {
}
if (top_dgFlow !== null) {
var thanks_url = $('#paypal-thanks').attr('href');
var thanks_url = $('#paypal-thanks').attr('href'),
error_url = $('#paypal-error').attr('href');
if(thanks_url) {
top_opener.modalFromURL(thanks_url);
} else if(error_url) {
top_opener.modalFromURL(error_url);
}
top_dgFlow.closeFlow();