Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/stripe/api_resources/abstract/test_helpers.py: 51%

31 statements  

« prev     ^ index     » next       coverage.py v6.4.4, created at 2023-07-17 14:22 -0600

1from __future__ import absolute_import, division, print_function 

2 

3from stripe import error, util, six 

4from stripe.six.moves.urllib.parse import quote_plus 

5from stripe.api_resources.abstract import APIResource 

6 

7 

8class APIResourceTestHelpers: 

9 """ 

10 The base type for the TestHelper nested classes. 

11 Handles request URL generation for test_helper custom methods. 

12 Should be used in combination with the @test_helpers decorator. 

13 

14 @test_helpers 

15 class Foo(APIResource): 

16 class TestHelpers(APIResourceTestHelpers): 

17 """ 

18 

19 def __init__(self, resource): 

20 self.resource = resource 

21 

22 @classmethod 

23 def class_url(cls): 

24 if cls == APIResourceTestHelpers: 

25 raise NotImplementedError( 

26 "APIResourceTestHelpers is an abstract class. You should perform " 

27 "actions on its subclasses (e.g. Charge, Customer)" 

28 ) 

29 # Namespaces are separated in object names with periods (.) and in URLs 

30 # with forward slashes (/), so replace the former with the latter. 

31 base = cls._resource_cls.OBJECT_NAME.replace(".", "/") 

32 return "/v1/test_helpers/%ss" % (base,) 

33 

34 def instance_url(self): 

35 id = self.resource.get("id") 

36 

37 if not isinstance(id, six.string_types): 

38 raise error.InvalidRequestError( 

39 "Could not determine which URL to request: %s instance " 

40 "has invalid ID: %r, %s. ID should be of type `str` (or" 

41 " `unicode`)" % (type(self).__name__, id, type(id)), 

42 "id", 

43 ) 

44 

45 id = util.utf8(id) 

46 base = self.class_url() 

47 extn = quote_plus(id) 

48 return "%s/%s" % (base, extn) 

49 

50 

51def test_helpers(cls): 

52 """ 

53 test_helpers decorator adds a test_helpers property and 

54 wires the parent resource class to the nested TestHelpers class. 

55 

56 Should only be used on types that inherit from APIResource. 

57 

58 @test_helpers 

59 class Foo(APIResource): 

60 class TestHelpers(APIResourceTestHelpers): 

61 """ 

62 

63 def test_helpers_getter(self): 

64 return self.TestHelpers(self) 

65 

66 if not issubclass(cls, APIResource): 66 ↛ 67line 66 didn't jump to line 67, because the condition on line 66 was never true

67 raise ValueError( 

68 "Could not apply @test_helpers decorator to %r." 

69 " The class should a subclass of APIResource." % cls 

70 ) 

71 

72 cls.TestHelpers._resource_cls = cls 

73 cls.TestHelpers._static_request = cls._static_request 

74 cls.TestHelpers._static_request_stream = cls._static_request_stream 

75 

76 cls.test_helpers = property(test_helpers_getter) 

77 return cls