From 80c04ee9bbef7ac5dda8b974a395564cb7b68703 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 15 Jan 2019 19:09:12 +0100 Subject: [PATCH] got a little further - still failing --- rowers/braintreestuff.py | 8 +- rowers/tests/mocks.py | 204 +++++++++++++++++----------------- rowers/tests/test_payments.py | 44 +++++--- rowers/views.py | 3 +- 4 files changed, 137 insertions(+), 122 deletions(-) diff --git a/rowers/braintreestuff.py b/rowers/braintreestuff.py index f03bc2e1..e6e79974 100644 --- a/rowers/braintreestuff.py +++ b/rowers/braintreestuff.py @@ -43,6 +43,7 @@ else: ) ) + from rowers.models import Rower,PaidPlan from rowers.utils import ProcessorCustomerError @@ -208,6 +209,9 @@ def update_subscription(rower,data,method='up'): def create_subscription(rower,data): planid = data['plan'] plan = PaidPlan.objects.get(id=planid) + print plan + print data + raise ValueError nonce_from_the_client = data['payment_method_nonce'] amount = data['amount'] @@ -217,22 +221,18 @@ def create_subscription(rower,data): "payment_method_nonce": nonce_from_the_client }) - print 'aap' if result.is_success: payment_method_token = result.payment_method.token else: return False,0 - print 'noot' - result = gateway.subscription.create({ "payment_method_token": payment_method_token, "plan_id": plan.external_id }) if result.is_success: - print 'mies' rower.paidplan = plan rower.planexpires = result.subscription.billing_period_end_date rower.teamplanexpires = result.subscription.billing_period_end_date diff --git a/rowers/tests/mocks.py b/rowers/tests/mocks.py index 5a7c8ba7..644a9915 100644 --- a/rowers/tests/mocks.py +++ b/rowers/tests/mocks.py @@ -172,125 +172,131 @@ class MockStravalibClient(): def update_activity(*args, **kwargs): return StravaActivity() -class gatewayresult(): - def __init__(self,*args,**kwargs): - self.is_success = kwargs.pop('is_success',True) - self.customer_id = 1 - self.transaction = vtransaction() - self.payment_method = payment_method() - self.subscription = vsubscription() - -class credit_card(): - def __init__(self, *args, **kwargs): - self.subscriptions = [vsubscription()] - self.country_of_issuance = 'US' - -class paypal_account(): - def __init__(self, *args, **kwargs): - self.subscriptions = [vsubscription(),vsubscription()] +def mocked_gateway(*args, **kwargs): + class gatewayresult(): + def __init__(self,*args,**kwargs): + self.is_success = kwargs.pop('is_success',True) + self.customer_id = 1 + self.transaction = vtransaction() + self.payment_method = payment_method() + self.subscription = vsubscription() + + def __unicode__(): + return "mockedgatewayresult" -class customer(): - def find(*arg, **kwargs): - return self + class credit_card(): + def __init__(self, *args, **kwargs): + self.subscriptions = [vsubscription()] + self.country_of_issuance = 'US' + + class paypal_account(): + def __init__(self, *args, **kwargs): + self.subscriptions = [vsubscription(),vsubscription()] + + class customer(): + def find(*arg, **kwargs): + return self - def create(*args, **kwargs): - return gatewayresult(is_success=True) + def create(*args, **kwargs): + return gatewayresult(is_success=True) - def __init__(self, *args, **kwargs): - self.credit_cards = [credit_card(),credit_card()] - self.paypal_accounts = [paypal_account()] + def __init__(self, *args, **kwargs): + self.credit_cards = [credit_card(),credit_card()] + self.paypal_accounts = [paypal_account()] -class client_token(): - def generate(*args, **kwargs): - return 'aapnooit' + class client_token(): + def generate(*args, **kwargs): + return 'aapnooit' -class plan(): - def all(*args, **kwargs): - return [] + class plan(): + def all(*args, **kwargs): + return [] -class transaction(): - def sale(*args, **kwargs): - return gatewayresult(is_success=True) + class transaction(): + def sale(*args, **kwargs): + return gatewayresult(is_success=True) - def search(*args, **kwargs): - return [gatewayresult(is_success=True),gatewayresult(is_success=True)] + def search(*args, **kwargs): + return [gatewayresult(is_success=True),gatewayresult(is_success=True)] - def __init__(self,*args, **kwargs): - self.amount = 15 - self.credit_card_details = credit_card() - self.customer = { - 'first_name': 'John', - 'last_name': 'Doe', - 'id': 12 + def __init__(self,*args, **kwargs): + self.amount = 15 + self.credit_card_details = credit_card() + self.customer = { + 'first_name': 'John', + 'last_name': 'Doe', + 'id': 12 } - self.created_at = datetime.datetime.now() - self.currency_iso_code = 'EUR' + self.created_at = datetime.datetime.now() + self.currency_iso_code = 'EUR' -class vtransaction(): - def __init__(self,*args, **kwargs): - self.amount = 15 - self.credit_card_details = credit_card() - self.customer = { - 'first_name': 'John', - 'last_name': 'Doe', - 'id': 12 + class vtransaction(): + def __init__(self,*args, **kwargs): + self.amount = 15 + self.credit_card_details = credit_card() + self.customer = { + 'first_name': 'John', + 'last_name': 'Doe', + 'id': 12 } - self.created_at = datetime.datetime.now() - self.currency_iso_code = 'EUR' + self.created_at = datetime.datetime.now() + self.currency_iso_code = 'EUR' -class vsubscription(): - def update(*args, **kwargs): - return gatewayresult(is_success=True) + class vsubscription(): + def update(*args, **kwargs): + print 'aap vsubscription' + return gatewayresult(is_success=True) - def cancel(*args, **kwargs): - return gatewayresult() + def cancel(*args, **kwargs): + return gatewayresult(is_success=True) - def __init__(self, *args, **kwargs): - self.id = 121 - self.billing_period_end_date = (datetime.datetime.now()+datetime.timedelta(days=365)).date() - self.status = 'Active' - self.plan_id = 12 - self.price = 15 - self.never_expires = True - -class subscription(): - def create(*args, **kwargs): - return gatewayresult(is_success=True) - - def update(*args, **kwargs): - return gatewayresult(is_success=True) - - def cancel(*args, **kwargs): - return gatewayresult() - - def __init__(self, *args, **kwargs): - self.id = 121 - self.billing_period_end_date = (datetime.datetime.now()+datetime.timedelta(days=365)).date() - self.transactions = [vtransaction()] - self.status = 'Active' - self.plan_id = 12 - self.price = 15 - self.never_expires = True + def __init__(self, *args, **kwargs): + self.id = 121 + self.billing_period_end_date = (datetime.datetime.now()+datetime.timedelta(days=365)).date() + self.status = 'Active' + self.plan_id = 12 + self.price = 15 + self.never_expires = True + + class subscription(): + def create(*args, **kwargs): + print 'aap subscription' + return gatewayresult(is_success=True) + + def update(*args, **kwargs): + return gatewayresult(is_success=True) + + def cancel(*args, **kwargs): + return gatewayresult(is_success=True) + + def __init__(self, *args, **kwargs): + self.id = 121 + self.billing_period_end_date = (datetime.datetime.now()+datetime.timedelta(days=365)).date() + self.transactions = [vtransaction()] + self.status = 'Active' + self.plan_id = 12 + self.price = 15 + self.never_expires = True -class payment_method(): - def create(*args, **kwargs): - return gatewayresult() + class payment_method(): + def create(*args, **kwargs): + return gatewayresult() - def __init__(self, *args, **kwargs): - self.token = 'liesjeleerdelotje' + def __init__(self, *args, **kwargs): + self.token = 'liesjeleerdelotje' -# mock braintree gateway -class MockBraintreeGateway(): - def __init__(self,*args, **kwargs): - self.customer = customer() - self.client_token = client_token() - self.plan = plan() - self.transaction = transaction() - self.subscription = subscription() - self.payment_method = payment_method() + # mock braintree gateway + class MockBraintreeGateway(): + def __init__(self,*args, **kwargs): + self.customer = customer() + self.client_token = client_token() + self.plan = plan() + self.transaction = transaction() + self.subscription = subscription() + self.payment_method = payment_method() class mocked_rowingdata(rowingdata): diff --git a/rowers/tests/test_payments.py b/rowers/tests/test_payments.py index c6341649..1465ed28 100644 --- a/rowers/tests/test_payments.py +++ b/rowers/tests/test_payments.py @@ -19,46 +19,54 @@ class PaymentTest(TestCase): country = faker.country(), ) - p = PaidPlan( + # settings.DEBUG = True + + p1 = PaidPlan( shortname='free', name='Basic', external_id='a', price=0, + clubsize=0, paymentprocessor='braintree', paymenttype='single', ) - p.save() + p1.save() - p = PaidPlan( + p2 = PaidPlan( shortname='pro_recurring', name='Pro (recurring)', external_id='b', price=15, + clubsize=0, paymentprocessor='braintree', paymenttype='single', ) - p.save() + p2.save() - p = PaidPlan( + p3 = PaidPlan( shortname='pro_single', name='Pro (single)', external_id='c', price=20, + clubsize=0, paymentprocessor='braintree', paymenttype='single', ) - p.save() + p3.save() self.c = Client() self.password = faker.word() self.u.set_password(self.password) self.u.save() - @patch('rowers.braintreestuff.braintree.BraintreeGateway',side_effect=MockBraintreeGateway) - def test_billing_view(self,mock_gateway): + # def tearDown(self): + # settings.DEBUG = False + + @patch('rowers.braintreestuff.gateway',side_effect=mocked_gateway) + def test_billing_view(self,MockBraintreeGateway): login = self.c.login(username=self.u.username, password=self.password) self.assertTrue(login) @@ -99,8 +107,8 @@ class PaymentTest(TestCase): expected_url = expected_url, status_code=302,target_status_code=200) - @patch('rowers.braintreestuff.braintree.BraintreeGateway',side_effect=MockBraintreeGateway) - def test_upgrade_view(self,mock_gateway): + @patch('rowers.braintreestuff.gateway',side_effect=mocked_gateway) + def test_upgrade_view(self,MockBraintreeGateway): self.r.country = 'NL' self.r.customer_id = 34 self.r.subscription_id = 34 @@ -146,8 +154,8 @@ class PaymentTest(TestCase): expected_url = expected_url, status_code=302,target_status_code=200) - @patch('rowers.braintreestuff.braintree.BraintreeGateway',side_effect=MockBraintreeGateway) - def test_down_view(self,mock_gateway): + @patch('rowers.braintreestuff.gateway',side_effect=mocked_gateway) + def test_down_view(self,MockBraintreeGateway): self.r.country = 'NL' self.r.customer_id = 34 self.r.subscription_id = 34 @@ -196,8 +204,8 @@ class PaymentTest(TestCase): expected_url = expected_url, status_code=302,target_status_code=200) - @patch('rowers.braintreestuff.braintree.BraintreeGateway',side_effect=MockBraintreeGateway) - def test_planstop_view(self,mock_gateway): + @patch('rowers.braintreestuff.gateway',side_effect=mocked_gateway) + def test_planstop_view(self,MockBraintreeGateway): self.r.country = 'NL' self.r.customer_id = 34 self.r.subscription_id = 34 @@ -218,8 +226,8 @@ class PaymentTest(TestCase): self.assertEqual(response.status_code,200) - @patch('rowers.braintreestuff.braintree.BraintreeGateway',side_effect=MockBraintreeGateway) - def test_planstobasic_view(self,mock_gateway): + @patch('rowers.braintreestuff.gateway',side_effect=mocked_gateway) + def test_planstobasic_view(self,MockBraintreeGateway): self.r.country = 'NL' self.r.customer_id = 34 self.r.subscription_id = 34 @@ -242,8 +250,8 @@ class PaymentTest(TestCase): expected_url = '/rowers/me/cancelsubscriptions/', status_code=302,target_status_code=200) - @patch('rowers.braintreestuff.braintree.BraintreeGateway',side_effect=MockBraintreeGateway) - def test_checkouts_view(self,mock_gateway): + @patch('rowers.braintreestuff.gateway',side_effect=mocked_gateway) + def test_checkouts_view(self,MockBraintreeGateway): plans = PaidPlan.objects.all().order_by('price') plan = plans[1] diff --git a/rowers/views.py b/rowers/views.py index 6400c2e4..c1bc094d 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -1040,7 +1040,7 @@ def ispromember(user): if not user.is_anonymous(): try: r = Rower.objects.get(user=user) - except Rower.DoesNotExists: + except Rower.DoesNotExist: r = Rower(user=user) r.save() @@ -1381,6 +1381,7 @@ def checkouts_view(request): form = BillingForm(request.POST) if form.is_valid(): data = form.cleaned_data + print r success,amount = braintreestuff.create_subscription(r,data) if success: messages.info(request,"Your payment has succeeded and your plan has been updated")