Skip to content

Commit

Permalink
Merge pull request stripe#159 from stripe/disputes
Browse files Browse the repository at this point in the history
Add top-level dispute methods.
  • Loading branch information
cupcait committed Aug 3, 2015
2 parents 9fae10a + 60b6abb commit 04b0e62
Show file tree
Hide file tree
Showing 4 changed files with 145 additions and 22 deletions.
46 changes: 37 additions & 9 deletions stripe/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,26 +15,54 @@

# Resource
from stripe.resource import ( # noqa
Account, Balance, BalanceTransaction, BankAccount, Card,
Charge, Customer, Invoice, InvoiceItem, Plan, Token, Coupon,
Event, Transfer, Recipient, FileUpload,
ApplicationFee, Subscription, BitcoinReceiver, BitcoinTransaction)
Account,
ApplicationFee,
Balance,
BalanceTransaction,
BankAccount,
BitcoinReceiver,
BitcoinTransaction,
Card,
Charge,
Coupon,
Customer,
Dispute,
Event,
FileUpload,
Invoice,
InvoiceItem,
Plan,
Recipient,
Subscription,
Token,
Transfer)

# Error imports. Note that we may want to move these out of the root
# namespace in the future and you should prefer to access them via
# the fully qualified `stripe.error` module.

from stripe.error import ( # noqa
StripeError, APIError, APIConnectionError, AuthenticationError, CardError,
InvalidRequestError)
APIConnectionError,
APIError,
AuthenticationError,
CardError,
InvalidRequestError,
StripeError)

# DEPRECATED: These imports will be moved out of the root stripe namespace
# in version 2.0

from stripe.version import VERSION # noqa
from stripe.api_requestor import APIRequestor # noqa
from stripe.resource import ( # noqa
convert_to_stripe_object, StripeObject, StripeObjectEncoder,
APIResource, ListObject, SingletonAPIResource, ListableAPIResource,
CreateableAPIResource, UpdateableAPIResource, DeletableAPIResource)
APIResource,
CreateableAPIResource,
DeletableAPIResource,
ListObject,
ListableAPIResource,
SingletonAPIResource,
StripeObject,
StripeObjectEncoder,
UpdateableAPIResource,
convert_to_stripe_object)
from stripe.util import json, logger # noqa
47 changes: 35 additions & 12 deletions stripe/resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,31 @@


def convert_to_stripe_object(resp, api_key, account):
types = {'account': Account, 'charge': Charge, 'customer': Customer,
'invoice': Invoice, 'invoiceitem': InvoiceItem,
'plan': Plan, 'coupon': Coupon, 'token': Token, 'event': Event,
'transfer': Transfer, 'list': ListObject, 'recipient': Recipient,
'bank_account': BankAccount,
'card': Card, 'application_fee': ApplicationFee,
'subscription': Subscription, 'refund': Refund,
'file_upload': FileUpload,
'fee_refund': ApplicationFeeRefund,
'bitcoin_receiver': BitcoinReceiver,
'bitcoin_transaction': BitcoinTransaction,
'transfer_reversal': Reversal}
types = {
'account': Account,
'application_fee': ApplicationFee,
'bank_account': BankAccount,
'bitcoin_receiver': BitcoinReceiver,
'bitcoin_transaction': BitcoinTransaction,
'card': Card,
'charge': Charge,
'coupon': Coupon,
'customer': Customer,
'dispute': Dispute,
'event': Event,
'fee_refund': ApplicationFeeRefund,
'file_upload': FileUpload,
'invoice': Invoice,
'invoiceitem': InvoiceItem,
'list': ListObject,
'plan': Plan,
'recipient': Recipient,
'refund': Refund,
'subscription': Subscription,
'token': Token,
'transfer': Transfer,
'transfer_reversal': Reversal,
}

if isinstance(resp, list):
return [convert_to_stripe_object(i, api_key, account) for i in resp]
Expand Down Expand Up @@ -525,6 +538,16 @@ def mark_as_safe(self, idempotency_key=None):
return self


class Dispute(CreateableAPIResource, ListableAPIResource,
UpdateableAPIResource):

def close(self, idempotency_key=None):
url = self.instance_url() + '/close'
headers = populate_headers(idempotency_key)
self.refresh_from(self.request('post', url, {}, headers))
return self


class Customer(CreateableAPIResource, UpdateableAPIResource,
ListableAPIResource, DeletableAPIResource):

Expand Down
6 changes: 6 additions & 0 deletions stripe/test/helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@
'card': DUMMY_CARD
}

DUMMY_DISPUTE = {
'status': 'needs_response',
'currency': 'usd',
'metadata': {}
}

DUMMY_PLAN = {
'amount': 2000,
'interval': 'month',
Expand Down
68 changes: 67 additions & 1 deletion stripe/test/test_resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
MySingleton, MyListable, MyCreatable, MyUpdateable, MyDeletable,
MyResource, SAMPLE_INVOICE, NOW,
DUMMY_CARD, DUMMY_CHARGE, DUMMY_PLAN, DUMMY_COUPON,
DUMMY_INVOICE_ITEM)
DUMMY_INVOICE_ITEM, DUMMY_DISPUTE)

from stripe import util

Expand Down Expand Up @@ -823,6 +823,72 @@ def test_create_with_source_param(self):
)


class DisputeTest(StripeResourceTest):

def test_list_all_disputes(self):
stripe.Dispute.all(created={'lt': NOW})

self.requestor_mock.request.assert_called_with(
'get',
'/v1/disputes',
{
'created': {'lt': NOW},
}
)

def test_create_dispute(self):
stripe.Dispute.create(idempotency_key='foo', **DUMMY_DISPUTE)

self.requestor_mock.request.assert_called_with(
'post',
'/v1/disputes',
DUMMY_DISPUTE,
{'Idempotency-Key': 'foo'},
)

def test_retrieve_dispute(self):
stripe.Dispute.retrieve('dp_test_id')

self.requestor_mock.request.assert_called_with(
'get',
'/v1/disputes/dp_test_id',
{},
None
)

def test_update_dispute(self):
dispute = stripe.Dispute.construct_from({
'id': 'dp_update_id',
'evidence': {
'product_description': 'description',
},
}, 'api_key')
dispute.evidence['customer_name'] = 'customer'
dispute.evidence['uncategorized_text'] = 'text'
dispute.save()

self.requestor_mock.request.assert_called_with(
'post',
'/v1/disputes/dp_update_id',
{'evidence': {
'customer_name': 'customer',
'uncategorized_text': 'text',
}},
None
)

def test_close_dispute(self):
dispute = stripe.Dispute(id='dp_close_id')
dispute.close(idempotency_key='foo')

self.requestor_mock.request.assert_called_with(
'post',
'/v1/disputes/dp_close_id/close',
{},
{'Idempotency-Key': 'foo'},
)


class AccountTest(StripeResourceTest):

def test_retrieve_account_deprecated(self):
Expand Down

0 comments on commit 04b0e62

Please sign in to comment.