1# -*- coding: utf-8 -*-
2
3from __future__ import absolute_import, division, print_function
4
5from stripe import six, error
6
7
8class TestStripeError(object):
9    def test_formatting(self):
10        err = error.StripeError(u"öre")
11        assert six.text_type(err) == u"öre"
12        if six.PY2:
13            assert str(err) == "\xc3\xb6re"
14        else:
15            assert str(err) == u"öre"
16
17    def test_formatting_with_request_id(self):
18        err = error.StripeError(u"öre", headers={"request-id": "123"})
19        assert six.text_type(err) == u"Request 123: öre"
20        if six.PY2:
21            assert str(err) == "Request 123: \xc3\xb6re"
22        else:
23            assert str(err) == u"Request 123: öre"
24
25    def test_formatting_with_none(self):
26        err = error.StripeError(None, headers={"request-id": "123"})
27        assert six.text_type(err) == u"Request 123: <empty message>"
28        if six.PY2:
29            assert str(err) == "Request 123: <empty message>"
30        else:
31            assert str(err) == "Request 123: <empty message>"
32
33    def test_formatting_with_message_none_and_request_id_none(self):
34        err = error.StripeError(None)
35        assert six.text_type(err) == u"<empty message>"
36        if six.PY2:
37            assert str(err) == "<empty message>"
38        else:
39            assert str(err) == u"<empty message>"
40
41    def test_repr(self):
42        err = error.StripeError(u"öre", headers={"request-id": "123"})
43        if six.PY2:
44            assert (
45                repr(err)
46                == "StripeError(message=u'\\xf6re', http_status=None, "
47                "request_id='123')"
48            )
49        else:
50            assert (
51                repr(err) == "StripeError(message='öre', http_status=None, "
52                "request_id='123')"
53            )
54
55
56class TestStripeErrorWithParamCode(object):
57    def test_repr(self):
58        err = error.CardError(
59            u"öre",
60            param="cparam",
61            code="ccode",
62            http_status=403,
63            headers={"request-id": "123"},
64        )
65        if six.PY2:
66            assert (
67                repr(err) == "CardError(message=u'\\xf6re', param='cparam', "
68                "code='ccode', http_status=403, request_id='123')"
69            )
70        else:
71            assert (
72                repr(err)
73                == "CardError(message='öre', param='cparam', code='ccode', "
74                "http_status=403, request_id='123')"
75            )
76
77
78class TestApiConnectionError(object):
79    def test_default_no_retry(self):
80        err = error.APIConnectionError("msg")
81        assert err.should_retry is False
82
83        err = error.APIConnectionError("msg", should_retry=True)
84        assert err.should_retry
85