Skip to content
This repository has been archived by the owner on Jan 25, 2018. It is now read-only.

Commit

Permalink
pay logic -> only API essentials (bug 1130477)
Browse files Browse the repository at this point in the history
  • Loading branch information
kumar303 committed Apr 9, 2015
1 parent e261b19 commit 7a82d96
Show file tree
Hide file tree
Showing 41 changed files with 862 additions and 1,852 deletions.
25 changes: 2 additions & 23 deletions lib/solitude/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,27 +108,6 @@ def update_buyer(self, uuid, etag='', **kwargs):
return res
return {}

def set_needs_pin_reset(self, uuid, value=True, etag=''):
"""Set flag for user to go through reset flow or not on next log in.
:param uuid: String to identify the buyer by.
:param value: Boolean for whether they should go into the reset flow or
not, defaults to True
:rtype: dictionary
"""
return self.update_buyer(uuid,
etag=etag,
needs_pin_reset=value,
new_pin=None)

def unset_was_locked(self, uuid, etag=''):
"""Unsets the flag to view the was_locked screen.
:param uuid: String to identify the buyer by.
:rtype: dictionary
"""
return self.update_buyer(uuid, etag=etag, pin_was_locked_out=False)

def change_pin(self, uuid, pin, etag='', pin_confirmed=False,
clear_was_locked=False):
"""Changes the pin of a buyer, for use with buyers who exist without
Expand Down Expand Up @@ -616,9 +595,9 @@ def create_transaction(self, generic_buyer, generic_seller,
'currency': currency,
'pay_method': pay_method,
'callback_success_url': absolutify(
reverse('pay.callback_success_url')),
reverse('api:pay.callback_success_url')),
'callback_error_url': absolutify(
reverse('pay.callback_error_url')),
reverse('api:pay.callback_error_url')),
'ext_transaction_id': transaction_uuid,
'success_url': absolutify(reverse('provider.success',
args=[self.name])),
Expand Down
52 changes: 0 additions & 52 deletions lib/solitude/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -300,58 +300,6 @@ def test_change_pin_clear_was_locked(self, slumber):
'pin_was_locked_out': False},
headers={'If-Match': ''})

def test_set_needs_pin_reset(self, slumber):
buyer = mock.Mock(return_value=self.buyer_data)
buyer.patch.return_value = {}
slumber.generic.buyer.return_value = buyer
res = client.set_needs_pin_reset(self.uuid)
eq_(res, {})

def test_set_needs_pin_reset_with_good_etag(self, slumber):
etag = 'etag:good'
buyer = mock.Mock(return_value=self.buyer_data)
buyer.patch.return_value = {}
slumber.generic.buyer.return_value = buyer
res = client.set_needs_pin_reset(self.uuid, etag=etag)
eq_(res, {})

def test_set_needs_pin_reset_with_wrong_etag(self, slumber):
wrong_etag = 'etag:wrong'
buyer = mock.Mock(return_value=self.buyer_data)
buyer.patch.side_effect = HttpClientError(
response=self.create_error_response(
status_code=412,
content={'ERROR': ['RESOURCE_MODIFIED']}))
slumber.generic.buyer.return_value = buyer
with self.assertRaises(ResourceModified):
client.set_needs_pin_reset(self.uuid, etag=wrong_etag)

def test_unset_needs_pin_reset(self, slumber):
buyer = mock.Mock(return_value=self.buyer_data)
buyer.patch.return_value = {}
slumber.generic.buyer.return_value = buyer
res = client.set_needs_pin_reset(self.uuid, False)
eq_(res, {})

def test_unset_needs_pin_reset_with_good_etag(self, slumber):
etag = 'etag:good'
buyer = mock.Mock(return_value=self.buyer_data)
buyer.patch.return_value = {}
slumber.generic.buyer.return_value = buyer
res = client.set_needs_pin_reset(self.uuid, False, etag=etag)
eq_(res, {})

def test_unset_needs_pin_reset_with_wrong_etag(self, slumber):
wrong_etag = 'etag:wrong'
buyer = mock.Mock(return_value=self.buyer_data)
buyer.patch.side_effect = HttpClientError(
response=self.create_error_response(
status_code=412,
content={'ERROR': ['RESOURCE_MODIFIED']}))
slumber.generic.buyer.return_value = buyer
with self.assertRaises(ResourceModified):
client.set_needs_pin_reset(self.uuid, False, etag=wrong_etag)


class TestBango(TestCase):
uuid = 'some:pin'
Expand Down
4 changes: 0 additions & 4 deletions settings_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
SITE_URL = 'http://testserver'

ALLOW_SIMULATE = True
TEST_PIN_UI = False

BROWSERID_DOMAIN = 'nowhereatall.org'
BROWSERID_UNVERIFIED_ISSUER = BROWSERID_DOMAIN
Expand Down Expand Up @@ -56,9 +55,6 @@

CACHE_PREFIX = 'webpay:test'

SPA_ENABLE = False
SPA_ENABLE_URLS = True

SPARTACUS_BUILD_ID_KEY = 'spartacus-build-id'
SPARTACUS_STATIC = '/mozpay/media'

Expand Down
59 changes: 10 additions & 49 deletions webpay/api/api.py
Original file line number Diff line number Diff line change
@@ -1,62 +1,23 @@
from django import http
from django.core.exceptions import ObjectDoesNotExist

from rest_framework import response, serializers, viewsets

from lib.solitude.api import client
from lib.solitude.constants import PROVIDERS_INVERTED
from rest_framework import response, viewsets

from webpay.api.base import BuyerIsLoggedIn
from webpay.base.logger import getLogger
from webpay.pay.views import configure_transaction, process_pay_req, simulate

from .base import BuyerIsLoggedIn
from webpay.pay import tasks

log = getLogger('w.api')


class TransactionSerializer(serializers.Serializer):
provider = serializers.CharField()
pay_url = serializers.CharField()

def __init__(self, data):
if 'provider' in data and data['provider'] in PROVIDERS_INVERTED:
data['provider'] = PROVIDERS_INVERTED[data['provider']]
super(TransactionSerializer, self).__init__(data)


class PayViewSet(viewsets.ViewSet):
class SimulateViewSet(viewsets.ViewSet):
permission_classes = (BuyerIsLoggedIn,)

def create(self, request):
res = process_pay_req(request, data=request.DATA)
if isinstance(res, http.HttpResponse):
return res
return configure_transaction(request, data=request.DATA)

def retrieve(self, request):
try:
trans_id = request.session['trans_id']
transaction = client.get_transaction(uuid=trans_id)
except ObjectDoesNotExist:
return response.Response({
'error_code': 'TRANSACTION_NOT_FOUND',
'error': 'Transaction could not be found.',
}, status=404)
except KeyError:
return response.Response({
'error_code': 'TRANS_ID_NOT_SET',
'error': 'trans_id was not set.',
}, status=400)
else:
serializer = TransactionSerializer(transaction)
return response.Response(serializer.data)
if not request.session.get('is_simulation', False):
log.info('Request to simulate without a valid session')
return http.HttpResponseForbidden()

tasks.simulate_notify.delay(request.session['notes']['issuer_key'],
request.session['notes']['pay_request'])

class SimulateViewSet(viewsets.ViewSet):
permission_classes = (BuyerIsLoggedIn,)

def create(self, request):
res = simulate(request)
if res.status_code == 200:
res = response.Response(status=204)
return res
return response.Response(status=204)
Loading

0 comments on commit 7a82d96

Please sign in to comment.