From 259e7c0ebba35d1364ab301825ee700b13123696 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 11 Nov 2024 18:52:11 +0100 Subject: [PATCH] tests passing, removed fakturoid.py --- rowers/fakturoid.py | 153 -------------------------- rowers/tests/test_braintree.py | 12 -- rowers/tests/testdata/testdata.tcx.gz | Bin 3999 -> 4001 bytes 3 files changed, 165 deletions(-) delete mode 100644 rowers/fakturoid.py diff --git a/rowers/fakturoid.py b/rowers/fakturoid.py deleted file mode 100644 index 116021bb..00000000 --- a/rowers/fakturoid.py +++ /dev/null @@ -1,153 +0,0 @@ -import requests -import json -from requests.auth import HTTPBasicAuth -import urllib.parse -from rowers.utils import dologging - -from rowsandall_app.settings import ( - FAKTUROID_EMAIL, FAKTUROID_API_KEY, - FAKTUROID_SLUG -) - -slug = FAKTUROID_SLUG - -invoices_url = 'https://app.fakturoid.cz/api/v2/accounts/{slug}/invoices.json'.format( - slug=slug) -contacts_url = 'https://app.fakturoid.cz/api/v2/accounts/{slug}/subjects.json'.format( - slug=slug) -contacts_search_url = 'https://app.fakturoid.cz/api/v2/accounts/{slug}/subjects/search.json'.format( - slug=slug) - -auth = HTTPBasicAuth(FAKTUROID_EMAIL, FAKTUROID_API_KEY) -headers = { - 'Content-Type': 'application/json', - 'User-Agent': 'rowsandall (admin@rowsandall.com)' -} - - -def get_contacts(rower): - res = requests.get(contacts_url, auth=auth, headers=headers) - url = contacts_search_url+'?query='+urllib.parse.quote(rower.user.email) - dologging('braintreewebhooks.log','Searching Contact url :'+str(url)) - - res = requests.get(url, auth=auth, headers=headers) - - dologging('braintreewebhooks.log','Searching Contact Status code '+str(res.status_code)+'\n') - - if res.status_code != 200: # pragma: no cover - return None - - dologging('braintreewebhooks.log','Status Code '+json.dumps(res.json())+'\n') - - if len(res.json()) >= 1: - r = res.json()[0] - return r['id'] - - return None # pragma: no cover - -# this should be triggered on braintree payment - - -def create_contact(rower): - post_data = { - "name": str(rower), - "street": rower.street_address, - "street2": None, - "city": rower.city, - "zip": rower.postal_code, - "country": rower.country.code, - "vat_no": "", - "bank_account": "", - "iban": "", - "variable_symbol": rower.id, - "full_name": rower.user.first_name+" "+rower.user.last_name, - "email": rower.user.email, - "email_copy": "", - "phone": "", - "web": "" - } - - dologging('braintreewebhooks.log','Creating fakturoid contact for '+str(rower.user.email)+'\n') - - res = requests.post(contacts_url, data=json.dumps( - post_data), auth=auth, headers=headers) - - dologging('braintreewebhooks.log','Status Code '+str(res.status_code)+'\n') - - if res.status_code not in [200, 201]: # pragma: no cover - return 0 - - dologging('braintreewebhooks.log','Contact ID'+str(res.json()['id'])+'\n') - - return res.json()['id'] - -# this should be triggered by a Braintree webhook - - -def create_invoice(rower, amount, braintreeid, dosend=True, - contact_id=None, name=None): - - if not contact_id: # pragma: no cover - contact_id = get_contacts(rower) - - if not name: - name = 'Rowsandall Subscription' - - dologging('braintreewebhooks.log','Creating invoice for contact iD '+str(contact_id)+'\n') - - if not contact_id: # pragma: no cover - return 0 - - post_data = { - 'subject_id': contact_id, - 'custom_id': braintreeid, - 'language': 'en', - 'payment_method': 'card', - 'currency': 'EUR', - 'paid_amount': str(amount), - 'status': 'paid', - 'lines': [{ - 'name': name, - 'quantity': '1', - 'unit_price': str(amount), - 'vat_rate': 0, - } - ] - } - - res = requests.post(invoices_url, data=json.dumps( - post_data), auth=auth, headers=headers) - dologging('braintreewebhooks.log','Invoice Created - status code '+str(res.status_code)+'\n') - - if res.status_code not in [200, 201]: # pragma: no cover - return 0 - - # url = res.json()['url'] - id = res.json()['id'] - - urlpay = 'https://app.fakturoid.cz/api/v2/accounts/{slug}/invoices/{id}/fire.json?event=pay'.format( - id=id, slug=slug - ) - urlsend = 'https://app.fakturoid.cz/api/v2/accounts/{slug}/invoices/{id}/fire.json?event=deliver'.format( - id=id, slug=slug - ) - - res = requests.post(urlpay, auth=auth, headers=headers) - - dologging('braintreewebhooks.log','Invoice Set to paid - status code ' + - str(res.status_code)+'\n') - - if res.status_code not in [200, 201]: # pragma: no cover - return 0 - - if dosend: - res = requests.post(urlsend, auth=auth, headers=headers) - - dologging('braintreewebhooks.log','Invoice Sent - status code '+str(res.status_code)+'\n') - - return id - - # curl -u vas@email.cz:API_TOKEN -H 'User-Agent: YourApp (yourname@example.com)' \ - # -H 'Content-Type: application/json' \ - # -X POST -d '{ "subject_id": "28" }' \ - # https://app.fakturoid.cz/api/v2/accounts/{slug}/invoices.json diff --git a/rowers/tests/test_braintree.py b/rowers/tests/test_braintree.py index 7d199aa0..5ba9204b 100644 --- a/rowers/tests/test_braintree.py +++ b/rowers/tests/test_braintree.py @@ -75,18 +75,6 @@ class BraintreeUnits(TestCase): self.p2 = PaidPlan.objects.create(price=25,paymentprocessor='braintree') - @patch('rowers.fakturoid.requests.get',side_effect=mocked_requests) - @patch('rowers.fakturoid.requests.post',side_effect=mocked_requests) - @patch('rowers.braintreestuff.gateway', side_effect=MockBraintreeGateway) - @patch('rowers.braintreestuff.myqueue') - def test_process_webhook(self,mock_get,mockpost,mocked_gateway,mocked_myqueue): - n = notification() - res = process_webhook(n) - self.assertEqual(res,1) - - n = notification(kind='subscription_canceled') - res = process_webhook(n) - self.assertEqual(res,1) def test_create_customer(self): with patch('rowers.braintreestuff.gateway') as mocked_gateway: diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index 3bc0b8ef531e84fd7b59ab4d64627b1f5b048d4f..742f06bc7d35416cdb0d2ebe62c03fa93b8c3f94 100644 GIT binary patch literal 4001 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 H#DD<+8n_vP literal 3999 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 F0RZ_>K>Yv!