Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
parkpow
GitHub Repository: parkpow/deep-license-plate-recognition
Path: blob/master/webhooks/webhook_tester/tests.py
1080 views
1
from unittest import mock
2
3
import pytest
4
import requests
5
6
from .webhook_tester import WebhookError, WebhookTester
7
8
9
class TestWebhookTester:
10
"""A collection of test cases for webhook tester."""
11
12
@mock.patch.object(requests, "get")
13
@mock.patch.object(requests, "post")
14
def test_send_request(self, mock_post, mock_get):
15
"""Test successful response when executing send_request."""
16
mock_get.return_value.status_code = 200
17
mock_post.return_value.status_code = 201
18
19
image_url = (
20
"https://platerecognizer.com/wp-content/uploads/2020/07/"
21
"ALPR-license-plate-reader-images-API.jpg"
22
)
23
url = "https://example.com"
24
tester = WebhookTester(url)
25
data = tester.get_webhook_payload()
26
files = {"upload": ("name", b"sample file content")}
27
options = [
28
{"method": "get", "kwargs": {"url": image_url}},
29
{
30
"method": "post",
31
"kwargs": {"url": "https://example.com", "data": data, "files": files},
32
},
33
]
34
35
for option in options:
36
response = tester.send_request(option["method"], **option["kwargs"])
37
38
if option["method"] == "get":
39
assert response.status_code == 200
40
else:
41
assert response.status_code == 201
42
43
def test_send_request_exceptions(self):
44
"""Test successful exception handling in send_request method."""
45
exceptions = [
46
requests.exceptions.Timeout,
47
requests.exceptions.TooManyRedirects,
48
requests.exceptions.RequestException,
49
]
50
tester = WebhookTester("https://example.com")
51
for exception in exceptions:
52
with mock.patch.object(requests, "post") as mock_post:
53
mock_post.side_effect = exception
54
55
with pytest.raises(WebhookError) as _:
56
tester.send_request("post", tester.url)
57
58
def test_send_request_method_not_supported(self):
59
"""
60
Test method validation in send_request method.
61
62
Only accepts get and post methods.
63
"""
64
tester = WebhookTester("https://example.com")
65
with pytest.raises(ValueError) as _:
66
tester.send_request("put", tester.url)
67
68
@mock.patch.object(requests, "get")
69
def test_get_files_payload(self, mock_get):
70
"""Test successful retrieval of files payload."""
71
mock_get.return_value.content = b"Sample content"
72
tester = WebhookTester("https://example.com")
73
payload = tester.get_files_payload()
74
assert payload
75
assert payload["upload"][0]
76
77
@mock.patch.object(requests, "get")
78
@mock.patch.object(requests, "post")
79
def test_execute_tester(self, mock_post, mock_get, capsys):
80
"""Test successful execution of webhook tester."""
81
mock_get.return_value.status_code = 200
82
mock_get.return_value.content = b"Sample content"
83
mock_post.return_value.status_code = 201
84
85
tester = WebhookTester("https://example.com")
86
tester.execute()
87
captured = capsys.readouterr()
88
assert "Status code: 201" in captured.out
89
90
@mock.patch.object(requests, "get")
91
@mock.patch.object(requests, "post")
92
def test_execute_tester_raise_error(self, mock_post, mock_get, capsys):
93
"""Test raising of WebhookError if status code is more than 300."""
94
mock_get.return_value.status_code = 200
95
mock_get.return_value.content = b"Sample content"
96
mock_post.return_value.status_code = 400
97
mock_post.return_value.content = "Something went wrong"
98
99
tester = WebhookTester("https://example.com")
100
with pytest.raises(WebhookError) as _:
101
tester.execute()
102
103
captured = capsys.readouterr()
104
assert "Status 400" in captured.out
105
assert "Something went wrong" in captured.out
106
107