Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add infrastructure for test-helper methods #773

Merged
merged 10 commits into from
Mar 25, 2022
Prev Previous commit
Next Next commit
fb
  • Loading branch information
pakrym-stripe committed Mar 25, 2022
commit 07f9ae509063b21ab1b489c75af2858b0a6e597e
25 changes: 25 additions & 0 deletions stripe/api_resources/abstract/test_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,15 @@

from stripe import error, util, six
from stripe.six.moves.urllib.parse import quote_plus
from stripe.api_resources.abstract import APIResource


class APIResourceTestHelpers:
"""
The base type for the TestHelper nested classes.
Handles request URL generation for test_helper custom methods.
"""

def __init__(self, resource):
self.resource = resource

Expand Down Expand Up @@ -38,9 +44,28 @@ def instance_url(self):


def test_helpers(cls):
"""
test_helpers decorator adds a test_helpers property and
wires the parent resource class to the nested TestHelpers class.

Should only be used on types that inherit from APIResource

@test_helpers
class Foo(APIResource):

class TestHelpers(APIResourceTestHelpers):

"""

def test_helpers_getter(self):
return self.TestHelpers(self)

if not issubclass(cls, APIResource):
raise ValueError(
"Could not apply @test_helpers decorator to %r."
" The class should a subclass of APIResource." % cls
)

cls.TestHelpers._resource_cls = cls
cls.TestHelpers._static_request = cls._static_request
cls.TestHelpers._static_request_stream = cls._static_request_stream
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from __future__ import absolute_import, division, print_function

import stripe
import pytest
from stripe import util
from stripe.api_resources.abstract import APIResourceTestHelpers

Expand Down Expand Up @@ -42,7 +43,7 @@ def test_call_custom_method_class(self, request_mock):
)
assert obj.thing_done is True

def test_call_custom_method_instance(self, request_mock):
def test_call_custom_method_instance_via_property(self, request_mock):
request_mock.stub_request(
"post",
"/v1/test_helpers/myresources/mid/do_the_thing",
Expand All @@ -59,3 +60,7 @@ def test_call_custom_method_instance(self, request_mock):
{"foo": "bar"},
)
assert obj.thing_done is True

def test_helper_decorator_raises_for_non_resource(self):
with pytest.raises(ValueError):
stripe.api_resources.abstract.test_helpers(str)