Skip to content

Commit

Permalink
Add new methods to Invoice resource
Browse files Browse the repository at this point in the history
  • Loading branch information
remi-stripe committed Nov 9, 2018
1 parent afcd483 commit 2a8de32
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 2 deletions.
29 changes: 27 additions & 2 deletions stripe/api_resources/invoice.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,39 @@

from stripe import api_requestor, util
from stripe.api_resources.abstract import CreateableAPIResource
from stripe.api_resources.abstract import DeletableAPIResource
from stripe.api_resources.abstract import UpdateableAPIResource
from stripe.api_resources.abstract import ListableAPIResource


class Invoice(CreateableAPIResource, ListableAPIResource,
UpdateableAPIResource):
class Invoice(CreateableAPIResource, UpdateableAPIResource,
DeletableAPIResource, ListableAPIResource):
OBJECT_NAME = 'invoice'

def finalize_invoice(self, idempotency_key=None, **params):
url = self.instance_url() + '/finalize'
headers = util.populate_headers(idempotency_key)
self.refresh_from(self.request('post', url, params, headers))
return self

def mark_uncollectible(self, idempotency_key=None, **params):
url = self.instance_url() + '/mark_uncollectible'
headers = util.populate_headers(idempotency_key)
self.refresh_from(self.request('post', url, params, headers))
return self

def pay(self, idempotency_key=None, **params):
url = self.instance_url() + '/pay'
headers = util.populate_headers(idempotency_key)
self.refresh_from(self.request('post', url, params, headers))
return self

def send_invoice(self, idempotency_key=None, **params):
url = self.instance_url() + '/send'
headers = util.populate_headers(idempotency_key)
self.refresh_from(self.request('post', url, params, headers))
return self

@classmethod
def upcoming(cls, api_key=None, stripe_version=None, stripe_account=None,
**params):
Expand All @@ -26,3 +45,9 @@ def upcoming(cls, api_key=None, stripe_version=None, stripe_account=None,
response, api_key = requestor.request('get', url, params)
return util.convert_to_stripe_object(response, api_key, stripe_version,
stripe_account)

def void_invoice(self, idempotency_key=None, **params):
url = self.instance_url() + '/void'
headers = util.populate_headers(idempotency_key)
self.refresh_from(self.request('post', url, params, headers))
return self
45 changes: 45 additions & 0 deletions tests/api_resources/test_invoice.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,33 @@ def test_is_modifiable(self, request_mock):
)
assert isinstance(resource, stripe.Invoice)

def test_is_deletable(self, request_mock):
resource = stripe.Invoice.retrieve(TEST_RESOURCE_ID)
resource.delete()
request_mock.assert_requested(
'delete',
'/v1/invoices/%s' % TEST_RESOURCE_ID
)
assert resource.deleted is True

def test_can_finalize_invoice(self, request_mock):
resource = stripe.Invoice.retrieve(TEST_RESOURCE_ID)
resource = resource.finalize_invoice()
request_mock.assert_requested(
'post',
'/v1/invoices/%s/finalize' % TEST_RESOURCE_ID
)
assert isinstance(resource, stripe.Invoice)

def test_can_mark_uncollectible(self, request_mock):
resource = stripe.Invoice.retrieve(TEST_RESOURCE_ID)
resource = resource.mark_uncollectible()
request_mock.assert_requested(
'post',
'/v1/invoices/%s/mark_uncollectible' % TEST_RESOURCE_ID
)
assert isinstance(resource, stripe.Invoice)

def test_can_pay(self, request_mock):
resource = stripe.Invoice.retrieve(TEST_RESOURCE_ID)
resource = resource.pay()
Expand All @@ -63,6 +90,15 @@ def test_can_pay(self, request_mock):
)
assert isinstance(resource, stripe.Invoice)

def test_can_send_invoice(self, request_mock):
resource = stripe.Invoice.retrieve(TEST_RESOURCE_ID)
resource = resource.send_invoice()
request_mock.assert_requested(
'post',
'/v1/invoices/%s/send' % TEST_RESOURCE_ID
)
assert isinstance(resource, stripe.Invoice)

def test_can_upcoming(self, request_mock):
resource = stripe.Invoice.upcoming(
customer="cus_123"
Expand All @@ -72,3 +108,12 @@ def test_can_upcoming(self, request_mock):
'/v1/invoices/upcoming'
)
assert isinstance(resource, stripe.Invoice)

def test_can_void_invoice(self, request_mock):
resource = stripe.Invoice.retrieve(TEST_RESOURCE_ID)
resource = resource.void_invoice()
request_mock.assert_requested(
'post',
'/v1/invoices/%s/void' % TEST_RESOURCE_ID
)
assert isinstance(resource, stripe.Invoice)

0 comments on commit 2a8de32

Please sign in to comment.