Skip to content

Commit

Permalink
Add more request settings flow tests (#1190)
Browse files Browse the repository at this point in the history
* Add more request settings flow tests

* fmt

* fix lint
  • Loading branch information
anniel-stripe authored Jan 5, 2024
1 parent 147ad23 commit 1447d3b
Show file tree
Hide file tree
Showing 2 changed files with 172 additions and 8 deletions.
120 changes: 112 additions & 8 deletions tests/api_resources/abstract/test_api_resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,17 @@ class TestAPIResource(object):
class MyResource(stripe.APIResource):
OBJECT_NAME = "myresource"

class MyDeletableResource(stripe.DeletableAPIResource):
OBJECT_NAME = "myresource"

@classmethod
def my_method(cls, **params):
return cls._static_request(
"post",
cls.class_url(),
params=params,
)

def test_retrieve_and_refresh(self, http_client_mock):
path = "/v1/myresources/foo%2A"
query_string = "myparam=5"
Expand Down Expand Up @@ -122,24 +133,24 @@ def test_raise_on_incorrect_id_type(self):
with pytest.raises(stripe.error.InvalidRequestError):
self.MyResource.retrieve(obj)

def test_class_method_does_not_forward_options(self, http_client_mock):
http_client_mock.stub_request(
"get",
"/v1/myresources/foo",
rbody='{"id": "foo"}',
)

def test_class_methods_use_global_options(self, http_client_mock):
key = "newkey"
stripe_version = "2023-01-01"
stripe_account = "acct_foo"

resource = self.MyResource.construct_from(
resource = self.MyDeletableResource.construct_from(
{"id": "foo"},
key=key,
stripe_version=stripe_version,
stripe_account=stripe_account,
)

http_client_mock.stub_request(
"get",
"/v1/myresources/foo",
rbody='{"id": "foo"}',
)

resource.retrieve("foo")

http_client_mock.assert_requested(
Expand All @@ -150,6 +161,22 @@ def test_class_method_does_not_forward_options(self, http_client_mock):
extra_headers={"Stripe-Account": None},
)

http_client_mock.stub_request(
"post",
"/v1/myresources",
rbody='{"id": "foo", "object": "myresource"}',
)

self.MyDeletableResource.my_method()

http_client_mock.assert_requested(
"post",
path="/v1/myresources",
api_key=stripe.api_key,
stripe_version=stripe.api_version,
extra_headers={"Stripe-Account": None},
)

def test_class_method_prefers_method_arguments(self, http_client_mock):
http_client_mock.stub_request(
"get",
Expand Down Expand Up @@ -179,6 +206,83 @@ def test_class_method_prefers_method_arguments(self, http_client_mock):
stripe_account="acct_bar",
)

def test_retrieve_forwards_options(self, http_client_mock):
http_client_mock.stub_request(
"get",
"/v1/myresources/foo",
rbody='{"id": "foo"}',
)

res = self.MyDeletableResource.retrieve(
"foo",
api_key="newkey",
stripe_version="2023-01-01",
stripe_account="foo",
)

http_client_mock.assert_requested(
"get",
path="/v1/myresources/foo",
api_key="newkey",
stripe_version="2023-01-01",
stripe_account="foo",
)

http_client_mock.stub_request(
"delete",
"/v1/myresources/foo",
)

res.delete()

http_client_mock.assert_requested(
"delete",
path="/v1/myresources/foo",
api_key="newkey",
stripe_version="2023-01-01",
stripe_account="foo",
)

def test_class_method_forwards_options(self, http_client_mock):
from stripe._object_classes import OBJECT_CLASSES

OBJECT_CLASSES["myresource"] = self.MyDeletableResource

http_client_mock.stub_request(
"post",
"/v1/myresources",
rbody='{"id": "foo", "object": "myresource"}',
)

res = self.MyDeletableResource.my_method(
api_key="newkey", stripe_version="2023-01-01", stripe_account="foo"
)

http_client_mock.assert_requested(
"post",
path="/v1/myresources",
api_key="newkey",
stripe_version="2023-01-01",
stripe_account="foo",
)

http_client_mock.stub_request(
"delete",
"/v1/myresources/foo",
)

res.delete()

http_client_mock.assert_requested(
"delete",
path="/v1/myresources/foo",
api_key="newkey",
stripe_version="2023-01-01",
stripe_account="foo",
)

del OBJECT_CLASSES["myresource"]

def test_instance_method_forwards_options(self, http_client_mock):
http_client_mock.stub_request(
"get",
Expand Down
60 changes: 60 additions & 0 deletions tests/api_resources/test_list_object.py
Original file line number Diff line number Diff line change
Expand Up @@ -338,3 +338,63 @@ def test_class_method_two_pages(self, http_client_mock):
"get", path="/v1/charges", query_string="limit=25&foo=bar"
)
assert seen == ["ch_001"]

def test_iter_forwards_api_key(self, http_client_mock):
http_client_mock.stub_request(
"get",
path="/v1/charges",
rbody='{"object": "list", "data": [{"id": "ch_001"}], "url": "/v1/charges", "has_more": true}',
)

http_client_mock.stub_request(
"get",
path="/v1/charges",
query_string="starting_after=ch_001",
rbody='{"object": "list", "data": [{"id": "ch_002"}], "url": "/v1/charges", "has_more": false}',
)

lo = stripe.Charge.list(api_key="sk_test_iter_forwards_options")

assert lo.api_key == "sk_test_iter_forwards_options"

seen = [item["id"] for item in lo.auto_paging_iter()]

http_client_mock.assert_requested(
"get", path="/v1/charges", api_key="sk_test_iter_forwards_options"
)

http_client_mock.assert_requested(
"get",
path="/v1/charges",
query_string="starting_after=ch_001",
api_key="sk_test_iter_forwards_options",
)
assert seen == ["ch_001", "ch_002"]

def test_forwards_api_key_to_nested_resources(self, http_client_mock):
http_client_mock.stub_request(
"get",
path="/v1/products",
rbody='{"object": "list", "data": [{"id": "prod_001", "object": "product"}], "url": "/v1/products", "has_more": true}',
)

lo = stripe.Product.list(api_key="sk_test_iter_forwards_options")
assert lo.api_key == "sk_test_iter_forwards_options"

http_client_mock.assert_requested(
"get", path="/v1/products", api_key="sk_test_iter_forwards_options"
)

http_client_mock.stub_request(
"delete",
path="/v1/products/prod_001",
)

lo.data[0].delete()

http_client_mock.assert_requested(
"delete",
path="/v1/products/prod_001",
api_key="sk_test_iter_forwards_options",
)
assert lo.data[0].api_key == "sk_test_iter_forwards_options"

0 comments on commit 1447d3b

Please sign in to comment.