Path: blob/master/webhooks/webhook_tester/tests.py
1080 views
from unittest import mock12import pytest3import requests45from .webhook_tester import WebhookError, WebhookTester678class TestWebhookTester:9"""A collection of test cases for webhook tester."""1011@mock.patch.object(requests, "get")12@mock.patch.object(requests, "post")13def test_send_request(self, mock_post, mock_get):14"""Test successful response when executing send_request."""15mock_get.return_value.status_code = 20016mock_post.return_value.status_code = 2011718image_url = (19"https://platerecognizer.com/wp-content/uploads/2020/07/"20"ALPR-license-plate-reader-images-API.jpg"21)22url = "https://example.com"23tester = WebhookTester(url)24data = tester.get_webhook_payload()25files = {"upload": ("name", b"sample file content")}26options = [27{"method": "get", "kwargs": {"url": image_url}},28{29"method": "post",30"kwargs": {"url": "https://example.com", "data": data, "files": files},31},32]3334for option in options:35response = tester.send_request(option["method"], **option["kwargs"])3637if option["method"] == "get":38assert response.status_code == 20039else:40assert response.status_code == 2014142def test_send_request_exceptions(self):43"""Test successful exception handling in send_request method."""44exceptions = [45requests.exceptions.Timeout,46requests.exceptions.TooManyRedirects,47requests.exceptions.RequestException,48]49tester = WebhookTester("https://example.com")50for exception in exceptions:51with mock.patch.object(requests, "post") as mock_post:52mock_post.side_effect = exception5354with pytest.raises(WebhookError) as _:55tester.send_request("post", tester.url)5657def test_send_request_method_not_supported(self):58"""59Test method validation in send_request method.6061Only accepts get and post methods.62"""63tester = WebhookTester("https://example.com")64with pytest.raises(ValueError) as _:65tester.send_request("put", tester.url)6667@mock.patch.object(requests, "get")68def test_get_files_payload(self, mock_get):69"""Test successful retrieval of files payload."""70mock_get.return_value.content = b"Sample content"71tester = WebhookTester("https://example.com")72payload = tester.get_files_payload()73assert payload74assert payload["upload"][0]7576@mock.patch.object(requests, "get")77@mock.patch.object(requests, "post")78def test_execute_tester(self, mock_post, mock_get, capsys):79"""Test successful execution of webhook tester."""80mock_get.return_value.status_code = 20081mock_get.return_value.content = b"Sample content"82mock_post.return_value.status_code = 2018384tester = WebhookTester("https://example.com")85tester.execute()86captured = capsys.readouterr()87assert "Status code: 201" in captured.out8889@mock.patch.object(requests, "get")90@mock.patch.object(requests, "post")91def test_execute_tester_raise_error(self, mock_post, mock_get, capsys):92"""Test raising of WebhookError if status code is more than 300."""93mock_get.return_value.status_code = 20094mock_get.return_value.content = b"Sample content"95mock_post.return_value.status_code = 40096mock_post.return_value.content = "Something went wrong"9798tester = WebhookTester("https://example.com")99with pytest.raises(WebhookError) as _:100tester.execute()101102captured = capsys.readouterr()103assert "Status 400" in captured.out104assert "Something went wrong" in captured.out105106107